今天看基础Unity视频,视频里的讲师说自己写的脚本都是继承自MonoBehaviour,然后只需要重写各种类似Start的方法就可以了。“重写”这个词令楼主很疑惑?如果Start是虚方法,在C#中重写不是要加override的关键字吗?为什么我们写的时候没加。转到MonoBehaviour的定义发现不论是MonoBehaviour还是他的父类都没有Start这类方法。
那么自己写的脚本中的Start方法是如何被调用的呢?
楼主猜测是这样的:
1、Unity内部维护场景里的对象列表,在每帧获取对象上的所有MonoBehaviour组件。
2、在每帧的不同时期调用MonoBehaviour中的Start等方法。
3、由于Start等方法是私有的且属于MonoBehaviour的子类,所以不能直接调用
4、楼主这里想到了可以用SendMessage方法:SendMessage("Start");
5、还可以用C#的反射。楼主发现调用同一方法,反射明显比SendMessage要快。
不知大家有没更好的猜测。毕竟不论是SendMessage还是反射总觉得速度很慢,感觉不应该出现在引擎的核心部分。楼主对C/C++了解不深,不知道在Native代码中有没更好的做法,求高手指点。
那么自己写的脚本中的Start方法是如何被调用的呢?
楼主猜测是这样的:
1、Unity内部维护场景里的对象列表,在每帧获取对象上的所有MonoBehaviour组件。
2、在每帧的不同时期调用MonoBehaviour中的Start等方法。
3、由于Start等方法是私有的且属于MonoBehaviour的子类,所以不能直接调用
4、楼主这里想到了可以用SendMessage方法:SendMessage("Start");
5、还可以用C#的反射。楼主发现调用同一方法,反射明显比SendMessage要快。
不知大家有没更好的猜测。毕竟不论是SendMessage还是反射总觉得速度很慢,感觉不应该出现在引擎的核心部分。楼主对C/C++了解不深,不知道在Native代码中有没更好的做法,求高手指点。
