如何在单击鼠标和鼠标按住之间切换?

时间:2016-10-28 04:09:28

标签: c# unity3d

当点击一下我想让角色走到鼠标位置。 但如果它按住鼠标按钮我想让它旋转角色。 但由于某种原因,它一直处于空闲状态。因此,当我点击一下时,角色会以小跳跃跳跃而不会走到鼠标位置。

如果我将删除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
            }
        }
     }

1 个答案:

答案 0 :(得分:1)

如果按下鼠标按钮,

Input.GetMouseButton(int)将返回true 始终Input.GetMouseButtonDown(int)在单击鼠标按钮的第一帧上返回true only

因此,鉴于您的代码,可能性是:

  • 没有按下任何按钮。没有输入if块。
  • 单击鼠标按钮时,这是精确框架。两个if块都被执行。您的动画状态设置为Walk,然后立即设置为Idle,您的角色无法移动。
  • 鼠标按钮在几帧前被按下并仍然被按下。仅执行第二个if块。您的动画状态设置为Idle,角色无法移动。

如果您决定使用这种特定的控制方案,您应该考虑实施某种延迟 - 也许应该将短于0.2秒的鼠标按键按下点击并按下超过0.2秒算作 hold 。这样你的谓词就不会重叠。