认真CS丨协程、RequireComponent、Serializefield

协程

子程序,或者称为函数,在所有语言中都是层级调用,比如A调用B,B执行过程中又调用C、C执行完毕后返回,B执行完毕后返回,最后是A执行完毕。所以子程序是通过栈实现的,一个线程就是执行一个子程序

协程看上去也是子程序,但在执行过程中,在子程序内部可中断,转而执行别的子程序,在适当时候再返回接着执行

格式:StartCoroutine(IEnumerator routine),即它的协程方法是IEnumerator类型

StartCoroutine就是开启一个协程,yield return是迭代器块返回到调用迭代的地方

一个协程的执行可以在任何地方用yield语句来暂停,yield return的值决定了什么时候恢复协程的执行,协程在几帧中执行操作时有极大用处,协程几乎没有性能开销

StartCoroutine一般都会立即返回,然而你也可以获得返回结果的值,但是这一步会等到协程执行完毕后才能生效


携程的优势:

a、携程极高的执行效率,因为子程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销。和多线程相比,线程数量越多,协程的性能优势越明显

b、不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制共享资源不加锁,只需判断状态就好了,所以执行效率比线程高很多



[RequireComponent(typeof(Component))]

作用:当添加了一个用了RequireComponent组件的脚本,需要的这个组件就会被脚本自动添加到gameobject上,这可有效避免组装错误

例子:一个脚本可能需要刚体总是被添加到相同的gameobject上,用RequireComponent属性的话,这个过程将被自动完成,因此你可永远不会组装错误

用法:在新建的类前面加[RequireComponent(typeof(Component))],该代码没有分号与其他内容隔开。使用后,新生成的组件是无法被移除的



[SerializeField]

serialize,序列化

field,场地

在Inspector面板显示的属性都同时具有serialize功能。序列化意味着引擎会保存该域保存过的值;关闭U3D再打开工程,该域值仍然在

a、public变量

在没有加入Attribute(属性)的前提下,public变量是默认被视为可以被serialize的,所以public声明的变量在面板可见,private不可见

b、[SerializeField]Attribute

强制unity去序列化一个私有域,这是一个内部的unity序列化功能,有时候我们需要序列化一个private或者protected属性,这时候就可以用[SerializeField]Attribute,之后就可以在面板显示

c、[HideInInspector]

表示将原本显示在面板上的序列化隐藏起来(隐藏public)

猜你喜欢

转载自blog.csdn.net/weixin_38239050/article/details/80316573