Kuwapp's Blog

Android と Flutter やってます

【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メソッド内で目標地点まで移動させます。