Editori personalizați

Pentru a accelera dezvoltarea aplicațiilor, creați editori personalizați pentru componentele pe care le utilizați în mod obișnuit. Această pagină vă arată cum să creați un script simplu pentru a crea GameObjectsObiectul fundamental în scenele Unity, care poate reprezenta personaje, recuzită, decoruri, camere, puncte de reper și multe altele. Funcționalitatea unui GameObject este definită de componentele atașate acestuia. Mai multe informații
Vezi în Glosar să te uiți întotdeauna la un punct.

  1. Creați un script C# și numiți-l „”LookAtPoint”.
  2. Deschideți scriptul și înlocuiți conținutul său cu codul de mai jos.
  3. Ajustați scriptul la un GameObject din scena dumneavoastrăO scenă conține mediile și meniurile jocului dumneavoastră. Gândiți-vă la fiecare fișier Scene unic ca la un nivel unic. În fiecare Scenă, plasați mediile, obstacolele și decorațiunile, în esență proiectând și construind jocul dumneavoastră pe bucăți. Mai multe informații
    Vezi în Glosar.
//C# Example (LookAtPoint.cs)using UnityEngine;public class LookAtPoint : MonoBehaviour{ public Vector3 lookAtPoint = Vector3.zero; void Update() { transform.LookAt(lookAtPoint); }}

Când intrați în modul Play, GameObject-ul la care ați atașat scriptul se orientează acum spre coordonatele pe care le-ați setat în proprietatea „Look At Point”. Când scrieți scripturi de editorO bucată de cod care vă permite să vă creați propriile Componente, să declanșați evenimente de joc, să modificați proprietățile Componentelor în timp și să răspundeți la intrările utilizatorului în orice mod doriți. Mai multe informații
Vezi în Glosar, este adesea util să faci ca anumite scripturi să se execute în timpul modului Editare, în timp ce aplicația ta nu rulează. Pentru a face acest lucru, adăugați atributul ExecuteInEditMode la clasă, astfel:

//C# Example (LookAtPoint.cs)using UnityEngine;public class LookAtPoint : MonoBehaviour{ public Vector3 lookAtPoint = Vector3.zero; void Update() { transform.LookAt(lookAtPoint); }}

Acum, dacă mutați GameObject-ul în Editor, sau modificați valorile „Look At Point” în InspectorO fereastră Unity care afișează informații despre GameObject-ul, activul sau setările proiectului selectat în acel moment, permițându-vă să inspectați și să editați valorile. Mai multe informații
Vezi în Glosar, GameObject-ul își actualizează rotația astfel încât să se uite la punctul țintă din spațiul mondial.

Crearea unui editor personalizat

Cele de mai sus demonstrează cum puteți face să ruleze scripturi simple în timpul editării, însă numai acest lucru nu vă permite să vă creați propriile instrumente de editor. Următorul pas este să creați un Custom Editor pentru scriptul pe care tocmai l-ați creat.

Când creați un script în Unity, în mod implicit acesta moștenește din MonoBehaviour și, prin urmare, este o componentă pe care o puteți atașa unui GameObject. Atunci când plasați o componentă pe un GameObject, inspectorul afișează o interfață implicită pe care o puteți utiliza pentru a vizualiza și edita fiecare variabilă publică, de exemplu: un întreg, un float sau un șir de caractere.

Acesta este modul în care arată în mod implicit inspectorul pentru componenta LookAtPoint:

Un inspector implicit cu un câmp public Vector3

Un editor personalizat este un script separat care înlocuiește acest aspect implicit cu orice controale de editor pe care le alegeți.

Pentru a crea editorul personalizat pentru scriptul LookAtPoint:

  1. Creați un nou script C# și numiți-l „LookAtPointEditor”.
  2. Deschideți scriptul și înlocuiți conținutul său cu codul de mai jos.
//C# Example (LookAtPointEditor.cs)using UnityEngine;using UnityEditor;public class LookAtPointEditor : Editor { SerializedProperty lookAtPoint; void OnEnable() { lookAtPoint = serializedObject.FindProperty("lookAtPoint"); } public override void OnInspectorGUI() { serializedObject.Update(); EditorGUILayout.PropertyField(lookAtPoint); serializedObject.ApplyModifiedProperties(); }}

Această clasă trebuie să moștenească din Editor. Atributul CustomEditor informează Unity pentru care componentă trebuie să acționeze ca editor. Atributul CanEditMultipleObjects îi spune lui Unity că puteți selecta mai multe obiecte cu acest editor și le puteți modifica pe toate în același timp.

Unity execută codul din OnInspectorGUI acesta afișează editorul în Inspector. Puteți pune orice cod GUI aici și acesta funcționează în același mod ca și OnGUI, dar se execută în interiorul Inspectorului. Editor definește proprietatea țintă pe care o puteți utiliza pentru a accesa GameObject-ul pe care îl inspectați.

