Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
void onCollisionCenter()是如何工作的?(统一,c#)_C#_Unity3d - Fatal编程技术网

void onCollisionCenter()是如何工作的?(统一,c#)

void onCollisionCenter()是如何工作的?(统一,c#),c#,unity3d,C#,Unity3d,据我所知,有接口和抽象类。然而,当OnCollisionEnter发生时,我们不使用“覆盖”来做一些事情,我不确定这是否是接口问题 所以基本上我要求提供一个简单的代码示例,它的工作原理类似于OnCollisionCenter。也许它最终是一个接口 编辑:OnCollisionCenter是MonoBehavior的接口,我说得对吗?正如Everts所说,它只是一个方法,如果类继承自MonoBehavior,则只对该类调用该方法。它不是一个接口,您在其中实现它的一部分,但它也不是一个基类方法,因为

据我所知,有接口和抽象类。然而,当OnCollisionEnter发生时,我们不使用“覆盖”来做一些事情,我不确定这是否是接口问题

所以基本上我要求提供一个简单的代码示例,它的工作原理类似于OnCollisionCenter。也许它最终是一个接口


编辑:OnCollisionCenter是MonoBehavior的接口,我说得对吗?

正如Everts所说,它只是一个方法,如果类继承自MonoBehavior,则只对该类调用该方法。它不是一个接口,您在其中实现它的一部分,但它也不是一个基类方法,因为您没有重写任何东西。它确实需要为每个方法使用正确的参数类型。你只需要边走边了解每种方法

public class TestClass : MonoBehaviour {

    private void OnCollisionEnter(Collision other) {
        Debug.Log($"{gameObject.name} is colliding with {other.collider.name}");
    }

}

Unity扫描每个MonoBehavior的特定方法(更新、启动等)。然后很可能将它们存储在适当的集合中,以便在需要时调用它们。它就像一个接口,但它不是(不是公共的,没有接口继承),它像反射,但它不是(它是脚本的一个更基本的字符串扫描)。哦,基本上它只是一个方法,每当它碰到什么东西时,它就会被调用。据我所知,每个游戏对象上都有一个统一的代码,如果有,它会调用OnCollisionCenter(?)。我只是想了解如何实现这种方法调用程序。我认为在游戏对象上找到一个脚本并调用该方法(如果有)而不出现任何错误并不是那么简单。我还有一个问题,调用OnCollisionCenter方法的代码是否在刚体组件脚本中,因为它在没有刚体的情况下不会检测碰撞,所以刚体会检测碰撞并让相关对象知道。我不确定到底是哪个部分调用了这个方法。不过,您要查找的是SendMessage()。您可以使用它按字符串名调用方法。它将遍历对象上的每个组件,检查其中是否有指定的方法,然后调用它。但这是一种效率非常低的做事方式,所以如果可能的话,最好考虑其他方式来实现你最初的目标。调用它的“方法”深藏于Unity的物理引擎中。单行为方法,如
唤醒
启动
更新
等。。因此,
oncollisionenter
也被称为“消息”。。有点像反射的工作原理。