Unity3D虽然是强大的游戏工具,但没有优化,也会做得不好,下有个简单的实验可以说明为什么需要优化。
这里的方法之一只是简单地将对象缓存起来,但缓存与否性能还真是天壤之别。
场景里面只下面的基本物件
Main Camera
Directional light
我们要做的事情是设置Directional light属性1000次,下面分别做了3次实验:No Cache,Partial Cache,Full Cache,我们把脚本分别挂在Main Camera上面。
No Cache
using UnityEngine;
public class NoCaching : MonoBehaviour
{
void Start()
{
}
void Update()
{
for(int i = 0;i<1000;i++)
{
GameObject.Find("Directional light").GetComponent<Light>().intensity = 1;
}
}
}
Partial Cache
using UnityEngine;
public class PartialCaching : MonoBehaviour
{
private GameObject directionalLight;
void Start()
{
directionalLight = GameObject.Find("Directional light");
}
void Update()
{
for (int i = 0; i < 1000; i++)
{
directionalLight.GetComponent<Light>().intensity = 1;
}
}
}
Full Cache
using UnityEngine;
public class FullCaching : MonoBehaviour {
private Light directionalLight;
void Start()
{
directionalLight = GameObject.Find("Directional light").GetComponent<Light>();
}
void Update()
{
for (int i = 0; i < 1000; i++)
{
directionalLight.intensity = 1;
}
}
}
总结
缓存方式 | CPU |
---|---|
No Cache | 30.5% |
Partial Cache | 1.3% |
Full Cache | 1.0% |