unity学习笔记(一)
组件的概念
组件:一个或多个功能的容器,类似模块,插上去就有这个功能,不查没有
存在意义:
- 如果太依赖继承,继承树将会特别复杂
- 组件化设计思想有利于维护拓展
unity内任何游戏物体必须有Transform组件
unity中大多数情况下,我们写的c#脚本就是一个组件
从代码角度认识GameObject
任何组件身上都有一个gameObject,代表它所在的GameObject(宿主)
主要属性
name:游戏物体的名称tag:游戏物体的标签layer:游戏物体的层分类
Debug.Log(gameObject.name);//打印出GameObject的名字
gameObject.name = "Game Object";//修改GameObject的名字
Debug.Log(gameObject.name);//打印出GameObject的名字
if (gameObject.tag == "Player")
{
Debug.Log("This is a player object");//判断GameObject的tag是否为Player
}
主要行为
SetActive:是否显示AddComponent:添加组件GetComponents:获取组件GetComponents:获取多个组件(允许一个组件重复添加,但是一般不会)GetComponentInChildren:从子物体身上查找组件GetComponentInParent:从父物体身上查找组件<T>:泛型,后续细说,目前简单理解为“确定一个类型”
销毁组件的方式
Destory(gameObject.GetComponent<XXXXController>());
Transform组件基本信息
GameObject有个属性就是transfrom,代表它所在GameObject的Transform组件
主要属性
position:坐标rotation:旋转 (四元数格式)eulerAngles:旋转(欧拉角模式)localScale:缩放localPosition、localRotation、localEulerAngels:是相对父物体的坐标和旋转parent:父物体的transformchildCount:子物体的数量root:自身的根节点(父的父的父到最上层)
主要行为
GetChild:获取第X个子物体SetParent:设置自身为某个游戏物体的子物体Find:查找子物体,参数是路径,填写方式类似文件夹"A/B/C"
坐标和Vector结构体
unity中2D和3D没有本质上的区别,unity中的2D场景就是Z轴值为0的3D场景
世界坐标系:相对世界的坐标
局部坐标系:相对父物体的坐标
Translate维护父子结构
删除一个GameObject
Destroy:销毁物体,但不会立即销毁,而是在Update执行后执行销毁操作DestroyImmediate:立即销毁物体,销毁完物体才会执行下一行代码
父子结构相关的属性与函数
parent:父物体的transformchildCount:子物体的数量root:自身的根节点(父的父的父到最上层)GetChild:获取第X个子物体SetParent:设置自身为某个游戏物体的子物体
组件的生命周期
如字面意思,生命周期就是生老病死的一个轮回。类似地,在unity中指的是一个组件从创建到销毁的所有阶段,这些阶段肯定要做一些事情,这些事情就是生命周期函数
Tips:官方一般称为“事件函数”
关键生命周期函数
Awake(针对自身):始终在任何Start函数之前GameObject创建后调用此函数。(如果游戏对象在启动期间处于非活动状态,则在激活之后才会调用Awake)OnEanble(针对自身):在启用对象后立即调用此函数Start(针对自身):仅当启用脚本实例后,才会在第一次帧更新之前调用StartUpdate(针对自身):每帧调用一次Update。这是用于帧更新的主要函数LateUpdate(针对自身):在LateUpdate完成后执行一次OnDisable(针对自身):被禁用或处于非活动状态时,调用此函数OnDestroy(针对自身):对象存在的最后一帧完成所有帧更新之后,调用此函数(可能因为Destroy函数或在场景关闭时销毁该对象)
//TODO:需要补充一些
帧的深度了解
游戏、视频的原理就是不停的刷新画面,那么这个刷新一定存在频率,这就是帧率(FPS),比如60FPS就是每秒刷新60次画面
假设游戏稳定在60PFS的状态下,那么Update就是1/60秒执行一次,也就是每秒执行60次

浙公网安备 33010602011771号