帮我写一段unity代码,在3d场景内控制角色移动,并且在按下上下左右时,角色会先旋转至移动的目标方向,然后再开始移动
时间: 2024-02-20 13:56:48 浏览: 63
好的,下面是一份简单的代码实现:
```csharp
using UnityEngine;
public class PlayerController : MonoBehaviour
{
// 移动速度
public float speed = 5f;
// 旋转速度
public float rotateSpeed = 5f;
// 当前移动方向
private Vector3 moveDirection = Vector3.zero;
// 当前旋转角度
private Quaternion targetRotation;
void Update()
{
// 获取输入的方向
float horizontal = Input.GetAxisRaw("Horizontal");
float vertical = Input.GetAxisRaw("Vertical");
// 如果有输入则进行旋转和移动
if (horizontal != 0f || vertical != 0f)
{
// 计算目标方向
Vector3 targetDirection = new Vector3(horizontal, 0f, vertical);
targetRotation = Quaternion.LookRotation(targetDirection);
// 移动
moveDirection = targetDirection.normalized * speed * Time.deltaTime;
transform.Translate(moveDirection, Space.World);
}
// 旋转
transform.rotation = Quaternion.Lerp(transform.rotation, targetRotation, rotateSpeed * Time.deltaTime);
}
}
```
在该脚本中,我们首先定义了一个 `speed` 和一个 `rotateSpeed`,用于控制角色的移动速度和旋转速度。然后在 `Update` 函数中,我们获取输入的方向,并根据输入的方向计算出目标方向和旋转角度。当有输入时,我们将角色移动到目标方向,并且将角色旋转到目标方向。在 `transform.rotation` 中使用了 `Lerp` 函数来实现平滑的旋转效果。
需要注意的是,该代码只实现了基本的角色移动和旋转,如果需要更多的角色控制功能,可以在该脚本中进行扩展。
阅读全文