如何在鼠标一键和鼠标按住之间切换
本文关键字:鼠标 之间 一键 | 更新日期: 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
块都被执行。你的动画器状态设置为Walk
,然后立即设置为Idle
,你的角色不移动。 - 鼠标按钮在几帧前被按下,并且仍然被按下。只执行第二个
if
块。你的动画状态设置为Idle
,角色不移动。
if
块。如果你决定使用这种特殊的控制方案,你应该考虑实现某种延迟——也许鼠标按钮按下少于0.2秒应该算作点击,按下超过0.2秒应该算作按住。这样你的谓词就不会重叠。