Unity学习笔记
Unity学习笔记
并不完全的Unity学习笔记~~
摘录自Unity中文课堂 (u3d.cn) – Joker独游计划合集
Unity主要框架
Scene场景
Scene记录游戏中各元素并显示,为.unity的配置文件。
GameObject游戏物体
场景中的一切都为游戏物体。
游戏物体的编辑一般通过Hierarchy、Inspector面板。
不同的组件赋予游戏对象不同的功能。
Component组件
组件为一个或多个功能的容器。
组件化设计有利于维护拓展,简化继承树。
Unity中任务游戏物体都有Transform组件。
Project窗口
Project窗口是一个开发时使用的项目资源管理器,为文件夹结构。
Inspect窗口
可查看游戏物体的属性设置
GameObject
任何物体身上都有一个gameObject属性,代表所在的GameObject。
主要属性
- name:名称
- tag:标签
- layer:层分类
主要行为
- SetActive:是否显示
- AddComponent:添加组件
- GetComponent:获取组件
- GetComponents:获取多个组件
- GetComponentInChildren:获取子物体上的组件
- GetComponentInParent:获取父物体上的组件
组件的生命周期
在Unity中生命周期指一个组件从创建到销般的所有阶段,这些阶段肯定要做一些事情,这些事情就是生命周期函数。注意:官方一般称为“事件函数”。
关键生命周期函数
Awake(针对GameObject):始终在任何 Start函救之前GameObject创建后调用此函数。
OnEanble(针对自身):在启用对象后立即调用此函数。
Reset:调用 Reset 可以在脚本首次附加到对象时以及使用 Reset 命令时初始化脚本的属性。
OnValidate:每当设置脚本的属性时都会调用 OnValidate,包括反序列化对象时。
Start(针对自身):仅当启用脚本实例后,才会在第一次帧更新之前调用 Start
OnApplicationPause:在帧的结尾处调用此函数(在正常帧更新之间有效检测到暂停)。在调用OnApplicationPause之后,将发出一个额外帧,从而允许游戏显示图形来指示暂停状态。
FixedUpdate:调用 FixedUpdate 的频度常常超过 Update。如果帧率很低,可以每帧调用该函数多次;如果帧率很高,可能在帧之间完全不调用该函数。在 FixedUpdate 之后将立即进行所有物理计算和更新。在 FixedUpdate 内应用运动计算时,无需将值乘以 Time.deltaTime。这是因为 FixedUpdate 的调用基于可靠的计时器(独立于帧率)。
Update(针对自身):每帧洞用一次 Update。这是用于帧更新的主要函数
LateUpdate(针对自身):在LateUpdate完成后执行一次
OnDisable(针对自身):被禁用或处于非活动状态时,调用此函数
OnDestroy(针对GameObject):对象存在的最后一帧完成所有顿更新之后,调用此函数(可能因为Destroy函教或在场景关闭时销数该对象)
针对GameObject:指就算组件被禁用也能调用
Unity输入系统
监听键盘输入
键盘的输入有三种状态:按下的瞬间、持续按下中、弹起的瞬间
下方三个函数返回都是bool类型、参数都是KeyCode枚举类型
1 | Input.GetkeyDown(KeyCode.A) |
监听鼠标输入
和键盘差不多,不过0是鼠标左键、1是鼠标右键、2是鼠标中键
1 | Input.GetMouseButtonDown(0); |
InputManager
Unity提供了一种常见且方便的使用方式:
大多游戏中键盘A和D,是控制玩家在水平方向上进行移动,这里提供一个函数:
如果玩家按下A,函数的返回值会偏向-1
如果玩家按下D,函数的返回值会偏向1
如果玩家不按A和D,函数的返回值会偏向0
为什么叫“偏向”,因为会缓动效果,比如按下A后,数值慢慢减到-1,如果不按,慢慢回到0,按下D,慢慢到D,刚好可以模拟出启动、惯性的效果
1 | Input.GetAxis("Horizontal"); |
“Horizontal”是在Project->InputManager中配置
Unity2D动画
Animator:动画组件(组件)
用来持有AnimatorController的组件,注意可以多个Aniamtor持有一份AnimatorController
AnimatorController:动画控制器(文件)
动画控制器相当于是一个配置文件,配置的是一个角色有那些动画,动画和动画之间如何跳转
状态:当前角色处于的状态,状态会持有具体的AniamtionClip
条件:动画之间的切换基于什么条件
参数:条件基于参数来判断是否满足,满足则切换
- int、float、bool和代码中的类似
- Trigger:触发一次,bool相当于是一种状态,但是Trigger是一个一次性使用的条件
Has Exit Time:即使条件满足也需要等待当前状态的播放完毕才能进行切换
参数:提供给脚本去访问、修改的“值”,这些值变化则状态变化,则动画发生改变
CrossFadeInFixedTime:此函数无视是否有条件(也就是不拉线也能强行切换动画状态)
AniamtionClip:动画片段(文件)
动画片段,就是动画文件,记录了每一帧的信息,Unity内可以制作动画,但是从其他建模类软件导入的情况也比较多(尤其是3D动画)
2D动画也分为帧动画和骨骼动画
帧动画就是通过切换图片形成动画
而骨骼是通过旋转、缩放、移动关节点进行变化的动画
动画事件
1.在Animation窗口对AnimationClip添加事件
2.选择Animator所在游戏物体的某个脚本函数(必须是公开方法)
常见组件
Transform组件
任何物体身上都有一个transform属性,代表所在的GameObject上的Transform组件。
2D物理系统
碰撞体
决定物理单位的形状,是矩形,还是圆形,或者说自定义的多边形
刚体
物理单位的物理特性,也就是定义物理单位怎样受到物理的控制,如重力等等
事件
碰撞事件:当两个物理单位相撞时会调用的逻辑
触发事件:当两个物理单位其中一个碰撞体设置为触发器时调用的逻辑
主要属性
position:坐标
rotation:旋转 四元数格式
eulerAngles:旋转 欧拉角格式
localScale:缩放
其中position、eulerAngles、localScale都可用 Vector3三维向量 类型表示
localPosition、localRotation、localEulerAngles:是相对父物体的坐标与旋转
parent:父物体的transform
childCount:子物体的数量
root:自身的根节点(父的父的父到最上层)
主要行为
GetChild:获取第X个子物体
SetParent:设置自身为某个游戏物体的子物体
Find:查找子物体,参数是路径,填写方式类似文件夹”A/B/C”
Translate(Vector3 translation, Spave relativeTo):移动
其中translation为位移的量,relativeTo指基于什么坐标空间移动(World:世界坐标,Self:自身朝向)
SpriteRender
Sprite
Sprite “精灵图” 一词首次作为图形术语出现,是在德州仪器的9918(A)视频显示处理器上。使用“精灵图”作为术语,是因为精灵图并不是帧缓冲中位图数据的一部分,而是“悬浮”于帧缓冲中数据之上,不影响其中数据,就像精灵飘在上面一样。^^
在Unity中:png/jpg等常规图片,一般不在Unity中直接使用,而是转为Sprite
SpriteRender为用来渲染Sprite的渲染器
属性 | 功能 |
---|---|
Sprite | 定义该组件应渲染的精灵纹理。单击右侧的小圆点可打开对象选择器窗口,然后从可用精灵资源列表中进行选择。 |
Color | 定义精灵的顶点颜色,用于对精灵的图像进行着色或重新着色。使用拾色器设置渲染的精灵纹理的顶点颜色。请参阅此表下方的颜色部分以查看示例。 |
Flip | 沿选定的轴翻转精灵纹理。这不会翻转游戏对象的变换位置。 |
Sorting Layer | 设置精灵的排序图层 (Sorting Layer),此图层用于控制渲染期间的精灵优先级。从下拉框中选择现有的排序图层,或创建新的排序图层。 |
Order In Layer | 设置精灵在其排序图层中的渲染优先级。首先渲染编号较低的精灵,编号较高的精灵叠加在前者之上。 |
Sprite Sort Point | 在计算精灵和摄像机之间的距离时,在精灵中心 (Center) 或其轴心点 (Pivot Point) 之间进行选择。 |
注:scale中x值改为相反数等于x轴翻转
音频系统
AudioClip
常见的音频格式Unity都支持,在Unity内都被包装为AudioClip类型
AudioListener
没有任何可以设置属性的,其代表音频的接受者,也就是听见声音的地方,因为声音是可以有空间感的,所以这个组件一般在相机上,这样声音结合画面符合玩家的体验。
AudioSource
音频源头,也就是发生声音的组件
- Audio Clip:要播放的音频文件
- Mute:是否静音
- Play On Awake:在启动时是否立刻播放,如果禁用则脚本中使用Play()函数进行播放
- Loop:是否循环播放
- Volume:音量
- Spatial Blend:3D引擎对声音的影响,如果0则是完全的2D音效,1则是3D音效,也就是声音是否具有空间感。