https://github.com/vga-unity/swatter
ハエ叩きゲーム的なもののプロトタイプ。タッチで箱を潰すことができる。タッチの処理とコリジョン検出のテスト。
主な処理は Swatter スクリプトで行なっている。
// 当たり判定の大きさ。
var collisionRadius = 0.5;
function Update() {
// 各タッチ点を順に処理する。
for (var touch in Input.touches) {
// タッチのフェーズが「開始」であれば……
if (touch.phase == TouchPhase.Began) {
// コリジョンのチェックを行う。
CheckCollision(touch.position);
}
}
}
// 指定されたスクリーン位置でのコリジョンチェックを行う関数。
private function CheckCollision(screenPosition : Vector3) {
// ワールド座標への変換を行う。変換後の高さは床の高さとする。
screenPosition.z = camera.transform.position.y;
var worldPosition = camera.ScreenToWorldPoint(screenPosition);
// 命中フラグ。
var hitFlag = false;
// 指定した座標の球と重なっている Collider を列挙する。
for (var collider in Physics.OverlapSphere(worldPosition, collisionRadius)) {
// 相手のタグが Enemy であれば、ダメージメッセージを送信する。
if (collider.gameObject.tag == "Enemy") {
collider.gameObject.SendMessage("ApplyDamage");
hitFlag = true;
}
}
// 空振りの場合にエフェクトを出す。
if (!hitFlag) Instantiate(missFx, worldPosition, Quaternion.identity);
}
Input.touches
から取得できる。タッチを始めた瞬間だけ検出したい場合は、タッチ情報の中にある phase
を見ればよい。これが TouchPhase.Began
であれば、タッチを開始した瞬間であるということ。ScreenToWorldPoint
を使う。入力値のZ値はカメラからの距離を指定する。ここの例ではカメラの高さを距離として使うことにより、結果的に高さ=0.0の平面上にある座標へと変換できている。Physics.OverlapSPhere
を使えばよい。任意の座標に球体を置いたと仮定して、それと接触する collider を列挙することができる。動作チェックの度に Andoird 実機への転送を行うのは面倒。これを解決するための手段として Unity Remote と呼ばれるツールが用意されている。
タッチや加速度など実機に対して行った入力を PC 上の Unity に反映させるというもの。また、PC 上でレンダリングされた映像はリアルタイムに実機へ送信され画面に表示される。
これを使うことで実機への転送を行わずに実機での動作チェックを行うことができる。
まず Unity Remote を Android 実機にインストールする。 Android Market で無料アプリとして配布されているので、これをダウンロードすればよい。
Android 実機と PC を USB ケーブルで接続し、実機上で Unity Remote を起動する。
Unity のプロジェクトの Platform を Android に切り替える。これで Unity Remote が有効になる。
以上の準備をした状態で Unity 上のゲームを普通に実行するだけでよい。うまく繋がれば、実機上にゲーム画面が表示され、実機に対する入力が Unity へと反映されるようになる。
うまく接続できない場合は、 Unity Remote を立ち上げたまま PC 上の Unity だけを再起動してみるとよい。