unity用脚本控制角色前后左右移动,碰到墙壁后随机转向
时间: 2024-09-17 20:06:46 浏览: 37
unity通用角色控制脚本【走.跑.跳.下蹲】
3星 · 编辑精心推荐
在Unity中,你可以使用C#脚本来控制游戏对象(如角色)的移动。首先,你需要创建一个`CharacterController`组件,这个组件可以方便地处理角色的碰撞检测。以下是基本步骤:
1. **设置基础移动**:
创建一个Update()函数,在其中获取玩家输入(例如通过Input.GetAxis("Horizontal") 和 Input.GetAxis("Vertical") 获取左右和上下移动的方向),然后更新角色的速度并移动:
```csharp
float moveSpeed = 5f; // 角色移动速度
Vector3 direction;
if (Input.GetKey(KeyCode.W)) direction = Vector3.forward;
else if (Input.GetKey(KeyCode.S)) direction = -Vector3.forward;
if (Input.GetKey(KeyCode.A)) direction = Vector3.left;
else if (Input.GetKey(KeyCode.D)) direction = Vector3.right;
transform.position += direction * Time.deltaTime * moveSpeed;
```
2. **碰撞检测和反弹**:
使用`CharacterController.Move()`方法,该方法会考虑角色的碰撞边界。当角色碰到墙壁时,计算新的方向以反弹:
```csharp
// 检测前方是否有障碍
bool isGrounded = Physics.Raycast(transform.position, Vector3.down, 0.1f, controller.collisionMask);
direction.y = isGrounded ? 0 : 1f; // 如果不在地面,则向上跳
Vector3 newPosition = transform.position + direction * moveSpeed * Time.deltaTime;
newPosition = controller.Move(newPosition);
// 如果有碰撞,调整新位置并随机转向
if (!controller.isGrounded)
{
newPosition.y = controller.height; // 回到地面高度
float randomAngle = Random.Range(-45f, 45f); // 随机角度范围
Quaternion rotation = Quaternion.Euler(0, randomAngle, 0);
transform.position = newPosition;
transform.rotation = rotation;
}
```
3. **完整示例**:
将以上代码片段组合成完整的脚本,并将其附加到你的角色游戏对象上。
阅读全文