unity中控制主角的移動和旋轉
阿新 • • 發佈:2019-02-11
void
Update () {
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
rigBody.MovePosition(this.transform.position+new Vector3(h,0,v)*Speed*Time.deltaTime);
if(Input.GetAxis("Horizontal")!=0|| Input.GetAxis("Vertical")!=0)
{
Rotating(h,v);
}
}
void Rotating(float horizontal, float vertical)
{
// 建立角色目標方向的向量
Vector3 targetDirection = new Vector3(horizontal, 0f, vertical);
// 建立目標旋轉值 並假設Y軸正方向為"上"方向
Quaternion targetRotation = Quaternion.LookRotation(targetDirection, Vector3.up); //函式引數解釋: LookRotation(目標方向為"前方向", 定義宣告"上方向")
// 建立新旋轉值 並根據轉向速度平滑轉至目標旋轉值
//函式引數解釋: Lerp(角色剛體當前旋轉值, 目標旋轉值, 根據旋轉速度平滑轉向)
Quaternion newRotation = Quaternion.Lerp(rigBody.rotation, targetRotation, Speed * Time.deltaTime);
// 更新剛體旋轉值為 新旋轉值
rigBody.MoveRotation(newRotation);
}
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
rigBody.MovePosition(this.transform.position+new Vector3(h,0,v)*Speed*Time.deltaTime);
if(Input.GetAxis("Horizontal")!=0|| Input.GetAxis("Vertical")!=0)
{
Rotating(h,v);
}
}
void Rotating(float horizontal, float vertical)
{
// 建立角色目標方向的向量
Vector3 targetDirection = new Vector3(horizontal, 0f, vertical);
// 建立目標旋轉值 並假設Y軸正方向為"上"方向
Quaternion targetRotation = Quaternion.LookRotation(targetDirection, Vector3.up); //函式引數解釋: LookRotation(目標方向為"前方向", 定義宣告"上方向")
// 建立新旋轉值 並根據轉向速度平滑轉至目標旋轉值
//函式引數解釋: Lerp(角色剛體當前旋轉值, 目標旋轉值, 根據旋轉速度平滑轉向)
Quaternion newRotation = Quaternion.Lerp(rigBody.rotation, targetRotation, Speed * Time.deltaTime);
// 更新剛體旋轉值為 新旋轉值
rigBody.MoveRotation(newRotation);
}