Unity引擎入门知识补充
基础知识补充
1. Assets文件
只要Assets文件还在就可以使用unityhub来打开,其他的文件丢失了都可以由unity引擎自动创建。
2. Unity工作原理——反射
unity引擎本质是一个软件,使用它时是处于运行中的。所以我们实际上是在一个运行中的软件中制作游戏,在运行中动态的创建对象,这自然就让我们联想到了反射。
Unity开发的本质就是在Unity引擎的基础上利用反射和引擎提供的各种功能进行的拓展开发。
游戏场景本质就是一个配置文件,在构建游戏场景时Unity会通过反射动态创建其中的游戏对象和脚本。
3. 游戏预制体
- 点击Open Prefab可以直接编辑预制体并保存
- 场景中只可以为预制体添加游戏对象,不能删除,删除会提示进入Prefab编辑模式
- unpack prefab:对场景中的预制体选择此选项会断绝和project视图中相应预制体的关系
4. Unity脚本基本规则
创建规则:
- 对于需要挂载在游戏对象上的脚本,我们应当直接在Unity中创建脚本。
- Unity脚本可以放在Assets文件夹的任何位置。
- 类名和文件名需要一致,因为反射机制创建对象会通过文件名去找type。
MonoBehaviour基类:
- 只有继承MonoBehaviour的脚本才可以挂载到游戏对象上。
- 继承MonoBehaviour的脚本不可以new,当我们挂载在untiy脚本上时unity会帮助我们创建对应的脚本对象。
- 继承MonoBehaviour的脚本不要书写构造函数,unity创建脚本对象的过程中会调用多次构造函数,此时的构造函数已经失去了初始化的功能。
- 继承MonoBehaviour的脚本可以再次被继承。
不继承MonoBehaviour:
- 不继承MonoBehaviour的类,按照C#标准去书写。
- 不继承MonoBehaviour的类常用于单例管理模块,数据结构模块。
5. 脚本生命周期
脚本执行顺序可以通过ProjectSetting来设置先后顺序。
游戏的本质:
游戏的本质就是一个死循环,每一次循环处理游戏逻辑就会更新一次游戏画面,之所以能看到画面在动是因为切换画面的速度达到一定时人眼就认为画面是连续的。一帧就是执行一次循环。
游戏卡顿的原因:
跑一帧的时间浮动较大。
生命周期函数的概念:
生命周期函数就是该脚本对象依附的GameObject对象从出生到消亡整个生命周期中Unity会通过反射自动调用的一些特殊函数。Unity会帮助我们记录一个GameObject对象依附了哪些脚本,会自动的得到这些对象,通过反射去执行一些固定名称的函数,这些就是我们说的生命周期函数。在游戏运行时,unity读取场景配置文件的时候就会根据固定名称反射获取脚本上的生命周期函数并自动调用。
注意:失活的游戏对象不会执行生命周期函数。
6. unity部分部分
特性是可以通过反射来获得的一些元数据额外信息。而unity创建游戏对象的流程就是通过反射创建的,可以在流程中通过反射来获得特性信息,所以可以通过特性来控制一些行为。
[SerilizeField]
非public成员变量可以添加特性[SerilizeField]来在Inspector面板中显示。
[System.Serilizable]
public访问权限的大部分类型成员变量可以在Inspector面板中被看到,但是字典类型,自定义类型不可以。需要添加额外的特性[System.Serilizable]。
[Header( " " )]
在unity的Inspector面板中使用字符串为成员变量逻辑分组。
[Tooltip( " " )]
在Inspector面板中为成员变量添加说明性悬停注释。
[Space()]
在Inspector面板中将两个字段之间出现间隔。
[Range(0,10)]
在Inspector面板中设定值的取值范围。
[Multiline(5)]
在Inspector面板中多行显示字符串。
[TextArea(3,4)]
滚动条显示字符串,最少3条,最多4条,超过四行显示滚动条。
[ContextMenuItem(“名称”, “方法名”)]
为一个字段添加右键调用方法的菜单,菜单的内容为”重置钱“
[ContextMenu( " " )]
为方法添加特性使其可以在Inspector面板组件的右键中选择执行。