Raycast 是否仅在脚本在主相机上时才有效?

Does Raycast only work when the script is on main camera?

我想让主摄像头的光线投射像鼠标(或触摸)一样工作,当点击并击中一个物体时它会触发一些东西。我在对象的 update() 中有如下脚本:

Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);   
RaycastHit hit;
if (Physics.Raycast(ray, out hit)) {
  // Debug output to confirm it is hit. 
}

这是我从许多教程中看到的非常标准的脚本。但是,它没有命中调试行。

唯一不同的是它是对象的更新,而不是主相机的脚本update()。有区别吗?

更新脚本中的代码应该属于原来的游戏对象(或相机)射出的光线吗?或者它可以在任何游戏对象的附加脚本的 update() 中吗?

我拥有的对象没有任何对撞机,我是否需要在对象上设置一个才能让光线与它发生碰撞?

使用 Physics.Raycast,您可以从 space 中的任何一点向任何方向发射光线。只要您能够以某种方式计算起点和方向,脚本附加到哪个 gameObject 都没有关系。

问题是您的射线目标上没有对撞机。光线投射仅计算光线击中的碰撞器。

所以添加对撞机将解决您的问题。请记住,如果您使用 Physics2D 选项卡中的 2D 碰撞器,则需要使用 Physics2d.Raycast。如果您使用物理选项卡中的 3D 碰撞器,则需要使用 Physics.Raycast.