Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start)...
Transcript of Unity优化建议 - CSDN Zhao.pdf脚本执行顺序 •唤醒(Awake) •开始(Start)...
Unity优化建议
赵可新
网名:四角钱
QQ:3122828
微博:@unity3
Skype:Minevr
博客:http://www.1vr.cn
论坛:http://www.iu3d.com
现就职于北京领钧技术有限公司Unity部
自我介绍
演讲内容
• Unity脚本系统的优化
• Unity在移动设备的中文输入
• Unity保存"运行时"的调整
• UnityGUI的优化建议和使用
Unity脚本系统的优化
了解哪些UnityAPI函数比较耗时
• 避免每帧都调用较耗时的API
避免每帧重复调用耗时API
• 多使用var定义GameObject
• 尽量少使用寻找物体命令,如Find,FindObjectOfType,FindGameObje
ctsWithTag
• 尽量让寻找命令仅执行一次,如放在Start
中.
了解哪些UnityAPI函数比较耗时
• 避免每帧都调用较耗时的API
• 避免使用射线Ray投射
少用射线Ray检测
• 射线Ray检测较多三角面的物体需要较多的时间.
• 不要在每帧中使用太多次射线检测.
• 使用裁切蒙版(CullingMask)排除不需要射线检测的物体.
• 条件允许的情况下每三帧做一次射线检测.
了解哪些UnityAPI函数比较耗时
• 避免每帧都调用较耗时的API
• 避免使用射线Ray投射
• 了解脚本执行的顺序,按需优化
脚本执行顺序
• 唤醒(Awake)
• 开始(Start)
• 固定刷新(FixedUpdate)
• 模拟物理(Physics)
• 触发器的进入,离开等(Trigger)
• 碰撞器的进入,离开等(Collision)
• 刚体的Transform的位置和旋转的处理(Rigibody)
• 鼠标按下,抬起等事件(OnMouse)
• 刷新(Update)
• 骨骼动画的融合处理等(Animations Blend)
• 最后刷新(LateUpdate)
• 渲染(Rendering)
任何一个脚本是按照这样的顺序执行的
了解哪些UnityAPI函数比较耗时
• 避免每帧都调用较耗时的API
• 避免使用射线Ray投射
• 了解脚本执行的顺序,按需优化
• 只在需要时执行物体上的脚本
按需执行
• 仅在需要的时候执行脚本
• 尽量不要每帧都执行无意义的脚本
• 如要检测一个敌人是否靠近,可以用触发器
(OnTriggerEnter/Exit)或者每五秒检测一次.
Unity在移动设备的中文输入
中文输入问题
• 目前只能通过导入字体实现动态中文.
• 字体在Unity中以类似贴图形式存在.
• 因移动设备硬件限制,所以要精简字体.
名字 城市名称
名字+城市+数字 纯字母和数字
按需求确定精简字库方向
字体源样式
新的字体保存
需要的字符列表
字体编码
FontSubsetGUI字体精简工具
确定需要的字库内容
将所有可能用到的中文字符,不要遗漏的标点,空格等
等.
生成精简字库
将动态字符设置成双字节字符
Unity中字体导入设置
建议保持在1024 X 1024px以内
精简后的字体纹理
精简字体与使用过程演示
QuickTime?and aH.264 decompressor
are needed to see this picture.
http://115.com/file/bht1x1j7
FontSubsetGUI:
相关下载
保存Unity"运行时"进行的调整
保存Unity"运行时"进行的调整
•在”Play”状态下的一些修改操作是不予保存的.
•如物体的移动,缩放,旋转,添加或移除组件等等.
•个别的除外,如修改GUI Skin,更改材质球.
如何才能选择性的保存运行时更改呢?
常用拖拽为预设(Prefab)的方法
运行状态下将要保存的修改拖拽到Project视图中
拖拽为预设Prefab
•游戏停止运行后,Unity会自动撤销做的修改
•预设Prefab不会丢失,但它不会与场景中有关联.
•按住Option(alt)键,拖拽预设回场景中的源对象.
•层次面板中的源对象名变为蓝色.
•如需恢复位移,缩放等操作,可将预设做为新对象使用.
恢复运行时的更改
保存运行时的修改操作演示
QuickTime?and aH.264 decompressor
are needed to see this picture.
Unity大场景优化与切换
大场景的优化
•精简模型,减少模型个数.
精简模型 优化个数
•尽可能的精简模型的面数.
•整合模型,优化模型单体个数.
•间隔太远的模型不要整合.
•用动态整合(Dynamic Batching).
•用静态整合(Static Batching).
大场景的优化
•精简模型,减少模型个数.
•优化贴图,优化材质
优化贴图材质
•不失细节的条件下的贴图最小化.
•将多个小贴图整合为整张大贴图.
•减少材质球个数,多共用材质球.
大场景的优化
•精简模型,减少模型个数.
•优化贴图,优化材质
•每个顶点权重(Bone weight)仅用一根Bone.
•减少UnityGUI的使用.
•使用Mobile版Shader.
大场景间的载入
•避免iOS启动程序超时.
•大场景间的切换增加中间过渡场景.
•使用异步加载Application.LoadLevelAsync().
中间场景及异步加载演示
QuickTime?and aH.264 decompressor
are needed to see this picture.
UnityGUI的优化建议和使用
UnityGUI建议
•UI图片推荐使用*.psd格式.
•尽量不要合并和转换图层.
•用切片工具(SliceTool)取图片位置尺寸
•将GUI合理成组(GUI.BeginGroup).
快速创建游戏GUI演示
QuickTime?and aH.264 decompressor
are needed to see this picture.