首页 > 解决方案 > 防止玩家轮换在 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;
    }

标签: c#unity3d

解决方案


做一个 courotine 检查一个键是否被释放,然后等待,比如说 0.5 秒,另一个键被释放。如果释放另一个键,则保持该方向。希望它有效。祝你好运。


推荐阅读