Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Его производительность тоже рассмотрена в статье
проверка _cachedTransform == null в Awake()
если использовать кешированную переменную в классах-наследниках, потому что дергание свойства — это по сути вызов метода с вложенными проверками, которые можно убрать.
GetComponent<T>() в Unity5 настолько быcтрый, что значительно быстрее получения из словаря. Может, разница настолько мала, что нету смысла стараться писать всякие ужасные конструкции и остановится на лаконичности и надежности кода и оптимизировать другие вещи? Тем более, что ни один из более быстрых способов не проверяет компонент на существование.Для WebGL цифры из профайлера довольно странные, на 1000 вызов тестовых методов c 0% занимает 0.00 ms,
loop {
start = now();
GetComponent(Class);
sum = now() - start();
}
perfomance.now(), а Date.now(), то все, что меньше миллисекунды в целом будет считаться как 0.class XUtils
{
// . . .
public enum AccessPolicy {
JustFind,
ShouldExist,
CreateIfNo,
ShouldBeCreated
}
public static T_Type getComponent<T_Type>(GameObject inGameObject,
AccessPolicy inComponentAccessPolicy = AccessPolicy.JustFind)
where T_Type : Component
{
T_Type theComponent = inGameObject.GetComponent<T_Type>();
if (theComponent) {
check(AccessPolicy.ShouldBeCreated != inComponentAccessPolicy);
} else {
switch(inComponentAccessPolicy) {
case AccessPolicy.CreateIfNo:
case AccessPolicy.ShouldBeCreated:
theComponent = inGameObject.AddComponent<T_Type>();
break;
case AccessPolicy.ShouldExist:
check(false);
break;
}
}
return theComponent;
}
// . . .
}
private void Awake() {
//. . .
rigidBody = XUtils.getComponent<RigidBody2D>(
this, XUtils.AccessPolicy.ShouldExist
);
//. . .
}
Особенности кэширования компонентов в Unity3D