首页 > 代码库 > Unity3d - 初学篇 Event Functions 的 继承 机制
Unity3d - 初学篇 Event Functions 的 继承 机制
我们知道Start() Update() 等之类的 事件函数 在Unity 主线程中是依次调用的。至于调用的顺序可以查手册。
由此继承机制也会发生一些改变。
测试一:
public class MyTest2 : MonoBehaviour{ void Start () { //EventDelegate.Add(tween.onFinished, Test, true); Debug.Log(" MyTest2 Start "); } void Update() { Debug.Log(" MyTest2 Update "); }}
public class MyTest3 : MyTest2{ // Use this for initialization void Start() { Debug.Log(" MyTest3 Start "); } void Update() { Debug.Log(" MyTest3 Update "); }}
运行:
测试二:
那么 如果把MyTest3 的Start Update 注释掉会怎样了。
public class MyTest2 : MonoBehaviour{ void Start () { //EventDelegate.Add(tween.onFinished, Test, true); Debug.Log(" MyTest2 Start "); } void Update() { Debug.Log(" MyTest2 Update "); }}public class MyTest3 : MyTest2{ // Use this for initialization //void Start() //{ // Debug.Log(" MyTest3 Start "); //} //void Update() //{ // Debug.Log(" MyTest3 Update "); //}}
运行:
熟悉c# 的 都知道,不加有修饰符 默认是 private 的。看来 unity 对这类 函数 应该是 特殊 处理了。
测试三:
既然这样 我们再看看 别的继承特性。
public class MyTest2 : MonoBehaviour{ //virtual or abstract members cannot be private public virtual void Start () { //EventDelegate.Add(tween.onFinished, Test, true); Debug.Log(" MyTest2 Start "); } void Update() { Debug.Log(" MyTest2 Update "); }}public class MyTest3 : MyTest2{ // Use this for initialization public override void Start() { Debug.Log(" MyTest3 Start "); } void Update() { Debug.Log(" MyTest3 Update "); }}
结果看来和测试一是一样的。也就是说先会找最终实例化的有没有,然后再找父类有没有。
Unity3d - 初学篇 Event Functions 的 继承 机制
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。