当我设置 transform.position = hit.point 时,为什么我的 GameObject 沿着我投射的光线移动?统一3D

Why is my GameObject traveling along the ray I am casting when I set transform.position = hit.point? Unity 3D

我试图让一个对象沿着我的游戏表面跟随我的鼠标。游戏中有地板和其他物体。该物体应始终在地板上或其他物体之一上。我想要的是将对象的位置更改为鼠标移动的位置。我通过从鼠标投射光线来做到这一点。当光线撞击碰撞体时,物体的位置应该改变到它撞击的地方。

当我点击播放时,对象沿着正在投射的光线移动,从碰撞 (hit.point) 开始并向相机移动。一旦它到达相机,它就会从 hit.point 开始并重复。当我移动鼠标时,对象的位置会更改为新的 hit.point 并向相机移动。当我按原样移动鼠标时,hit.point 的值在开发日志中发生变化,而当鼠标保持静止时,即使对象仍在向相机移动,该值也不会发生变化。为什么会这样?似乎是因为 transform.position 的值设置为 hit.point 并且代码中的其他地方从未更改过该位置应始终为 hit.point.

这是附加到正在移动的对象的代码:

public class FollowCursor : MonoBehaviour
{
    void Update()
    {
        RaycastHit hit;
        Ray ray;
        int layerMask = 1 << 8;
        layerMask = ~layerMask;
        ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        if (Physics.Raycast(ray, out hit))
            transform.position = hit.point;
        Debug.Log(hit.point);
    }
}

这是我的层次结构和场景的 screenshot。白色球体是正在移动的物体。我提到的地板是水箱底部的沙子。我希望该对象位于沙子或其他对象之一上。第 8 层是坦克本身,它被排除在光线投射之外,因为我不希望物体在坦克上。

因为你的游戏对象也有碰撞体

射线击中地面。对象去那里

下一帧,光线击中物体。物体移动到那里(光线撞击表面,枢轴在中心,因此它向相机移动的量等于对撞机的半径,根据您的屏幕截图看起来像 0.5 个单位)。

重复。

解决此问题的最佳方法是将地面放在自己的图层上,并使用 LayerMask 仅针对您希望光线击中的图层 进行光线投射