Acesta este modul în care arată Inspectorul pentru componenta LookAtPoint cu noul editor:

Acesta arată foarte asemănător (deși câmpul „Script” nu este acum prezent, deoarece scriptul editorului nu adaugă niciun cod Inspector pentru a-l afișa).

Cu toate acestea, acum că aveți controlul asupra modului în care Inspectorul se afișează într-un script de editor, puteți utiliza orice cod doriți pentru a aranja câmpurile Inspectorului, pentru a permite utilizatorului să ajusteze valorile și chiar să afișeze grafice sau alte elemente vizuale. De fapt, toți inspectorii pe care îi vedeți în Unity Editor, inclusiv inspectorii mai complecși, cum ar fi terenulPeisajul din scena dumneavoastră. Un GameObject Terrain adaugă un plan plat de mari dimensiuni la scena dumneavoastră și puteți utiliza fereastra de inspecție a terenului pentru a crea un peisaj detaliat. Mai multe informații
Vezi în Glosar setările de sistem și de import al animațiilor, sunt toate realizate cu ajutorul aceluiași API la care aveți acces atunci când vă creați propriii Editori personalizați.

Iată un exemplu simplu care extinde scriptul editorului dumneavoastră pentru a afișa un mesaj care indică dacă punctul țintă este deasupra sau sub GameObject:

//C# Example (LookAtPointEditor.cs)using UnityEngine;using UnityEditor;public class LookAtPointEditor : Editor{ SerializedProperty lookAtPoint; void OnEnable() { lookAtPoint = serializedObject.FindProperty("lookAtPoint"); } public override void OnInspectorGUI() { serializedObject.Update(); EditorGUILayout.PropertyField(lookAtPoint); serializedObject.ApplyModifiedProperties(); if (lookAtPoint.vector3Value.y > (target as LookAtPoint).transform.position.y) { EditorGUILayout.LabelField("(Above this object)"); } if (lookAtPoint.vector3Value.y < (target as LookAtPoint).transform.position.y) { EditorGUILayout.LabelField("(Below this object)"); } }}

Acesta este modul în care arată Inspectorul pentru componenta LookAtPoint cu mesajul care arată dacă punctul țintă este deasupra sau sub GameObject.

Aveți acces complet la toate comenzile IMGUI pentru a desena orice tip de interfață, inclusiv redareaProcesul de desenare a graficii pe ecran (sau pe o textură de redare). În mod implicit, camera principală din Unity își redă vederea pe ecran. Mai multe informații
Vezi în Glosar Scene care utilizează o camerăO componentă care creează o imagine a unui anumit punct de vedere din scena dumneavoastră. Rezultatul este fie desenat pe ecran, fie capturat ca textură. Mai multe informații
A se vedea în Glosar în cadrul ferestrelor Editorului.

Scene View Additions

Puteți adăuga cod suplimentar la Scene ViewO vedere interactivă în lumea pe care o creați. Folosiți Scene View pentru a selecta și poziționa decorul, personajele, camerele, luminile și toate celelalte tipuri de obiecte de joc. Mai multe informații
Vezi în Glosar. Pentru a face acest lucru, implementați OnSceneGUI în editorul dvs. personalizat.

OnSceneGUI funcționează la fel ca OnInspectorGUI, cu excepția faptului că se execută în vizualizarea Scenei. Pentru a vă ajuta să vă realizați propriile controale de editare, puteți utiliza funcțiile definite în clasa Handles. Toate funcțiile de acolo sunt concepute pentru a lucra în vizualizările Scene 3D.

//C# Example (LookAtPointEditor.cs)using UnityEngine;using UnityEditor;public class LookAtPointEditor : Editor{ SerializedProperty lookAtPoint; void OnEnable() { lookAtPoint = serializedObject.FindProperty("lookAtPoint"); } public override void OnInspectorGUI() { serializedObject.Update(); EditorGUILayout.PropertyField(lookAtPoint); if (lookAtPoint.vector3Value.y > (target as LookAtPoint).transform.position.y) { EditorGUILayout.LabelField("(Above this object)"); } if (lookAtPoint.vector3Value.y < (target as LookAtPoint).transform.position.y) { EditorGUILayout.LabelField("(Below this object)"); } serializedObject.ApplyModifiedProperties(); } public void OnSceneGUI() { var t = (target as LookAtPoint); EditorGUI.BeginChangeCheck(); Vector3 pos = Handles.PositionHandle(t.lookAtPoint, Quaternion.identity); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(target, "Move point"); t.lookAtPoint = pos; t.Update(); } }}

Dacă doriți să adăugați obiecte GUI 2D (de exemplu: GUI sau EditorGUI), trebuie să le înfășurați în apeluri la Handles.BeginGUI() și Handles.EndGUI().

.

Lasă un răspuns

Adresa ta de email nu va fi publicată.