
在本文中,将探讨如何在Unity中点击鼠标时将角色移动到某个位置,这里仅通过代码在没有AI导航网格的情况下执行此过程。
首先,标记楼层Floor并将脚本附加到播放器,接着编写一段代码。
代码如下所示:
public class Player : MonoBehaviour
{
private Vector3 _pos;
private float distance;
// Update is called once per frame
void Update()
{
if (distance > 1)
{
vector3 direction = _pos - transform.position;
direction.Normalize();
transform.Translate(direction * 2 *Time.deltaTime);
}
if ( Mouse.current.leftButton.wasPressedThisFrame)
{
Ray rayorigin = Camera.main.ScreenPointToRay(Mouse.current.position.ReadValue());
RaycastHit hitInfo;
if (Physics.Raycast(rayorigin,out hitinfo))
{
if (hitInfo.collider.tag=="Floor")
{
_pos = hitInfo.point;
distance = Vector3.Distance( _pos,transform.position);
}
}
}
}
}
这里咋们需要两个变量,一个是存储要去的目的地,另一个是存储目标距离。
为了找出要到达的地方,因此需要方向,它被定义为从当前位置减去_pos(target destination)。
由于方向可能很远,需要将数字归一化为1,重要的是,当计算方向时,将它放在鼠标点击代码块之外,因为计算距离是经常性的。
事实上,如果不做这些,下图就是较为意外的结果,因为它只会在单击时被调用。

咋们确定了方向后,还需要计算距离,也就是说这个角色要走多远,因此可以通过从鼠标位置的投射光线来做到这一点。
在光线投射之后,可以将击中的位置存储在hitinfo变量中,让pos与hitinfo.point相同,距离可以用Vector3 distance得到两点的差值。
到这里就可以测试该项目的结果了。

…
以上是关于单击对象移动的全部内容,如果你有任何反馈,请随时在本页面下方留言。