Unity raycast返回对象的中心,而不是点

时间:2018-01-01 21:58:36

标签: unity3d onclick real-time-strategy

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

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

2 个答案:

答案 0 :(得分:0)

你引用的来源对我有用,所以也许你的版本中有些东西略有偏差。

尝试将您在Physics.Raycast方法中引用为 Floor 的相应图层分配到要导航的地形上。如果您重命名了源中提到的 groundLayer 但未在编辑器中创建并分配相应的图层,则可能错过了此操作。务必在导航中将您使用的地板设置为静态 - >对象选项卡。

答案 1 :(得分:0)

我怀疑你的问题在于:

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

ScreenPointToWorldPoint()可能进行光线投射以找到鼠标所在的位置(Unity确定此方法返回的向量的具体方式未记录),再次使用光线投射 从那时起...相机朝向的方向可能与你有关。

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