Unity推出的DOTS技术,通过ECS架构来提高CPU的缓冲命中率,Job System提供方便的多线程代码编写,Burst Compiler编译生成高性能代码。
下面我们分别用普通的方式和DOTS的方式来实现10000个运动的Cube同屏渲染的例子来看下其性能区别。
1. 先创建OPPMoveScript.cs来实现Cube的随机旋转和移动:
1 using UnityEngine; 2 3 public class OPPMoveScript : MonoBehaviour 4 { 5 private Vector3 _rotateSpeed; 6 private Vector3 _moveSpeed; 7 private float _moveDistance; 8 9 private Vector3 _origin; 10 private float _distanceSqr; 11 12 void Start() 13 { 14 _rotateSpeed.x = Random.value * 360; 15 _rotateSpeed.y = Random.value * 360; 16 _rotateSpeed.z = Random.value * 360; 17 18 _moveSpeed.x = Random.Range(0.5f, 1f); 19 _moveSpeed.z = Random.Range(0.5f, 1f); 20 _moveSpeed.y = Random.Range(0.5f, 1f); 21 22 _moveDistance = Random.Range(0.5f, 1f) * 5; 23 24 _origin = transform.position; 25 _distanceSqr = _moveDistance * _moveDistance; 26 } 27 28 void Update() 29 { 30 transform.Rotate(_rotateSpeed * Time.deltaTime); 31 transform.Translate(_moveSpeed * Time.deltaTime); 32 33 if (Vector3.SqrMagnitude(transform.position - _origin) > _distanceSqr) 34 { 35 _moveSpeed = -_moveSpeed; 36 } 37 } 38 }