Как оптимизировать разворот объекта в полете?
Я разворачиваю стрелу в полете вот таким скриптом:
void FixedUpdate ()
{
for (int i = 0; i < transform.childCount ; i++)
{
Vector3 vel = transform.GetChild(i).GetComponent<Rigidbody2D>().velocity;
float angleZ = Mathf.Atan2(vel.y, vel.x) * Mathf.Rad2Deg;
float angleY = Mathf.Atan2(vel.z, vel.x) * Mathf.Rad2Deg;
transform.GetChild(i).transform.eulerAngles = new Vector3(0, -angleY, angleZ);
}
}
Проблема в том, что когда стрел слишком много все начитает тормозить.
Можно как-то добиться того же результата, но при этом с меньшими затратами производительности?
Ответы (1 шт):
Автор решения: Yaroslav
→ Ссылка
Слишком много это сколько?
Не запрашивать лишний раз GetComponent с transform (что есть тот-же GetComponent) и кешировать ссылки на них.
private Transform _transform;
private int _childCount;
private Transform[] _childTransform;
private Rigidbody2D[] _childBody;
private void Awake () {
_transform = transform;
}
private void FixedUpdate () {
if (_transform.childCount != _childCount)
UpdateChildArray();
for (int i = 0; i < _childCount; i++) {
Vector3 vel = _childBody[i].velocity;
float angleZ = Mathf.Atan2(vel.y, vel.x)*Mathf.Rad2Deg;
float angleY = Mathf.Atan2(vel.z, vel.x)*Mathf.Rad2Deg;
_childTransform[i].eulerAngles = new Vector3(0, -angleY, angleZ);
}
}
private void UpdateChildArray () {
_childCount = _transform.childCount;
_childTransform = new Transform[_childCount];
_childBody = new Rigidbody2D[_childCount];
for (int i = 0; i < _childCount; i++) {
_childTransform[i] = _transform.GetChild(i);
_childBody[i] = _childTransform[i].GetComponent<Rigidbody2D>();
}
}