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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity raycast返回对象的中心,而不是点相关的知识,希望对你有一定的参考价值。

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

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

答案

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

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

另一答案

我怀疑你的问题在于:

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

ScreenPointToWorldPoint()可能已经是光线投射,以找到你的鼠标所在的位置(Unity确定该方法返回的向量的确切方式未被记录),再次从那一点进行光线投射......相机朝向的方向可能与你有关。

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

以上是关于Unity raycast返回对象的中心,而不是点的主要内容,如果未能解决你的问题,请参考以下文章

Unity3D - 使用 Raycasting 检测游戏对象。自上而下的视图

如何在 Unity 中更改对象的轴心点

Unity - 在 RayCast 命中时的游戏对象定位没有剪辑

Unity:Raycast 未检测到父对象的标签

通过指向对象来获取对象名称 Unity Raycast

Unity Physics.Raycast 似乎无法正确检测到它击中的对象