当我设置 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
仅针对您希望光线击中的图层 进行光线投射 。
我试图让一个对象沿着我的游戏表面跟随我的鼠标。游戏中有地板和其他物体。该物体应始终在地板上或其他物体之一上。我想要的是将对象的位置更改为鼠标移动的位置。我通过从鼠标投射光线来做到这一点。当光线撞击碰撞体时,物体的位置应该改变到它撞击的地方。
当我点击播放时,对象沿着正在投射的光线移动,从碰撞 (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
仅针对您希望光线击中的图层 进行光线投射 。