c# - 防止玩家轮换在 Unity 中最后一秒发生变化
问题描述
使用 C# 统一
在一个摄像机旋转被锁定的自上而下的游戏中,我制作了一个角色控制器,它被限制为 8 轴并且只能以 45 度的增量旋转。认为链接觉醒。除了沿对角线方向移动(使用 WASD)外,一切正常。
例如,当我松开 W&D 时,无论我最后松开哪个键,即使只有几分之一秒,玩家最终都会面向那个方向,而不是预期的向上和正确的对角线方向。
我希望修改以下代码以添加某种缓冲区,以便在我放开 2 个键时播放器保持面向预期的方向。我想让它尽可能简单。
public float defaultSpeed = 6f;
CharacterController controller;
private Vector3 playerMovement;
Vector2 input;
float angle;
Quaternion targetRotation;
Transform cam;
// Start is called before the first frame update
void Start()
{
controller = GetComponent<CharacterController>();
cam = Camera.main.transform;
}
// Update is called once per frame
void Update()
{
Movement();
}
public void Movement()
{
//Get inputs
input.x = Input.GetAxisRaw("Horizontal");
input.y = Input.GetAxisRaw("Vertical");
//Only update if keys are pressed
if (Mathf.Abs(input.x) < deadZone && Mathf.Abs(input.y) < deadZone) return;
//Get camera angle: input to radians - radians to degrees - degrees plus the camera angle - limit angle to 45 degree increments
angle = Mathf.Atan2(input.x, input.y);
angle = Mathf.Rad2Deg * angle;
angle += cam.eulerAngles.y;
angle = Mathf.Round(angle / 45) * 45;
//Rotate Character
targetRotation = Quaternion.Euler(0, angle, 0 );
transform.rotation = targetRotation;
//Move Character
transform.position += transform.forward * defaultSpeed * Time.deltaTime;
}
解决方案
做一个 courotine 检查一个键是否被释放,然后等待,比如说 0.5 秒,另一个键被释放。如果释放另一个键,则保持该方向。希望它有效。祝你好运。
推荐阅读
- firebase - Cloud Firestore 中具有相同 documentId 的两个文档
- javascript - 优化 bundle.js 文件大小
- javascript - 以下变量分配如何工作?
- excel - EXCEL VBA 计数时间
- node.js - 未涵盖不正确的声明/如果在开玩笑的覆盖率报告中未采用路径
- c - 在 /dev/mem 上写入失败,地址错误
- maven - 如何避免在 Maven 中使用具有不同配置文件的已定义镜像?
- php - 如何从基于多维数组的查询中创建多个表
- spring - Spring websockets + Amazon MQ 限制
- javascript - 有什么方法可以替换 vaadin 14 的 window.open 以重定向到外部 url?