unity中用Csharp语言生成一个第一人称的代码,可以实现移动,跳跃,蹲下,跑动
时间: 2024-06-12 11:08:16 浏览: 221
unity 第一人称移动脚本
以下是一个简单的第一人称控制器示例,可以实现移动,跳跃,蹲下,跑动:
```csharp
using UnityEngine;
public class FirstPersonController : MonoBehaviour
{
// 移动速度
public float moveSpeed = 5f;
// 跑动速度
public float runSpeed = 10f;
// 跳跃高度
public float jumpHeight = 2f;
// 是否蹲下
public bool isCrouching = false;
// 是否在地面上
private bool isGrounded = true;
// 重力系数
private float gravity = -9.81f;
// 当前速度
private Vector3 velocity;
// 获取角色控制器
private CharacterController controller;
private void Start()
{
// 获取角色控制器组件
controller = GetComponent<CharacterController>();
}
private void Update()
{
// 获取输入
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
bool isRunning = Input.GetKey(KeyCode.LeftShift);
// 计算移动方向
Vector3 moveDirection = transform.forward * vertical + transform.right * horizontal;
moveDirection.y = 0f;
moveDirection.Normalize();
// 计算移动速度
float speed = isRunning ? runSpeed : moveSpeed;
// 跳跃
if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
{
velocity.y = Mathf.Sqrt(jumpHeight * -2f * gravity);
isGrounded = false;
}
// 蹲下
if (Input.GetKeyDown(KeyCode.C))
{
isCrouching = !isCrouching;
controller.height = isCrouching ? 1f : 2f;
}
// 计算重力
velocity.y += gravity * Time.deltaTime;
// 计算移动速度和重力的合成速度
Vector3 moveVelocity = moveDirection * speed + velocity;
// 移动角色
controller.Move(moveVelocity * Time.deltaTime);
// 判断是否在地面上
isGrounded = controller.isGrounded;
if (isGrounded && velocity.y < 0f)
{
velocity.y = 0f;
}
}
}
```
在该代码中,我们首先定义了一些变量,包括移动速度、跑动速度、跳跃高度、是否蹲下、是否在地面上、重力系数和当前速度等。然后我们获取角色控制器组件,并在Update函数中处理输入、计算移动方向和速度、跳跃、蹲下、计算重力、计算合成速度并移动角色等操作,最后判断是否在地面上并更新isGrounded变量。该代码可以作为第一人称控制器的基础,可以根据需要进行扩展和修改。
阅读全文