首页 > 其他 > 详细

关于继承MonoBehaviour的一些记录

时间:2015-05-10 17:04:48      阅读:270      评论:0      收藏:0      [点我收藏+]

在开发游戏中,为了减少不必要的代码量,我们经常会继承MonoBehaviour,那么MonoBehaviour内部的内置方法Start、Update等等如果在父类中定义了,在子类中再次定义会发生什么事呢?

我们来看看几个示例:

 1 using UnityEngine;
 2 using System.Collections;
 3 
 4 public class Test1 : MonoBehaviour
 5 {
 6     void Start()
 7     {
 8         Debug.Log("Test1 Start");
 9     }
10     
11     void Update()
12     {
13         Debug.Log("Test1 Update");
14     }
15 }
 1 using UnityEngine;
 2 using System.Collections;
 3 
 4 public class Test2 : Test1
 5 {
 6     void Start()
 7     {
 8         Debug.Log("Test2 Start");
 9     }
10 
11     void Update()
12     {
13         Debug.Log("Test2 Update");
14     }
15 }

我们将Test2.cs绑定到一个GameObject上,运行看看结果:

技术分享

我们会发现Test2的方法覆盖了Test1的方法,同时Start、Update等内置的方法不是虚函数,所以无法使用base.Start()来调用父类的方法。

 

下面我们修改Test2如下:

1 using UnityEngine;
2 using System.Collections;
3 
4 public class Test2 : Test1
5 {
6 }

运行看看:

技术分享

我们会发现如果在子类不定义Start、Update等方法会调用父类的对应方法,注意:定义了但函数体为空则不会调用父类的同名方法,类似于取消该方法的效果。

 

如果我们需要Start、Update是虚函数该怎么办呢?很简单,自己写一个:

 1 using UnityEngine;
 2 using System.Collections;
 3 
 4 public class Test1 : MonoBehaviour
 5 {
 6     void Start()
 7     {
 8         OnStart();
 9     }
10 
11     protected virtual void OnStart()
12     {
13         
14     }
15     
16     void Update()
17     {
18         OnUpdate();
19     }
20 
21     protected virtual void OnUpdate()
22     {
23         
24     }
25 }

这样我们在其子类直接override方法OnStart、OnUpdate就行了,当前前提是其子类不能再定义Start和Update方法。

关于继承MonoBehaviour的一些记录

原文:http://www.cnblogs.com/hammerc/p/4492434.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!