【Unity】クリックした場所にプレイヤーを移動させる
TouchScreen.js
var playerPrefab : GameObject; function Update () { if(Input.GetButtonDown("Fire1")){ var screenPoint = Input.mousePosition; screenPoint.z = 10; var worldPoint = camera.ScreenToWorldPoint(screenPoint); playerPrefab.SendMessage("TouchPosition",worldPoint); } }
PlayerController.js
「PlayerController.js」 var walkSpeed : float = 3.0; var gravity : float = 20.0; private var destination : Vector3; private var velocity : Vector3 = Vector3(0,0,0); private var move : boolean = false; function Update () { var controller : CharacterController = GetComponent(CharacterController); if(controller.isGrounded && move){ if((destination - transform.position).magnitude >0.1){ }else{ move = false; velocity = Vector3(0,0,0); } } velocity.y -= gravity * Time.deltaTime; controller.Move(velocity * Time.deltaTime); } function TouchPosition(WorldPoint : Vector3){ move = true; destination = WorldPoint; var direction :Vector3 = (destination - transform.position).normalized; velocity = direction * walkSpeed; transform.LookAt(transform.position + velocity); }
TouchScreen.jsをMainCameraにPlayerController.jsをプレイヤーキャラクターに適用してます。
まず、TouchScreen.jsのUpdateメソッド内でボタンがクリックされたか確認し、クリックされていればその座標を3Dの座標系へ変換した後PlayerController.jsのTouchPosition関数へ送ります。
TouchPositionメソッド内ではプレイヤーを移動させるかを判定するmove変数をtrueにし、移動速度を設定し移動方向へプレイヤーを向かせます。
Updateメソッド内で目標地点まで移動させます。