unity用脚本控制角色移动,碰到墙壁后转向
时间: 2024-09-18 19:01:23 浏览: 74
在Unity中,你可以通过编写C#脚本来控制游戏角色的移动。通常,这涉及到创建一个角色控制器脚本,例如`CharacterController`或者自定义脚本,使用`Transform`组件来改变角色的位置和方向。
首先,定义角色的移动速度变量(如`float speed`),然后有一个向量表示当前的移动方向(比如`Vector3 direction`)。游戏循环里,你可以这样做:
```csharp
void Update()
{
float moveInput = Input.GetAxis("Horizontal"); // 获取水平移动输入
direction.x = moveInput;
// 检查是否碰到墙壁
if (Physics.Raycast(transform.position, direction, out RaycastHit hit))
{
// 如果碰到墙壁,计算新的朝向,使其面对墙壁
direction = hit.normal; // 新的方向变为碰撞法线
// 可能还需要调整一些角度,如90度,防止角色过于突然地转向
direction = Vector3.RotateTowards(direction, Vector3.up, turnSpeed * Time.deltaTime);
// 控制移动距离,如果角色不想立即停止,可以设置一个小的值
float distance = speed * Time.deltaTime;
transform.Translate(direction * distance);
}
else
{
transform.Translate(direction * speed * Time.deltaTime); // 正常移动
}
}
```
在这个例子中,`Physics.Raycast`用于检测前方是否有障碍物,`RaycastHit`会包含碰撞的信息。当角色碰到墙壁时,我们将`direction`更新为碰撞法线,并根据需要微调方向。`turnSpeed`是一个旋转速度变量,可以控制角色转向的平滑程度。
阅读全文