zoukankan      html  css  js  c++  java
  • 【Unity3D基础教程】给初学者看的Unity教程(二):所有脚本组件的基类 -- MonoBehaviour的前世今生

    作者:王选易,出处:http://www.cnblogs.com/neverdie/ 欢迎转载,也请保留这段声明。如果你喜欢这篇文章,请点【推荐】。谢谢!

    QQ图片20140529123319

    引子

    上一次我们讲了GameObject,Compoent,Time,Input,Physics,其中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启用时,其 FixedUpdate 在每一固定帧被调用。
    • OnEnable:当对象变为可用或激活状态时此函数被调用。
    • OnDisable:当对象变为不可用或非激活状态时此函数被调用。
    • OnDestroy:当MonoBehaviour将被销毁时,这个函数被调用。

    下面用一张图来更形象地说明一下这几个类的在MonoBehaviour的生命周期中是如何被调用的:

    lifecycle

    在上面这个图里,比较难以理解的就是Coroutine究竟是怎么回事?别着急,之后我们会单独写一篇博客来讲这件事。

    MonoBehaviour的那些坑

    • 私有(private)和保护(protected)变量只能在专家模式中显示.属性不被序列化或显示在检视面板.
    • 不要使用命名空间(namespace)
    • 记得使用 缓存组件查找, 即在MonoBehaviour的长远方法中经常被访问的组件最好在把它当作一个私有成员变量存储起来。
    • 在游戏里经常出现需要检测敌人和我方距离的问题,这时如果要寻找所有的敌人,显然要消耗的运算量太大了,所以最好的办法是将攻击范围使用Collider表示,然后将Collider的isTrigger设置为True。最后使用OnTriggerEnter来做攻击范围内的距离检测,这样会极大提升程序性能。
  • 相关阅读:
    c 语言学习第一天
    react+antd 使用脚手架动态修改主题色
    用 vitePress 快速创建一个文档项目
    react懒加载,减少首屏加载时间
    react-devtools安装以及使用中的问题
    react为什么不用数组的下标来绑定key
    三种js缓存(笔记)
    关于浏览器自动记住登录帐号和密码后, 一些输入框会显示帐号密码信息
    H5 Hybrid开发-前端资源本地化方案纪要
    webpack + ts 配置路径别名无死角方法总结
  • 原文地址:https://www.cnblogs.com/android-blogs/p/6132977.html
Copyright © 2011-2022 走看看