Unity3D文档里虽然说所有脚本继承MonoBehaviour类,但如果你想自定义类,就可以不用继承MonoBehaviour,但是这个类只能调用其中的方法和属性,无法拖到场景的物体中使用。

所有从MonoBehaviour继承过来的类,Unity都会自动创建实例,并且调用被重载的方法,例如start,Update等方法。

如果不继承Mono会有哪些好处呢?

1:节约资源。

如果不继承Mono会有哪些坏处呢?

1:不能使用Invoke和Coroutine了。

2:调试不方便了,不能在Inspector和Debug tab看到参数。同时如果一个类不继承Mono,那么这个类的List表也无法在Debug界面看到。

3:不能自动调用Start,Update,OnGUI等方法。

考虑继承的情况:
1、MonoBehaviour里面的方法比如Start(), Awake(), Update(), FixedUpdate(), OnGUI(),还有变量比如gameObject,这几个方法不管你用哪一个,必须要继承MonoBehaviour,用不用MonoBehaviour关键看要实现什么功能和属性。

2、GameObject还是要继承MonoBehaviour的,这样才能new实例化一个对象,但是其他类不要继承就行了。

尽量避免继承的情况:

1、如果你的类不需要引擎提供的初始化,各种物理,渲染,着色器的回调,最好不要继承MonoBehaviour,游戏是需要优化节约资源的。如果你本身不需要那些功能,继承后,当引擎接触事件,触发的时候,就会反射调用个各种函数,这是很需要耗费资源的。

2、当需要获取用户鼠标键盘输入的时候?研究一下是否可以通过外部类的update调用自身方法实现。

继承Mono会有一个BUG:

如果你继承了Mono的类,你就不需要创建它的实例,而且你也不能new创建。虽然编译可以通过,但是执行的时候就会有个一个错误显示在edit的console窗口,这时候不管你new后面是否为空,但是系统显示为空,这就是一个BUG了:我的类继承了你,虽然不能new出来,但是它认为,这不算一个错误啊。所以当获取对象或其值报错为null时,考虑是否继承了monobehaviour类。

继承MonoBehaviour类的优缺点和相关报错的更多相关文章

  1. ALERT日志中常见监听相关报错之中的一个:ORA-609错误的排查

    參考MOS文档有: Troubleshooting Guide ORA-609 : Opiodr aborting process unknown ospid (文档 ID 1121357.1) Al ...

  2. 在接口的实现类里使用@Override注解报错

    问题分析 @Override注解用来检测子类对父类或接口的方法的重写是否正确,但有一次我在Eclipse里对接口的实现类里使用@Override注解却报错,不过在父类的子类里使用该注解却是正常的. 百 ...

  3. iOS工具】rvm、Ruby环境和CocoaPods安装使用及相关报错问题解决

    〇.前言 <p>在iOS开发中 CocoaPods作为库依赖管理工具就是一把利器. 有了 CocoaPods则无需再通过拖 第三方库及第三方库所依赖的 framework静态库到项目中等麻 ...

  4. ALERT日志中常见监听相关报错之二:ORA-3136错误的排查

    最近在多个大型系统中遇到此问题,一般来说假设client未反映异常的话能够忽略的. 假设是client登陆时遇到ORA-12170: TNS:Connect timeout occurred,能够參考 ...

  5. 解决kettle在两个mysql之间迁移数据时乱码的问题 和 相关报错 及参数调整, 速度优化

    1. 乱码问题 编辑目标数据库的链接: 配置编码参数即可. 2. 报错 No operations allowed after statement closed. 需要调整wait_timeout:  ...

  6. Oracle ALERT日志中常见监听相关报错之二:ORA-3136错误的排查 (转载)

    近期在多个大型系统中遇到此问题,一般来说如果客户端未反映异常的话可以忽略的.如果是客户端登陆时遇到ORA-12170: TNS:Connect timeout occurred,可以参考 http:/ ...

  7. FIM相关报错汇总

    1.错误1:FIM在修改MA名字的时候报错: The management agent cannot be deleted or renamed because the working directo ...

  8. Jdk1.6编译,1.7执行,1.7中没有需要的类,为何不会报错

      今天发现一个非常奇怪的问题   import sun.misc.BASE64Decoder; 我在本地引入了jdk1.6中的包,编译也用1.6没问题,但是实际上jdk1.7并没有这个包.在Linu ...

  9. json_decode()相关报错

    错误描述 PHP Warning:  json_decode() expects parameter 1 to be string, array given in xxx.php on line 29 ...

随机推荐

  1. 基于Django的独立运行python脚本开发

    Django框架很方便,比如其方便的ORM,如果写基于Django的独立运行脚本,主要在脚本前面加上以下代码: import sys,os,django sys.path.append(os.path ...

  2. linux 调试利器gdb, strace, pstack, pstree, lsof

    1) 如何使用strace+pstack利器分析程序性能? http://www.cnblogs.com/bangerlee/archive/2012/04/30/2476190.html 此文有详细 ...

  3. JAVA calling convention

    http://stackoverflow.com/questions/28126082/where-does-the-jit-compiled-code-reside https://wiki.ope ...

  4. 队列——PowerShell版

    继续读啊哈磊<啊哈!算法>感悟系列——队列 地铁售票处排队,先来的人先到队首先买完先走,后来的人排在队尾等候后买完后走. 想买票,必须排在队尾:买完票,只能从队首离开. 这种先进先出(Fi ...

  5. 手机触屏滑动图片切换插件swiper.js

    今天给大家分享一款手机触屏滑动图片切换插件swiper.js是一款swiper手机触屏滑动图片幻灯片,适合各种尺寸.效果图如下: 在线预览   源码下载 实现的代码. html代码: <div ...

  6. 【WampServer笔记】常用文件及其配置

    用的集成工具是 www.wampserver.com WampServer = Windows操作系统 + Apache服务器 + MySQL数据库 + Php服务器脚本 WampServer工具(集 ...

  7. C# 异常类型

    Exception 类  描述 SystemException 其他用户可处理的异常的基本类 ArgumentException 方法的参数是非法的 ArgumentNullException 一个空 ...

  8. Log4j 2使用教程<转>

    Log4j 2的好处就不和大家说了,如果你搜了2,说明你对他已经有一定的了解,并且想用它,所以这里直接就上手了. 1. 去官方下载log4j 2,导入jar包,基本上你只需要导入下面两个jar包就可以 ...

  9. 如何打一手好Log

    如果项目上过线的话,那你一定知道Log是多么重要. 为什么说Log重要呢?因为上线项目不允许你调试,你只能通过Log来分析问题.这时打一手好Log的重要性绝不亚于写一手好代码.项目出问题时,你要能拿出 ...

  10. linux下设置了SSH免密码登录但还是需要输入密码的解决办法

    今天在设置linux的免密码登录后,仍然需要输入密码,后来找到了原因,是因为用户没有权限修改.ssh目录下的know_hosts文件导致的. 具体情况是这样的: 在/home/username/.ss ...