我对c#和团结非常陌生,我有一个问题。我无法从根本上理解OnCollisionEnter是如何工作的。
比如,如果我有一个地形和一个悬浮在上面的球体,它有刚体成分,我写到:-
void OnCollisionEnter(Collision other)
{
Debug.Log(other.gameObject.name);
}然后运行控制台屏幕上的代码,就可以得到"Sphere“而不是”the“。为什么球被传递到“其他”而不是地形?
其次,我相信OnCollisionEnter是MonoBehavior类的一部分,我们的类已经从MonoBehavior继承了它。
那么,为什么我们必须再次定义OnCollisionEnter()呢?
这些问题真让我头疼。如果有人能帮我,我将非常感激。
发布于 2019-06-11 18:09:22
为什么球被传递到“其他”而不是地形?
在other中传递的内容取决于您将该组件附加到.如果将它附加到地形上,那么在other中,您应该得到Sphere,反之亦然。你看,other这个名字其实有点道理,对吧?
那么,为什么我们必须再次定义
OnCollisionEnter()呢?
在MonoBehaviour中,您可以在诸如Awake、Update、Start等其他类的"Messages"中找到OnCollisionEnter,而不是在“私有/公共/任何方法”下找到。
简而言之:消息仅在内部被统一进程调用,如果在组件中存在,则根本不调用消息(如果不存在)。
我认为他们在后台使用类似于Component.SendMessage的东西,但不确定。
在此游戏对象中的每个
methodName上调用名为methodName的方法。
发布于 2019-06-11 18:06:10
它的工作原理:“当这个对撞机/刚体开始接触另一个刚体/对撞机时调用OnCollisionEnter”-- https://docs.unity3d.com/ScriptReference/Collider.OnCollisionEnter.html OnCollisionEnter是其他功能之一(更新、固定更新、启动、唤醒等),如果定义在引擎本身调用的MonoBehavior派生类的主体中,即这些是引擎事件函数。
为什么要在sphere上触发:,因为您的方法在类中附加到了球面对象,请参阅上面OnCollisionEnter的工作方式。
https://stackoverflow.com/questions/56549318
复制相似问题