Unity でTouchクラスを使ってキューブを回す処理の最小構成を解説。
やること
- 画面にキューブを出す
- キューブはタッチで回せる
シーン構成
- CubeRot
- Cube
- Particle System
- Plane
- Directional light
- GameMaster
- Main Camera
GameMasterという空のGameObjectにゲームをコントロールさせる。
ライト少々。
サンプルソース
file:Controller.js
ソース概要
タッチイベントのMoveフェーズ中におけるタッチの移動量を取得し、Cubeに反映させる。
var Cube : GameObject; var speed:float = 1.0; function Start () { if( !Cube ) Cube = GameObject.Find("Cube"); } function Update () { var fingerCount : int = 0; for (var touch : Touch in Input.touches) { if (touch.phase != TouchPhase.Ended && touch.phase != TouchPhase.Canceled) fingerCount++; } if (Input.touchCount > 0) { switch ( Input.GetTouch(0).phase ) { case TouchPhase.Began: print("Began"); break; case TouchPhase.Moved: print("Move"); // Get movement of the finger since last frame var touchDeltaPosition:Vector2 = Input.GetTouch(0).deltaPosition; //Rotate cube Cube.transform.Rotate ( touchDeltaPosition.y * speed * 10, -touchDeltaPosition.x * speed * 10, 0, Space.World); case TouchPhase.Ended: print("End"); break; } } }
解説
var touchDeltaPosition:Vector2 = Input.GetTouch(0).deltaPosition;
ここではVector2構造体のオブジェクトを生成し、タッチによる入力の最初の指(0)の移動をX軸とY軸に分解して保持させている。
Cube.transform.Rotate ( touchDeltaPosition.y * speed * 10, -touchDeltaPosition.x * speed * 10, 0, Space.World);
キューブのtransformを回転をさせるメソッドを実行する。
先に取得した画面のY軸上の移動、指の上下に対する移動は、回転軸Xを中心とした回転をさせる。
同様に画面のX軸上の指の移動は、回転軸Yを中心として回転させる。
右に指を動かしたら半時計回りなので負の値にしておく。
Z軸上の回転は行わないのでゼロ。
最後の一行は要注意。
このSpaceは省略可能で、デフォルトではSpace.Selfとなるため、回転すると軸まで回転してわけわからなくなる。
SpaceクラスはWorldとSelfのValueがある。
- World
- 記述:Space.World
- 効果:ワールド座標系での処理を明示する。
- Self
- 記述:Space.Self
- 効果:ローカル座標系での処理で、デフォルト設定。
今回、触ってる感が欲しいのでワールド座標系を明示。
ビルドするとこんな感じ。
コード補足
一応、Startで(GameObject)CubeにモデルのCubeを割り当ててるけど、Inspectorでも割り当てられる。
これでビルドするとタッチでキューブをぐりぐり回せる。
speedのパラメータを調整すると手触り感が変わるので適当に変更を。