Ред на събитията в Unity3d

Update

Събитията в Unity3D са разделени на три големи групи:

- Събития, задействани от събития масло масло (зареждане на сцена, изход от потребителя) Тази група събития се извършва нередовно

-Събития, извиквани при изчертаване на кадър В този случай всички използвани скриптове се извикват в цикъла на изчертаване на екрана, което означава, че те ще повлияят директно на FPS (кадри в секунда). Ето защо тук трябва да бъдете много внимателни, когато работите с функции, които изискват много време за обработка.

-Събития, задействани при изчисляване на физиката И последната група. За изчисляване на физиката се създава отделна независима нишка, в която събитията се извикват с определен интервал от време. Размерът на този интервал може да се регулира в елемента от менюто: Редактиране -> Настройки на проекта -> Време -> фиксирана времева стъпка.

Познавайки тази разбивка, вече можете да вземате решения къде да поставите кой код. Въпреки това, всички изчисления, направени както във физиката, така и в изобразяването, ще повлияят на отзивчивостта на играта. Следователно, когато се разработва приложение, е желателно да се организират най-ресурсоемките изчисления в съпрограмми.

Сега нека преминем директно към превода на раздела за помощ.

Ред на изпълнение на функциите за събитияВ Unity3D има редица събития, които се изпълняват в определен ред. Ние описваме тази поръчка по-долу:

Първо зареждане на сценаТези функции се извикват, когато сцената започне (веднъж за всеки обект в рамката).

Awake:Тази функция винаги се извиква преди началото на която и да е функция и веднага след инициализиране на prefab.OnEnable:(извиква се, ако обектът е активен): Тази функция се извиква само следкак ще бъде включен обектът.

Преди първото опресняване на кадъра

Старт:се извиква преди изчертаването на първия кадър, само ако скриптът е дефиниран.

Между кадрите

OnApplicationPause:Това събитие се задейства в края на рамка, когато бъде открита пауза, ефективно между нормалните актуализации на рамката. След OnApplicationPause се изчертава една допълнителна рамка, за да покаже прозореца, който се показва по време на паузата.

Ред на актуализиранеЗа да следите логиката на играта, взаимодействието и анимацията на обектите, позицията на камерата и т.н., има няколко различни събития, които можете да използвате. Общият механизъм за извършване на повечето неща е във функцията Update(), но има и други функции.

FixedUpdate:FixedUpdate() не зависи от Update() и може да се извиква по-често или по-рядко (обикновено се извиква по-рядко, ако FPS е достатъчно висок). Това събитие може да се задейства няколко пъти на кадър, ако FPS е нисък, или може изобщо да не се задейства между кадрите, ако FPS е висок. Всички изчисления и актуализации на физиката на двигателя се извършват веднага след FixedUpdate(). Когато прилагате изчисления на движение във FixedUpdate(), не е необходимо да умножавате стойността си по Time.deltaTime. Това е така, защото FixedUpdate() се извиква от независим от кадровата честота таймер.Актуализация:Update() се извиква веднъж на кадър. Това е основното събитие за изчертаване на рамка.LateUpdate:LateUpdate() се извиква веднъж на кадър, след като Update() завърши. Всички изчисления, направени в Update(), ще бъдат завършени, когато се извика LateUpdate(). Основната употреба на LateUpdate() обикновено е проследяване на камера от трета страна. Ако преместите героя си в събитието Update(), тогаваМожете да извършвате движения на камерата и изчисления на нейното местоположение в събитието LateUpdate(). Това ще гарантира, че героят е преминал напълно пред камерата и е осигурил позицията си.

Изобразяване

OnPreCull:Извиква се преди сцената да бъде сглобена на камерата. Монтажът определя кои обекти са видими за камерата. OnPreCull се извиква само ако сцената ще бъде "изрязана" от невидими обекти.OnBecameVisible / OnBecameInvisible:Извиква се, когато даден обект стане видим/невидим за която и да е камера.OnWillRenderObject:Извиква се веднъж на камера, ако обектът е видим.OnPreRender:Извиква се преди камерата да започне да изобразява сценатаOnRenderObject:Извиква се, когато всички обекти в сцената са изобразени. Можете да използвате функциите GL или Graphics.DrawMeshNow, за да създавате вашите рисунки на тази камера.OnPostRender:Извиква се, след като сцената бъде изобразена на камерата.OnRenderImage (само Pro версия):Извиква се след изобразяване на сцената за последваща обработка на изображението на екрана.OnGUI:се извиква няколко пъти на кадър в отговор на събития на интерфейса. Първо се обработват събития за позиция и запълване с цвят, последвани от събития за въвеждане от клавиатура/мишка.OnDrawGizmos:Използва се за рисуване на Gizmo на сцената.

CorosОбикновено съпрограмата се извиква, след като функцията Update() се върне. Съпрограмата е функция, която може да постави на пауза изпълнението (yield), докато не бъде изпълнена. Различни приложения за Coroutines:

yield:съпрограмата ще продължи след всички функции Update(), които се извикват в следващия кадър.yield WaitForSeconds(2):Продължете след указанотовреме на забавяне, когато всички функции Update() вече са извикани в рамкатаyield WaitForFixedUpdate():Продължава, когато всички функции FixedUpdate() вече са извиканиyield WWW:Продължава, когато съдържанието на WWW приключи зареждането.yield StartCoroutine(MyFunc):Свързване на съпрограма, извикването на съпрограма ще изчака MyFunc да завърши.

OnDestroy:Тази функция се извиква за последния кадър от съществуването на обекта (обектът може да бъде унищожен в отговор на Object.Destroy или когато сцената се затвори).

При излизанеТези функции се извикват за всички активни обекти в сцената:

По този начин възниква следният ред на изпълнение на скрипта:

Всички Awake събития Всички стартови събития цикъл (със стъпка в променливата за делта време) -всички функции на FixedUpdate -изпълнение на физически двигател -onEnter/Exit/Stay тригерни събития -събития на сблъсък OnEnter/Exit/Stay Трансформации на твърдо тяло според transform.position и ротация OnMouseDown/OnMouseUp друг вход събития Всички събития() Анимация, смесване и трансформация Всички LateUpdate събития Рендиране

СъветиАко изпълнявате съпрограмми на LateUpdate, те също ще бъдат извикани след LateUpdate точно преди рендиране. Coros се изпълняват след всички функции Update().