关于继承MonoBehaviour的一些记录
在开发游戏中,为了减少不必要的代码量,我们经常会继承MonoBehaviour,那么MonoBehaviour内部的内置方法Start、Update等等如果在父类中定义了,在子类中再次定义会发生什么事呢?
我们来看看几个示例:
using UnityEngine;
using System.Collections; public class Test1 : MonoBehaviour
{
void Start()
{
Debug.Log("Test1 Start");
} void Update()
{
Debug.Log("Test1 Update");
}
}
using UnityEngine;
using System.Collections; public class Test2 : Test1
{
void Start()
{
Debug.Log("Test2 Start");
} void Update()
{
Debug.Log("Test2 Update");
}
}
我们将Test2.cs绑定到一个GameObject上,运行看看结果:
我们会发现Test2的方法覆盖了Test1的方法,同时Start、Update等内置的方法不是虚函数,所以无法使用base.Start()来调用父类的方法。
下面我们修改Test2如下:
using UnityEngine;
using System.Collections; public class Test2 : Test1
{
}
运行看看:
我们会发现如果在子类不定义Start、Update等方法会调用父类的对应方法,注意:定义了但函数体为空则不会调用父类的同名方法,类似于取消该方法的效果。
如果我们需要Start、Update是虚函数该怎么办呢?很简单,自己写一个:
using UnityEngine;
using System.Collections; public class Test1 : MonoBehaviour
{
void Start()
{
OnStart();
} protected virtual void OnStart()
{ } void Update()
{
OnUpdate();
} protected virtual void OnUpdate()
{ }
}
这样我们在其子类直接override方法OnStart、OnUpdate就行了,当前前提是其子类不能再定义Start和Update方法。
关于继承MonoBehaviour的一些记录的更多相关文章
- 继承MonoBehaviour类的优缺点和相关报错
Unity3D文档里虽然说所有脚本继承MonoBehaviour类,但如果你想自定义类,就可以不用继承MonoBehaviour,但是这个类只能调用其中的方法和属性,无法拖到场景的物体中使用. 所有从 ...
- Unity 继承MonoBehaviour脚本 执行顺序 详解
先看结果 Awake ->OnEnable-> Start ->-> FixedUpdate-> Update -> LateUpdate ->OnGUI ...
- 流畅的python第十二章继承的优缺点学习记录
子类化内置类型的缺点 多重集成和方法解析顺序 tkinter
- Unity Unity脚本类为什么要尽量避免继承MonoBehaviour类?
- 设计模式——通用泛型单例(普通型和继承自MonoBehaviour)
单例模式是设计模式中最为常见的,不多解释了.但应该尽量避免使用,一般全局管理类才使用单例. 普通泛型单例: public abstract class Singleton<T> where ...
- innodb 锁分裂继承与迁移
innodb行锁简介 行锁类型 LOCK_S:共享锁 LOCK_X: 排他锁 GAP类型 LOCK_GAP:只锁间隙 LOCK_REC_NO_GAP:只锁记录 LOCK_ORDINARY: 锁记录和记 ...
- 【Unity3D基础教程】给初学者看的Unity教程(二):所有脚本组件的基类 -- MonoBehaviour的前世今生
作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明.如果你喜欢这篇文章,请点[推荐].谢谢! 引子 上一次我们讲了GameObject,C ...
- MySQL · 特性分析 · innodb 锁分裂继承与迁移
http://mysql.taobao.org/monthly/2016/06/01/ innodb行锁简介 行锁类型 LOCK_S:共享锁 LOCK_X: 排他锁 GAP类型 LOCK_GAP:只锁 ...
- 高级I/O之记录锁
若两个人同时编辑一个文件,其后果将如何呢?在很多UNIX系统中,该文件的最后状态取决于写该文件的最后一个进程.但是对于有些应用程序(例如数据库),进程有时需要确保它正在单独写一个文件.为了向进程提供这 ...
随机推荐
- 关于PHP的十大误解 你中了几个?
作为开发人员,你常常会在网上看到不使用XX的理由之类的新闻.而作为最受欢迎的开源服务器端脚本语言,PHP也难逃这样的命运.殊不知,金无足赤.人无完人,再流行的语言都会存在缺点,或者是误解,因此,有些开 ...
- MAC 上搭建lua环境
一.下载并安装 (1)最新release版下载地址 http://www.lua.org/ftp/lua-5.3.1.tar.gz (2)编译 Building Lua is implemented ...
- Grunt 初体验
对于没有接触过类似自动化工具的朋友,对 grunt 也许只是停留在听过阶段,而并没有真正的使用过.今天就从最初级的教程说起.在开始教程之前,需要先确保你已经安装了 node. 下面就开始来讲解 gru ...
- js快速打印一个五分制(五颗星)的评分情况
1.函数 下面这个函数实现了在html页面中快速打印一个五分制(五颗星)的评分情况: function getRating(rating) { if(rating > 5 || rating & ...
- less 能加快css编写?
真心不知道用了less之后,怎么能让css写的更快.有时你定义了变量还得回到开头去看看.关键是定义的变量在css不停的修改中会变得没什么用. 用了之后没觉得会加快,感觉让我更加郁闷,求各位大神指点指点 ...
- 解决项目中EF5.0升级到EF6.0无法安装包的方法
今天在vs2012上新建了一个mvc4的项目,mvc4中默认的Entity Framework是5.0的版本,如下所示: 或者:,但是项目中有些要用到EF6.0的相关方法,用EF5.0实在繁琐,于是在 ...
- bzoj1433:[ZJOI2009]假期的宿舍
明显的二分图最大匹配. #include<cstdio> #include<cstring> #include<cctype> #include<algori ...
- UVA 1658 Admiral 海上将军(最小费用流,拆点)
题意: 一个有v个点的有向图,要从点1到点v需要找两条路径,两路径不可经过同一个点(除了1和v点).求这两条路径的最小费用(保证有解). 分析: 难在建图,其他套模板. 此图给的是超级复杂图,两个点之 ...
- SharePoint 2010 使用自定义aspx页面替换列表默认的新建(NewForm.aspx),查看(DispForm.aspx)和编辑(EditForm.aspx)页面
转:http://www.cnblogs.com/sygwin/archive/2011/11/04/2236678.html 如何使用自定义的aspx页(比如Application Page)替换列 ...
- DICOM医学图像处理:DIMSE消息发送与接收“大同小异”之DCMTK fo-dicom mDCM
背景: 从DICOM网络传输一文开始,相继介绍了C-ECHO.C-FIND.C-STORE.C-MOVE等DIMSE-C服务的简单实现,博文中的代码给出的实例都是基于fo-dicom库来实现的,原因只 ...