C# 防止玩家旋转改变团结中的最后一秒
使用C实现统一# 在一个自上而下的游戏中,相机旋转被锁定,我制作了一个角色控制器,它被限制为8轴,并且只能以45度的增量旋转。想一想觉醒。除了沿对角线方向移动(使用WASD)外,其他一切都可以工作 例如,当我放开W&D键时,无论最后放开哪个键,即使只差几分之一秒,玩家最终都会朝着那个方向,而不是预期的向上和向右对角线方向 我希望修改下面的代码来添加一些缓冲区,这样当我放开2个键时,播放器仍然面向预期的方向。我想让它尽可能简单C# 防止玩家旋转改变团结中的最后一秒,c#,unity3d,C#,Unity3d,使用C实现统一# 在一个自上而下的游戏中,相机旋转被锁定,我制作了一个角色控制器,它被限制为8轴,并且只能以45度的增量旋转。想一想觉醒。除了沿对角线方向移动(使用WASD)外,其他一切都可以工作 例如,当我放开W&D键时,无论最后放开哪个键,即使只差几分之一秒,玩家最终都会朝着那个方向,而不是预期的向上和向右对角线方向 我希望修改下面的代码来添加一些缓冲区,这样当我放开2个键时,播放器仍然面向预期的方向。我想让它尽可能简单 public float defaultSpeed =
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;
}
public float defaultSpeed=6f;
字符控制器;
私人Vector3 playerMovement;
矢量2输入;
浮动角;
四元数定向;
变换凸轮;
//在第一帧更新之前调用Start
void Start()
{
控制器=GetComponent();
cam=Camera.main.transform;
}
//每帧调用一次更新
无效更新()
{
运动();
}
公众空虚运动
{
//获取输入
input.x=input.GetAxisRaw(“水平”);
input.y=input.GetAxisRaw(“垂直”);
//仅在按键时更新
if(Mathf.Abs(input.x)
制作一个courotine,检查一把钥匙是否被释放,然后等待,比如说0.5秒,等待另一把钥匙被释放。如果释放了另一个键,则保持该方向。希望它能起作用。祝你好运