Unity脚本类为什么要尽量避免继承monobehaviour是什么类

【Unity3D基础教程】给初学者看的Unity教程(二):所有脚本组件的基类 -- MonoBehaviour的前世今生... - 推酷
【Unity3D基础教程】给初学者看的Unity教程(二):所有脚本组件的基类 -- MonoBehaviour的前世今生...
作者:王选易,出处:
,也请保留这段声明。如果你喜欢这篇文章,请点【推荐】。谢谢!
上一次我们讲了
,其中Time,Input,Physics都是Unity中的全局变量。GameObject是游戏中的基本物件。GameObject是由Component组合而成的,GameObject本身必须有Transform的Component,这也加深了我们对GameObject的理解,即GameObject是游戏场景中真实存在,而且有位置的一个物件。
但是我们怎么操纵这个GameObject呢?这就需要引入脚本组件了,也就是今天讲的MonoBehaviour
MonoBehaviour的生命周期
MonoBehaviour是Unity中所有脚本的基类,如果你使用JS的话,脚本会自动继承MonoBehaviour。如果使用C#的话,你需要显式继承MonoBehaviour。
在我们使用MonoBehaviour的时候,尤其需要注意的是它有哪些可重写函数,这些可重写函数会在游戏中发生某些事件的时候被调用。我们在Unity中最常用到的几个可重写函数是这几个:
Awake:当一个脚本实例被载入时Awake被调用。我们大多在这个类中完成成员变量的初始化
Start:仅在Update函数第一次被调用前调用。因为它是在Awake之后被调用的,我们可以把一些需要依赖Awake的变量放在Start里面初始化。 同时我们还大多在这个类中执行StartCoroutine进行一些协程的触发。要注意在用C#写脚本时,必须使用StartCoroutine开始一个协程,但是如果使用的是JavaScript,则不需要这么做。
Update:当MonoBehaviour启用时,其Update在每一帧被调用。
FixedUpdate:当MonoBehaviour启用时,其
OnEnable:当对象变为可用或激活状态时此函数被调用。
OnDisable:当对象变为不可用或非激活状态时此函数被调用。
OnDestroy:当MonoBehaviour将被销毁时,这个函数被调用。
下面用一张图来更形象地说明一下这几个类的在MonoBehaviour的生命周期中是如何被调用的:
在上面这个图里,比较难以理解的就是Coroutine究竟是怎么回事?别着急,之后我们会单独写一篇博客来讲这件事。
MonoBehaviour的那些坑
私有(private)和保护(protected)变量只能在专家模式中显示.属性不被序列化或显示在检视面板.
不要使用命名空间(namespace)
缓存组件查找,
即在MonoBehaviour的长远方法中经常被访问的组件最好在把它当作一个私有成员变量存储起来。
在游戏里经常出现需要检测敌人和我方距离的问题,这时如果要寻找所有的敌人,显然要消耗的运算量太大了,所以最好的办法是将攻击范围使用Collider表示,然后将Collider的isTrigger设置为True。最后使用OnTriggerEnter来做攻击范围内的距离检测,这样会极大提升程序性能。
在MonoBehaviour中最难理解的是Coroutine是如何实现的,但是如果在一篇博客里面写Coroutine的话,未免显得太长,我会在下一篇博客中写有关Coroutine的内容。
已发表评论数()
请填写推刊名
描述不能大于100个字符!
权限设置: 公开
仅自己可见
正文不准确
标题不准确
排版有问题
主题不准确
没有分页内容
图片无法显示
视频无法显示
与原文不一致看到网上好多人这样说,可是一直都没找到原因。这样做有什么好处呢?
这种说法是错误的。
应该从MonoBehavior的机制来分析比较合适&br&如果你的类无需引擎提供的各种初始化, 更新及析构, 物理, 渲染等的回调. 最好不要继承MonoBehavior&br&继承后, 引擎会在事件触发时, 通过反射调用各种函数. 这是需要消耗性能的.&br&&br&当然, 如果你的类压根没挂上GameObject. 理论上说, 应该没啥卵用&br&&br&所以总结, 弄不继承MonoBehavior尽量不派生
应该从MonoBehavior的机制来分析比较合适 如果你的类无需引擎提供的各种初始化, 更新及析构, 物理, 渲染等的回调. 最好不要继承MonoBehavior 继承后, 引擎会在事件触发时, 通过反射调用各种函数. 这是需要消耗性能的. 当然, 如果你的类压根没挂上GameObject…
我也在知乎也说过类似的话:没必要的情况不要继承mb。&br&&br&1.首先你要理解基于组件开发是什么原理,理解各个接口(Awake Start等)调用顺序和作用&br&&br&2.很多人不了解第一点会导致譬如初始化顺序问题,运行中修改代码导致Unity崩溃,性能下降等。(包括我也是,但项目大了,大船只能慢慢调头)&br&&br&3.什么时候该继承mb?&br&它尽量满足其中一点:&br&
能独立于项目外运行,拖到其他项目,可以独立运行并实现功能,例如实现一个ProgressBar,它可以不受项目逻辑影响,外部只需要修改其几个属性或者调用方法,即可达到功能。&br&
需要实现Update Invoke等方法。&br&
预制件往往会挂一个mb脚本,用于保存它子对象的引用。这个应该用序列化脚本功能替代,但为了方便,经常这样使用。&br&&br&4.什么时候不应该继承mb?&br&
最常遇见的情况是,一个VO类也继承mb,然后new的时候报一大堆警告。&br&
如果只为了实现Update等时间循环方法,建议实现一个TimeManager的功能。&br&&br&5.mb中无需用到的Start Update等方法应删掉,不然unity一样会调用、一样有损耗。&br&&br&6.还是Update,由于实现太方便了,继承mb,写一个Update方法即可每帧循环了,然后很多人就不适当使用甚至滥用。&br&例如在update里面FindObject等,这样效率会很低的。&br&例如属性的值明明可以在set的时候检验的,不需要每帧检验的,却这在了update方法里。
我也在知乎也说过类似的话:没必要的情况不要继承mb。 1.首先你要理解基于组件开发是什么原理,理解各个接口(Awake Start等)调用顺序和作用 2.很多人不了解第一点会导致譬如初始化顺序问题,运行中修改代码导致Unity崩溃,性能下降等。(包括我也是,但项目…
已有帐号?
无法登录?
社交帐号登录
iOS独立游戏《Crazy Driller》开发者,专注U3D,想改行做steam游戏京 东 价:
[定价:¥]
PLUS会员专享价
支  持:
搭配赠品:
所 在 地:北京 通州区
服务支持:
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
Unity3D人工智能+Unity 5.X 3D游戏开发+Unity 3D详解与全案解析
加载中,请稍候...
商品介绍加载中...
扫一扫,精彩好书免费看
服务承诺:
京东平台卖家销售并发货的商品,由平台卖家提供发票和相应的售后服务。请您放心购买!
注:因厂家会在没有任何提前通知的情况下更改产品包装、产地或者一些附件,本司不能确保客户收到的货物与商城图片、产地、附件说明完全一致。只能确保为原厂正货!并且保证与当时市场上同样主流新品一致。若本商城没有及时更新,请大家谅解!
权利声明:京东上的所有商品信息、客户评价、商品咨询、网友讨论等内容,是京东重要的经营资源,未经许可,禁止非法转载使用。
注:本站商品信息均来自于合作方,其真实性、准确性和合法性由信息拥有者(合作方)负责。本站不提供任何保证,并不承担任何法律责任。
印刷版次不同,印刷时间和版次以实物为准。
价格说明:
京东价:京东价为商品的销售价,是您最终决定是否购买商品的依据。
划线价:商品展示的划横线价格为参考价,该价格可能是品牌专柜标价、商品吊牌价或由品牌供应商提供的正品零售价(如厂商指导价、建议零售价等)或该商品在京东平台上曾经展示过的销售价;由于地区、时间的差异性和市场行情波动,品牌专柜标价、商品吊牌价等可能会与您购物时展示的不一致,该价格仅供您参考。
折扣:如无特殊说明,折扣指销售商在原价、或划线价(如品牌专柜标价、商品吊牌价、厂商指导价、厂商建议零售价)等某一价格基础上计算出的优惠比例或优惠金额;如有疑问,您可在购买前联系销售商进行咨询。
异常问题:商品促销信息以商品详情页“促销”栏中的信息为准;商品的具体售价以订单结算页价格为准;如您发现活动商品售价或促销信息有异常,建议购买前先联系销售商咨询。
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
加载中,请稍候...
浏览了该商品的用户还浏览了
加载中,请稍候...
价 格: 到
   
iframe(src='///ns.html?id=GTM-T947SH', height='0', width='0', style='display: visibility:')【Unity3D基础教程】给初学者看的Unity教程(二):所有脚本组件的基类
MonoBehaviour的前世今生
。 但是我们怎么操纵这个GameObject呢?这就需要引入脚本组件了,也就是今天讲的MonoBehaviour MonoBehaviour的生命周期 MonoBehaviour是Unity中所有脚本的基类,如果你使用JS的话,脚本会自动继承MonoBehaviour。如果使用C#的话,你需要显式继承
12:01&&&[]
. 【Unity3D基础教程】给初学者看的Unity教程(一):GameObject,Compoent,Time,Input,Physics 【Unity3D基础教程】给初学者看的Unity教程(二):所有脚本组件的基类 -- MonoBehaviour的前世今生 【Unity3D基础教程】给初学者看的
21:32&&&[]
Unity的各种用法,推荐官网视频 一些深入理解,可以参考:全面理解 Unity UI 系统 UGUI的类继承结构还是挺复杂的,如果你想对此有了解的话,可以参考我的两个类图: Unity GUI 链接:UnityEngine.UI系统基础类架构图
Unity Event System 链接
17:34&&&[]
并不一定是有意义的,如null,但是我们更感兴趣的是,如何使用这个yield return的返回值来实现一些有趣的效果。 Unity声明了YieldInstruction来作为所有返回值的基类,并且提供了几种常用的继承类,如WaitForSeconds(暂停一段时间继续执行
19:06&&&[]
顺序后,可以在游戏结束的时候按照相反的顺序销毁这些单例 设计单例的基类 在Unity中,我们需要一个基类来为所有单例的操作提供统一的接口,同时,我们还要让所有单例继承MonoBehaviour,只有这样才能让单例自由使用协程这一特性。 基类设计如下,代码链接 using S using
21:39&&&[]
或者推荐本书~!&请大神赐教~!
回复讨论(解决方案)
我这有Unity3D游戏开发教程,需要不?
/thread-.html?cyxdn
http://download.csdn.net
00:34&&&[]
来构建更加有趣的运动效果,通过Transform的变换和通过RigidBody的变换不一定非得是必取其一的,关于动画的知识可以看看我的这篇博客:【Unity3D基础教程】给初学者看的Unity教程(三):通过制作Flappy Bird了解Native 2D中的Sprite,Animation。 关于
12:37&&&[]
Animation的转折点,你会在这一帧处设置一些Sprite的变化点,或者是Position这种数据的转折点。 动画事件可以在动画的某一帧设置,在这一帧可以设置的所谓动画事件即是这一GameObject上所有脚本组件的非重载函数(即排除掉OnUpdate,Start之类的函数)。设置完动画事件之后。你会发现每次
15:05&&&[]
以下是 learnunity3d.com 发布的5段Unity3D视频教程,系统介绍了使用Unity3D引擎开发的全过程,希望对您的开发有所帮助。 视频地址: Lesson One Lesson Two Lesson Three Lesson Four Lesson Five
03:38&&&[]
Unity3d之MonoBehaviour的可重写函数整理
最近在学习Unity3d的知识.虽然有很多资料都有记录了,可是我为了以后自己复习的时候方便就记录下来吧!下面的这些函数在Unity3d程序开发中具有很重要的作用. Update &当MonoBehaviour启用时,其
11:41&&&[]
作者& 神勇小笨猫 原帖地址& /bbs/read.php?tid-10500.html
/gamego.ca/Public/Unity3D
03:47&&&[]
】社区,是网友自行发布的Unity3D学习文章,如果有什么内容侵犯了你的相关权益,请与官方沟通,我们会即时处理。
更多精彩内容:
10:12&&&[]}

我要回帖

更多关于 monobehaviour update 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信