Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 防止玩家旋转改变团结中的最后一秒_C#_Unity3d - Fatal编程技术网

C# 防止玩家旋转改变团结中的最后一秒

C# 防止玩家旋转改变团结中的最后一秒,c#,unity3d,C#,Unity3d,使用C实现统一# 在一个自上而下的游戏中,相机旋转被锁定,我制作了一个角色控制器,它被限制为8轴,并且只能以45度的增量旋转。想一想觉醒。除了沿对角线方向移动(使用WASD)外,其他一切都可以工作 例如,当我放开W&D键时,无论最后放开哪个键,即使只差几分之一秒,玩家最终都会朝着那个方向,而不是预期的向上和向右对角线方向 我希望修改下面的代码来添加一些缓冲区,这样当我放开2个键时,播放器仍然面向预期的方向。我想让它尽可能简单 public float defaultSpeed =

使用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;
    }
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秒,等待另一把钥匙被释放。如果释放了另一个键,则保持该方向。希望它能起作用。祝你好运