測試方式:
每個對象做大範圍正弦移動,建立1000-5000個對象,保證場景分割樹的實時更新,并測試幀率
測試腳本:
移動腳本:
using UnityEngine;
using System.Collections;
public class Test1 : MonoBehaviour
{
public Rigidbody rigidbodyObj;
void FixedUpdate()
{
switch (Random.Range(0, 3))
{
case 0:
transform.position = Vector3.forward * Mathf.Sin(Time.time * 180) * 180;
//rigidbodyObj.position = Vector3.forward * Mathf.Sin(Time.time * 180) * 180;
break;
case 1:
transform.position = Vector3.left * Mathf.Sin(Time.time * 180) * 180;
//rigidbodyObj.position = Vector3.left * Mathf.Sin(Time.time * 180) * 180;
break;
case 2:
transform.position = Vector3.right * Mathf.Sin(Time.time * 180) * 180;
//rigidbodyObj.position = Vector3.right * Mathf.Sin(Time.time * 180) * 180;
break;
}
}
}
View Code
生成器腳本:
using UnityEngine;
using System.Collections;
public class Test2 : MonoBehaviour
{
public int count = 10000;
public GameObject template;
void Awake()
{
for (int i = 0; i < count; i++)
{
var go = Instantiate(template);
go.transform.position = Random.insideUnitSphere * 10f;
}
}
}
測試結果:
i5的配置下
500個動力學打開的剛體Collider已經小于20fps,使用Rigidbody.position移動和使用Transform.position移動差别不大。而且500個打開了重力的剛體Collider僅有3fps
1萬個非剛體Collider可以達到30-35fps,并且和是否開關Trigger無關。由于非剛體Collider是被動觸發,我還測試了下沒有Collider的情況,似乎幀率是快了1-2fps并且相對穩定,也可能是錯覺。