Unity中3D人物转向加移动代码
时间: 2023-06-08 22:06:30 浏览: 170
好的,以下是Unity中3D人物转向加移动的代码示例:
```csharp
using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float moveSpeed = 5.0f; // 每秒移动速度
public float rotSpeed = 120.0f; // 每秒旋转速度
private Animator anim;
private Rigidbody rb;
private Vector3 moveInput;
private float verticalVel;
private void Start()
{
anim = GetComponent<Animator>();
rb = GetComponent<Rigidbody>();
}
private void Update()
{
// 获取玩家输入
float h = Input.GetAxisRaw("Horizontal");
float v = Input.GetAxisRaw("Vertical");
// 计算移动向量
moveInput = new Vector3(h, 0.0f, v).normalized;
// 更新动画
anim.SetFloat("Speed", moveInput.magnitude);
// 计算玩家的前方向量
Vector3 forward = Vector3.ProjectOnPlane(Camera.main.transform.forward, Vector3.up).normalized;
// 计算旋转角度(和世界坐标系X轴的夹角)
float angle = Vector3.SignedAngle(forward, moveInput, Vector3.up);
// 垂直速度(跳跃)
verticalVel = rb.velocity.y;
// 如果有移动输入
if (moveInput.magnitude > 0.0f)
{
// 旋转玩家
transform.Rotate(Vector3.up, angle * rotSpeed * Time.deltaTime);
// 移动玩家
Vector3 moveVel = transform.forward * moveSpeed;
rb.velocity = new Vector3(moveVel.x, verticalVel, moveVel.z);
}
else
{
// 玩家停止移动
rb.velocity = new Vector3(0.0f, verticalVel, 0.0f);
}
}
}
```
这个示例代码中,我们先定义了玩家的移动速度和旋转速度,然后在Update函数中获取玩家的输入,计算出移动向量和旋转角度,最后通过Rigidbody组件移动和旋转玩家。注意,我们使用了Camera.main.transform.forward计算玩家的前方向量,这样即使相机旋转了,玩家的前方向量也能正确地跟随相机方向变化。
阅读全文