第13回目は、[スワイプ処理]でオブジェクトを回転させる方法をブログで書いていきたいと思います。 最近Unityではタッチ処理について色々触っているのですが、前からどうしてもやってみたかったことをしました。
前回:【Unity NGUI】個別のオブジェクトにタッチ処理を実装する。 | albatrus.com
コード
下記のようなコードを書けば実装できます。 後はInspectorから、回転させるオブジェクトを指定して下さい。 [c] public GameObject obj; public float speed = 0.05f;
// Update is called once per frame
void Update () {
if(Input.touchCount > 0){
Touch touch = Input.GetTouch(0);
switch(touch.phase){
case TouchPhase.Began:Debug.Log("touch Panel start");break;
case TouchPhase.Moved:
//float xAngle = touch.deltaPosition.y*speed*10;
//float yAngle = -touch.deltaPosition.x *speed *10;
Vector2 newVec = new Vector2(touch.position.x,Screen.height - touch.position.y);
Vector2 tapPoint = Camera.main.ScreenToWorldPoint(newVec);
float zAngle = 0.0f;
float xMove = touch.deltaPosition.x * speed *10;
float yMove = touch.deltaPosition.y * speed *10;
if(transform.position.x > tapPoint.x){
if(transform.position.y > tapPoint.y){
zAngle = -yMove -xMove;
}else{
zAngle = -yMove +xMove;
}
}else{
if(transform.position.y > tapPoint.y){
zAngle = yMove -xMove;
}else{
zAngle = yMove +xMove;
}
}
obj.transform.Rotate(0.0f,0.0f,zAngle,Space.World);
break;
case TouchPhase.Ended: Debug.Log("touch Panel end"); break;
default: break;
}
}
}
[/c]
苦労した所
タッチ処理は空のGameObjectを作成し、そこにスクリプトを配置しました。 スワイプの方向がオブジェクトの位置に応じて変更しなくてはいけないのですが、この部分を調整するのが大変でした。 タッチの移動距離に応じて回転の角度を決めています。
このようにUnityだと簡単に複雑な処理が実装できます。