总结自麦子学院Unity性能优化教程。文末附幕布思维导图总结。
我们玩过的游戏中,神优化和渣优化的案例都不胜枚举,它们直接影响着玩家们的游戏体验。这篇文章将从最基础的概念开始,配合实例讲解各种优化的技巧,最终建立起一套属于自己的优化方法,完成对游戏项目的评估和优化工作。
1. 简介
1.什么是性能优化
1.常见的优化类型
1.性能优化 运行效率空间占用
2.流程优化 精简某个功能的流程
3.体验优化 音乐的节奏,背景的渲染,剧情的跌宕起伏
2.性能优化目标
1.游戏流畅运行
1.多种帧数标准 30帧手游 端游60帧
2.避免卡顿 加载大场景,玩家数量增多,怪物增多2.游戏符合市场需要
1.硬件兼容性 取舍市场占有率小的机型
2.安装包/数据包大小 平台渠道的安装包大小限制(60M)
3.优化常见的误区
- 误区1:我的游戏很简单不需要优化 (性能黑点) 游戏简单是结构玩法简单,不代表不需要进行优化
- 误区2:优化工作尽早进行 优化工作需要在后期进行,针对主要因素,避免为了5%的问题话费95%的时间
- 误区3:性能优化=Debug 性能优化的前提是解决所有的代码错误
4.优化的两大原则
- 1.不过早做优化
2.用户不察觉
玩家不一定能发现欠优化的地方 玩家感觉不出来的地方
玩家不一定能发现优化欠佳的地方 优化后玩家也感觉不到差别的地方
5.所有游戏都需要优化吗?
- 性能完美是我们追求的目标
- 不同类型的游戏对优化的侧重点不一样
- 优化工作会占生命周期非常大的一部分
2. Profiler
这里要多查看 官网的API 在Manual 里面搜索 Profiler
Unity3d-Window-Profiler 打开方式。
这个只能是性能评估工具,不是优化工具。
观察Profiler 窗口 测试代码:
using UnityEngine;
using System.Collections;
public class BadExampleProfiler : MonoBehaviour {
public GameObject cube;
// Update is called once per frame
void Update () {
Loop ();
}
void Loop()
{
for (int i = 0; i < 100; i++) {
float x = Random.Range (0,360f);
float y = Random.Range (0,360f);
float z = Random.Range (0,360f);
Vector3 randomVector = new Vector3 (x,y,z);
Object.Instantiate (cube, randomVector, Quaternion.Euler(randomVector));
}
}
}
3.优化的组成部分
脚本
常见的性能黑点(正确的代码放到了错误的地方)底层!!!
1.常规循环 尽量少放在Update
2.变量的隐性调用 go.transform不推荐 (这是一种遍历查找组件的方式) 推荐GetComponent(Transform)(Markdown不支持应该是尖角括号)
3.Gmaeobject.Find 推荐使用Tag查找 保存变量
4.多线程
协程处理,大量循环使用分携程执行,前边添加yield return设置执行顺序
IEnumerator Work()
{
//线程不安全
//StartCoroutine(MyIoWork1());
//StartCoroutine(MyIoWork2());
yield return StartCoroutine(MyIoWork1());
yield return StartCoroutine(MyIoWork2());
}
IEnumerator MyIoWork1()
{
for (int i = 0; i < 1000; i++)
{
System.IO.File.Delete("c:\a.zip");
yield return null;
}
}
IEnumerator MyIoWork2()
{
for (int i = 0; i < 1000; i++)
{
System.IO.File.Delete("c:\a.zip");
yield return null;
}
}
数学 合理降低计算的精度

本文从基础概念出发,详细介绍了Unity性能优化的重要性、常见误区和两大原则。通过Profiler工具进行性能评估,深入探讨脚本、数学计算、Object Pool、图形、文件等方面的优化策略,旨在帮助开发者建立自己的优化方法,提升游戏流畅性和市场适应性。
最低0.47元/天 解锁文章
8万+





