Chcete-li urychlit vývoj aplikace, vytvořte si vlastní editory pro běžně používané komponenty. Tato stránka vám ukáže, jak vytvořit jednoduchý skript pro tvorbu GameObjectsZákladní objekt ve scénách Unity, který může představovat postavy, rekvizity, scenérie, kamery, body cesty a další. Funkce objektu GameObject je definována komponentami, které jsou k němu připojeny. Více informací
Podívejte se do slovníčku vždy se podívejte na bod.
- Vytvořte skript v jazyce C# a pojmenujte jej „“LookAtPoint“.
- Otevřete skript a nahraďte jeho obsah níže uvedeným kódem.
- Připojte skript k objektu GameObject ve vaší scéněScéna obsahuje prostředí a nabídky vaší hry. Představte si každý jedinečný soubor Scény jako jedinečnou úroveň. Do každé Scény umisťujete prostředí, překážky a dekorace, v podstatě navrhujete a stavíte hru po částech. Více informací
Viz Slovníček pojmů.
//C# Example (LookAtPoint.cs)using UnityEngine;public class LookAtPoint : MonoBehaviour{ public Vector3 lookAtPoint = Vector3.zero; void Update() { transform.LookAt(lookAtPoint); }}
Při vstupu do režimu hry se nyní objekt hry, ke kterému jste připojili skript, orientuje podle souřadnic, které jste nastavili do vlastnosti „Look At Point“. Při psaní skriptů EditoruKus kódu, který vám umožňuje vytvářet vlastní Komponenty, spouštět herní události, měnit vlastnosti Komponenty v čase a reagovat na vstupy uživatele libovolným způsobem. Více informací
Ve Slovníku pojmů je často užitečné zajistit, aby se určité skripty spouštěly během režimu Editace, zatímco vaše aplikace neběží. Za tímto účelem přidejte do třídy atribut ExecuteInEditMode
, například takto:
//C# Example (LookAtPoint.cs)using UnityEngine;public class LookAtPoint : MonoBehaviour{ public Vector3 lookAtPoint = Vector3.zero; void Update() { transform.LookAt(lookAtPoint); }}
Nyní, pokud přesunete GameObject v Editoru nebo změníte hodnoty „Look At Point“ v InspectoruOkno Unity, které zobrazuje informace o aktuálně vybraném GameObject, asset nebo nastavení projektu a umožňuje kontrolovat a upravovat hodnoty. Více informací
Podle slovníčku pojmů GameObject aktualizuje své natočení tak, aby se díval na cílový bod ve světovém prostoru.
Vytvoření vlastního Editoru
Výše uvedené ukazuje, jak lze během editace spustit jednoduché skripty, to však samo o sobě neumožňuje vytvořit vlastní nástroje Editoru. Dalším krokem je vytvoření Vlastního editoru pro právě vytvořený skript.
Když vytvoříte skript v Unity, ve výchozím nastavení dědí od MonoBehaviour, a je tedy komponentou, kterou můžete připojit ke GameObject. Když umístíte komponentu na objekt GameObject, v inspektoru se zobrazí výchozí rozhraní, které můžete použít k zobrazení a úpravě každé veřejné proměnné, například: integer, float nebo string.
Takto vypadá inspektor komponenty LookAtPoint ve výchozím nastavení:
Vlastní editor je samostatný skript, který toto výchozí rozložení nahradí libovolnými ovládacími prvky editoru, které si vyberete.
Pro vytvoření vlastního editoru pro skript LookAtPoint:
- Vytvořte nový skript jazyka C# a pojmenujte jej „LookAtPointEditor“.
- Otevřete skript a nahraďte jeho obsah následujícím kódem.
//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(); }}
Tato třída musí dědit od třídy Editor. Atribut CustomEditor informuje Unity, pro kterou komponentu má fungovat jako editor. Atribut CanEditMultipleObjects říká Unity, že pomocí tohoto editoru lze vybrat více objektů a měnit je všechny najednou.
Unity provede kód v OnInspectorGUI zobrazí editor v Inspectoru. Sem můžete vložit libovolný kód GUI a bude fungovat stejně jako OnGUI, ale spustí se uvnitř Inspectoru. Editor definuje cílovou vlastnost, kterou můžete použít pro přístup k objektu GameObject, který kontrolujete.
Takto vypadá Inspector pro komponentu LookAtPoint s novým editorem:
Vypadá to velmi podobně (i když pole „Script“ nyní není přítomno, protože skript editoru nepřidává žádný kód Inspectoru pro jeho zobrazení).
Když však nyní máte kontrolu nad tím, jak se inspektor ve skriptu editoru zobrazuje, můžete použít libovolný kód pro rozložení polí inspektoru, umožnit uživateli nastavit hodnoty a dokonce zobrazit grafiku nebo jiné vizuální prvky. V podstatě všechny Inspektory, které vidíte v Editoru Unity, včetně složitějších Inspektorů, jako je terénKrajina ve vaší scéně. Herní objekt Terrain přidává do scény velkou rovinu a pomocí okna Inspektor terénu můžete vytvořit detailní krajinu. Více informací
Nastavení systému a importu animací viz Glosář, jsou provedena pomocí stejného rozhraní API, ke kterému máte přístup při vytváření vlastních Editorů.
Tady je jednoduchý příklad, který rozšiřuje skript editoru o zobrazení zprávy, která ukazuje, zda je cílový bod nad nebo pod objektem 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)"); } }}
Takto vypadá Inspector pro komponentu LookAtPoint se zprávou ukazující, zda je cílový bod nad nebo pod objektem GameObject.
Máte plný přístup ke všem příkazům IMGUI pro kreslení libovolného typu rozhraní, včetně vykreslováníProces kreslení grafiky na obrazovku (nebo do vykreslovací textury). Ve výchozím nastavení vykresluje hlavní kamera v Unity svůj pohled na obrazovku. Více informací
Viz Slovníček pojmů Scény pomocí kameryKomponenta, která vytváří obraz určitého úhlu pohledu ve vaší scéně. Výstup je buď vykreslen na obrazovku, nebo zachycen jako textura. Více informací
Viz Slovníček pojmů v oknech editoru.
Přídavky k zobrazení scény
Do zobrazení scény můžete přidat další kódInteraktivní pohled do vytvářeného světa. Zobrazení scény používáte k výběru a umístění kulis, postav, kamer, světel a všech dalších typů herních objektů. Další informace
Viz Slovníček pojmů. Za tímto účelem implementujte ve svém vlastním editoru funkci OnSceneGUI.
OnSceneGUI funguje stejně jako OnInspectorGUI s tím rozdílem, že se spouští v zobrazení scény. Jako pomůcku při vytváření vlastních ovládacích prvků pro editaci můžete použít funkce definované ve třídě Handles. Všechny funkce v ní jsou určeny pro práci v 3D zobrazeních Scene.
//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(); } }}
Pokud chcete přidat 2D objekty grafického uživatelského rozhraní (například: GUI nebo EditorGUI), musíte je zabalit do volání Handles.BeginGUI() a Handles.EndGUI().