请帮我写一个unity中的角色控制器,要有重力及IK
由于角色控制器的具体实现与项目需求有关,下面提供一个基础的角色控制器代码,供参考:
using UnityEngine;
public class PlayerController : MonoBehaviour
{
// 基础移动速度
public float moveSpeed = 5f;
// 跳跃速度
public float jumpSpeed = 10f;
// 重力加速度
public float gravity = 20f;
// 地面检测距离
public float groundDistance = 0.2f;
// 地面检测层
public LayerMask groundMask;
// 角色控制器
private CharacterController controller;
// 移动方向
private Vector3 moveDirection = Vector3.zero;
// 是否在地面上
private bool isGrounded = false;
// Start 方法在脚本挂载时执行
private void Start()
{
controller = GetComponent<CharacterController>();
}
// Update 方法每帧执行一次
private void Update()
{
// 检测是否在地面上
isGrounded = Physics.CheckSphere(transform.position, groundDistance, groundMask);
// 获取输入
float horizontal = Input.GetAxis("Horizontal");
float vertical = Input.GetAxis("Vertical");
// 计算移动方向
Vector3 forward = transform.forward;
Vector3 right = transform.right;
forward.y = 0;
right.y = 0;
forward.Normalize();
right.Normalize();
moveDirection = forward * vertical + right * horizontal;
// 如果在地面上,可以跳跃
if (isGrounded && Input.GetKeyDown(KeyCode.Space))
{
moveDirection.y = jumpSpeed;
}
// 应用重力
moveDirection.y -= gravity * Time.deltaTime;
// 移动角色控制器
controller.Move(moveDirection * moveSpeed * Time.deltaTime);
}
// OnDrawGizmosSelected 方法在场景中选中脚本时执行
private void OnDrawGizmosSelected()
{
Gizmos.color = Color.red;
Gizmos.DrawWireSphere(transform.position, groundDistance);
}
}
上述代码实现了基础的角色移动和跳跃功能,并应用了重力。如果需要实现 IK 功能,可以参考 Unity 的官方文档和示例项目。需要注意的是,IK 功能需要在角色模型上添加相应的骨骼和动画,以及设置 IK 控制器。
原文地址: https://www.cveoy.top/t/topic/yAy 著作权归作者所有。请勿转载和采集!