1. 程式人生 > >Unity3D:實現人物轉向與移動

Unity3D:實現人物轉向與移動

rotate stat down spa inpu upd 朝向 的人 ont

在網上有非常多通過射線方式實現的人物行走控制腳本,可是假設僅僅是想通過鍵盤按鍵來控制的話。比方進行第三人稱視角控制,事實上僅僅須要進行簡單的角度變換就可以。思路例如以下:

1、依照順時針方向設定前、右、後、左分別為0,1,2,3。

2、設定狀態初值0,即朝向前方。

3、通過當前方向值減去前一次方向值,乘以90°即為轉向角,然後進行旋轉變換就可以。

using UnityEngine;
using System.Collections;
using System.Linq;
public class move: MonoBehaviour
{
	private int State;//角色狀態
	private int oldState=0;//前一次角色的狀態
	private int UP = 0;//角色狀態向前
	private int RIGHT =1;//角色狀態向右
	private int DOWN = 2;//角色狀態向後
	private int LEFT = 3;//角色狀態向左
	
	public float speed=8;
	
	void Start()
	{
	}
	void Update()
	{
		if (Input.GetKey("w"))
		{
			setState(UP);
		}
		else if (Input.GetKey("s"))
		{
			setState(DOWN);
		}
		
		if (Input.GetKey("a"))
		{
			setState(LEFT);
		}
		else if (Input.GetKey("d"))
		{
			setState(RIGHT);
		}
		
	}
	
	
	void setState(int currState)
	{
		Vector3 transformValue = new Vector3();//定義平移向量
		int rotateValue = (currState - State) * 90;
		transform.animation.Play("walk");//播放角色行走動畫
		switch (currState)
		{
		case 0://角色狀態向前時,角色不斷向前緩慢移動
			transformValue = Vector3.forward * Time.deltaTime * speed;
			break;
		case 1://角色狀態向右時。角色不斷向右緩慢移動
			transformValue = Vector3.right * Time.deltaTime * speed;
			break;
		case 2://角色狀態向後時。角色不斷向後緩慢移動
			transformValue = Vector3.back * Time.deltaTime * speed;
			break;
		case 3://角色狀態向左時,角色不斷向左緩慢移動
			transformValue = Vector3.left * Time.deltaTime * speed;
			break;
		}
		transform.Rotate(Vector3.up, rotateValue);//旋轉角色
		transform.Translate(transformValue, Space.World);//平移角色
		oldState = State;//賦值,方便下一次計算
		State = currState;//賦值,方便下一次計算
	}
	
	
}





Unity3D:實現人物轉向與移動