0

我想创建一个点击移动游戏,并且有一个导航网格代理,其代码几乎可以工作,除了我的角色总是试图移动到同一个位置,无论我点击哪里或相机的位置。这是我的功能,

private Vector3 GetClickPosition()
{
    Vector2 screenPosition = Input.mousePosition;
    Vector3 mouseWorldPosition = cam.ScreenToWorldPoint(screenPosition);

    RaycastHit hitPosition;

    Physics.Raycast(mouseWorldPosition, cam.transform.forward, out 
    hitPosition, 100, Floor);

    return hitPosition.point;
}

用于连接到播放器的点击命令。一切都被引用了,我确定问题出在这段代码上......在此先感谢。

我的代码来源:https ://www.youtube.com/watch?v=LoKNYlWWeSM

4

2 回答 2

0

您引用的源代码对我有用,所以您的版本中可能有一些问题。

尝试将适当的图层(在 Physics.Raycast 方法中称为Floor的图层)分配到您要导航的地形上。如果您重命名了源代码中提到的groundLayer但没有在编辑器中创建和分配相应的图层,您可能会错过这一点。确保还在导航 -> 对象选项卡中将您使用的地板设置为静态。

于 2018-01-01T22:51:33.253 回答
0

我怀疑你的问题出在这里:

Vector3 mouseWorldPosition = cam.ScreenToWorldPoint(screenPosition);
Physics.Raycast(mouseWorldPosition, cam.transform.forward, out hitPosition, 100, Floor);

ScreenPointToWorldPoint()可能已经在进行光线投射以查找您的鼠标所在的世界(Unity 如何确定此方法返回的矢量的确切方式未记录),从该点再次进行光线投射……相机所面对的方向可能与您有关。

相反,请尝试cam.ScreenPointToRay()在您的光线投射中使用作为参数。

于 2018-01-02T07:12:08.920 回答