如何在鼠标一键和鼠标按住之间切换

本文关键字:鼠标 之间 一键 | 更新日期: 2023-09-27 18:15:24

当它是一个点击我想要的角色走到鼠标的位置。但如果它按住鼠标按钮,我想让它旋转角色。但由于某些原因,它一直处于Idle状态。所以当我点击一次时,角色会跳得很小,而不是走到鼠标的位置。

如果我将删除If (Input.GetMouseButton(0))的整个部分,那么当点击鼠标时,它将很好地移动到鼠标位置,但一旦添加了这部分,他将不会移动。

void Update()
    {
        if (Input.GetKeyDown(KeyCode.Mouse0))
        {
            _animator.CrossFade("Walk", 0);
            Plane playerPlane = new Plane(Vector3.up, transform.position);
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            float hitdist = 0.0f;
            if (playerPlane.Raycast(ray, out hitdist))
            {
                Vector3 targetPoint = ray.GetPoint(hitdist);
                targetPosition = ray.GetPoint(hitdist);
                targetRotation = Quaternion.LookRotation(targetPoint - transform.position);
                destination = targetPosition;
            }
        }
        if (Input.GetMouseButton(0))
        {
            _animator.CrossFade("Idle", 0);
            RaycastHit hit;
            Ray ray1 = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray1, out hit) && hit.collider.name != "ThirdPersonController")
            {
                transform.LookAt(hit.point);
            }
            else
            {
                transform.LookAt(ray1.GetPoint(100));  //the number here is compltely arbitrary
            }
        }
     }

如何在鼠标一键和鼠标按住之间切换

Input.GetMouseButton(int)返回true 总是如果鼠标按钮被按下。Input.GetMouseButtonDown(int)只在单击鼠标按钮的第一帧返回true

给定你的代码,可能是:

  • 没有按钮被按下。
  • 未输入if块。
  • 这是点击鼠标按钮时的精确的帧。两个if块都被执行。你的动画器状态设置为Walk,然后立即设置为Idle,你的角色不移动。
  • 鼠标按钮在几帧前被按下,并且仍然被按下。只执行第二个if块。你的动画状态设置为Idle,角色不移动。

如果你决定使用这种特殊的控制方案,你应该考虑实现某种延迟——也许鼠标按钮按下少于0.2秒应该算作点击,按下超过0.2秒应该算作按住。这样你的谓词就不会重叠。