Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start)...

40
Unity优化建议 赵可新

Transcript of Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start)...

Page 1: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

Unity优化建议

赵可新

Page 2: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

网名:四角钱

QQ:3122828

微博:@unity3

Skype:Minevr

博客:http://www.1vr.cn

论坛:http://www.iu3d.com

邮箱:[email protected]

现就职于北京领钧技术有限公司Unity部

自我介绍

Page 3: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

演讲内容

• Unity脚本系统的优化

• Unity在移动设备的中文输入

• Unity保存"运行时"的调整

• UnityGUI的优化建议和使用

Page 4: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

Unity脚本系统的优化

Page 5: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

了解哪些UnityAPI函数比较耗时

• 避免每帧都调用较耗时的API

Page 6: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

避免每帧重复调用耗时API

• 多使用var定义GameObject

• 尽量少使用寻找物体命令,如Find,FindObjectOfType,FindGameObje

ctsWithTag

• 尽量让寻找命令仅执行一次,如放在Start

中.

Page 7: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

了解哪些UnityAPI函数比较耗时

• 避免每帧都调用较耗时的API

• 避免使用射线Ray投射

Page 8: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

少用射线Ray检测

• 射线Ray检测较多三角面的物体需要较多的时间.

• 不要在每帧中使用太多次射线检测.

• 使用裁切蒙版(CullingMask)排除不需要射线检测的物体.

• 条件允许的情况下每三帧做一次射线检测.

Page 9: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

了解哪些UnityAPI函数比较耗时

• 避免每帧都调用较耗时的API

• 避免使用射线Ray投射

• 了解脚本执行的顺序,按需优化

Page 10: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

脚本执行顺序

• 唤醒(Awake)

• 开始(Start)

• 固定刷新(FixedUpdate)

• 模拟物理(Physics)

• 触发器的进入,离开等(Trigger)

• 碰撞器的进入,离开等(Collision)

• 刚体的Transform的位置和旋转的处理(Rigibody)

• 鼠标按下,抬起等事件(OnMouse)

• 刷新(Update)

• 骨骼动画的融合处理等(Animations Blend)

• 最后刷新(LateUpdate)

• 渲染(Rendering)

任何一个脚本是按照这样的顺序执行的

Page 11: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

了解哪些UnityAPI函数比较耗时

• 避免每帧都调用较耗时的API

• 避免使用射线Ray投射

• 了解脚本执行的顺序,按需优化

• 只在需要时执行物体上的脚本

Page 12: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

按需执行

• 仅在需要的时候执行脚本

• 尽量不要每帧都执行无意义的脚本

• 如要检测一个敌人是否靠近,可以用触发器

(OnTriggerEnter/Exit)或者每五秒检测一次.

Page 13: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

Unity在移动设备的中文输入

Page 14: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

中文输入问题

• 目前只能通过导入字体实现动态中文.

• 字体在Unity中以类似贴图形式存在.

• 因移动设备硬件限制,所以要精简字体.

Page 15: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

名字 城市名称

名字+城市+数字 纯字母和数字

按需求确定精简字库方向

Page 16: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

字体源样式

新的字体保存

需要的字符列表

字体编码

FontSubsetGUI字体精简工具

Page 17: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

确定需要的字库内容

将所有可能用到的中文字符,不要遗漏的标点,空格等

等.

Page 18: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

生成精简字库

Page 19: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

将动态字符设置成双字节字符

Unity中字体导入设置

Page 20: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

建议保持在1024 X 1024px以内

精简后的字体纹理

Page 21: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

精简字体与使用过程演示

QuickTime?and aH.264 decompressor

are needed to see this picture.

Page 22: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

http://115.com/file/bht1x1j7

FontSubsetGUI:

相关下载

Page 23: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

保存Unity"运行时"进行的调整

Page 24: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

保存Unity"运行时"进行的调整

•在”Play”状态下的一些修改操作是不予保存的.

•如物体的移动,缩放,旋转,添加或移除组件等等.

•个别的除外,如修改GUI Skin,更改材质球.

Page 25: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

如何才能选择性的保存运行时更改呢?

常用拖拽为预设(Prefab)的方法

Page 26: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

运行状态下将要保存的修改拖拽到Project视图中

拖拽为预设Prefab

Page 27: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

•游戏停止运行后,Unity会自动撤销做的修改

•预设Prefab不会丢失,但它不会与场景中有关联.

•按住Option(alt)键,拖拽预设回场景中的源对象.

•层次面板中的源对象名变为蓝色.

•如需恢复位移,缩放等操作,可将预设做为新对象使用.

恢复运行时的更改

Page 28: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

保存运行时的修改操作演示

QuickTime?and aH.264 decompressor

are needed to see this picture.

Page 29: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

Unity大场景优化与切换

Page 30: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

大场景的优化

•精简模型,减少模型个数.

Page 31: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

精简模型 优化个数

•尽可能的精简模型的面数.

•整合模型,优化模型单体个数.

•间隔太远的模型不要整合.

•用动态整合(Dynamic Batching).

•用静态整合(Static Batching).

Page 32: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

大场景的优化

•精简模型,减少模型个数.

•优化贴图,优化材质

Page 33: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

优化贴图材质

•不失细节的条件下的贴图最小化.

•将多个小贴图整合为整张大贴图.

•减少材质球个数,多共用材质球.

Page 34: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

大场景的优化

•精简模型,减少模型个数.

•优化贴图,优化材质

•每个顶点权重(Bone weight)仅用一根Bone.

•减少UnityGUI的使用.

•使用Mobile版Shader.

Page 35: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

大场景间的载入

•避免iOS启动程序超时.

•大场景间的切换增加中间过渡场景.

•使用异步加载Application.LoadLevelAsync().

Page 36: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

中间场景及异步加载演示

QuickTime?and aH.264 decompressor

are needed to see this picture.

Page 37: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

UnityGUI的优化建议和使用

Page 38: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

UnityGUI建议

•UI图片推荐使用*.psd格式.

•尽量不要合并和转换图层.

•用切片工具(SliceTool)取图片位置尺寸

•将GUI合理成组(GUI.BeginGroup).

Page 39: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)

快速创建游戏GUI演示

QuickTime?and aH.264 decompressor

are needed to see this picture.

Page 40: Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start) •固定刷新(FixedUpdate) •模拟物理(Physics) •触发器的进入,离开等(Trigger)