我有两个对象:
对象A(SteamVR摄像机):
对象B(地球模型):
我确保对撞机范围正确,但是以某种方式不会触发OnCollisionEnter方法。
我用于OnCollisionEnter的代码如下:
private void OnCollisionEnter(Collision collision)
{
Debug.Log("Collision entered");
}
有人可以给我一些见解/建议吗?
谢谢。
答案 0 :(得分:1)
要了解碰撞的工作原理,首先需要确定正在碰撞的对象,因为很少有对象会触发OnCollisionEnter。
根据您的描述,我们可以识别出两种类型的对象。
对象A :运动刚体触发对撞机
对象B :静态触发器对撞机
如果您选中Collision Matrix,则与具有触发器的任何对象(对象A和对象B)都不会发生碰撞,因此OnCollisionEnter将不会触发。
我再说一遍:触发器不会与其他任何物体发生碰撞。
如果您想从与触发对象(或其中的两个触发对象)的碰撞中获取事件,则可以使用OnTriggerEnter。
请考虑在这种情况下,方法的参数将是Collider other
,它是Collider而不是Collision,但是在您的情况下,我认为您不需要冲突完全没有。
private void OnTriggerEnter(Collider other)
=> Debug.Log("entered");
碰撞取决于刚体和对撞机设置对象。我可以根据您的情况显示一些示例。
要考虑的第一个元素是,静态对撞机不是通常设置为“静态”的对象(这在下面的注释中引起混淆)。
静态收藏家
这是一个具有对撞机但没有刚体的GameObject。静态的 对撞机用于始终保持不变的关卡几何 的地方,永远不要动弹。传入的刚体物体将发生碰撞 使用静态对撞机,但不会移动它。
还请考虑您要使用触发器(将STATIC COLLDER转换为STATIC TRIGGER COLLIDER)。
基本上,触发器背后的想法是: “当您想捕获事件但不希望游戏对象与物理力互动时使用触发器。”
脚本系统可以检测何时发生冲突并启动 使用OnCollisionEnter函数执行操作。但是,您也可以使用 物理引擎仅用于检测一个对撞机何时进入太空 不会产生碰撞。 配置为 触发器(使用“触发器”属性)不像实体一样 反对,并且只会允许其他对撞机通过。当一个 对撞机进入其空间,触发器将调用OnTriggerEnter 触发对象脚本的功能