[Unity]Touchクラスを使ってGameObject.transform.rotationをグリグリする

Unity でTouchクラスを使ってキューブを回す処理の最小構成を解説。

やること

  • 画面にキューブを出す
  • キューブはタッチで回せる

C#版のサンプルを載せた記事はこちら

シーン構成

  • 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
  • 効果:ローカル座標系での処理で、デフォルト設定。

今回、触ってる感が欲しいのでワールド座標系を明示。

ビルドするとこんな感じ。
Unity iOS touch  IMG_1962

コード補足

一応、Startで(GameObject)CubeにモデルのCubeを割り当ててるけど、Inspectorでも割り当てられる。
これでビルドするとタッチでキューブをぐりぐり回せる。
speedのパラメータを調整すると手触り感が変わるので適当に変更を。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です