Custom Editors

Luo mukautettuja editoreita yleisesti käyttämillesi komponenteille nopeuttaaksesi sovelluskehitystä. Tällä sivulla näytetään, miten voit luoda yksinkertaisen skriptin, jolla voit tehdä GameObjectitPerusobjekti Unityn kohtauksissa, jotka voivat edustaa hahmoja, rekvisiittaa, maisemia, kameroita, reittipisteitä ja paljon muuta. GameObjectin toiminnallisuus määritellään siihen liitettyjen komponenttien avulla. Lisätietoja
Katso sanastossa aina pisteeseen.

  1. Luo C#-skripti ja nimeä se ””LookAtPoint””.
  2. Avaa skripti ja korvaa sen sisältö alla olevalla koodilla.
  3. Kiinnitä skripti GameObjectiin ScenessäsiScene sisältää pelisi ympäristöt ja valikot. Ajattele jokaista ainutlaatuista Scene-tiedostoa ainutlaatuisena tasona. Jokaiseen Sceneen sijoitat ympäristöt, esteet ja koristeet, käytännössä suunnittelet ja rakennat pelisi paloittain. Lisätietoja
    Katso sanastosta.
//C# Example (LookAtPoint.cs)using UnityEngine;public class LookAtPoint : MonoBehaviour{ public Vector3 lookAtPoint = Vector3.zero; void Update() { transform.LookAt(lookAtPoint); }}

Kun siirryt pelitilaan, GameObject, johon liitit skriptin, suuntautuu nyt ”Look At Point”-ominaisuuteen asettamiisi koordinaatteihin. Kun kirjoitat editoriskriptejäKoodinpätkä, jonka avulla voit luoda omia komponentteja, laukaista pelitapahtumia, muuttaa komponenttien ominaisuuksia ajan myötä ja reagoida käyttäjän syötteisiin haluamallasi tavalla. Lisätietoja
Katso sanasto, on usein hyödyllistä saada tietyt skriptit suorittamaan Editointitilan aikana, kun sovelluksesi ei ole käynnissä. Voit tehdä tämän lisäämällä ExecuteInEditMode-attribuutin luokkaan näin:

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

Nyt jos siirrät GameObjectia editorissa tai muutat ”Look At Point”-arvoja InspectorissaYunityn ikkuna, joka näyttää tietoja parhaillaan valitusta GameObjectista, assetista tai projektin asetuksista, jolloin voit tarkastaa ja muokata arvoja. Lisätietoja
Katso sanastossa, GameObject päivittää rotaationsa niin, että se katsoo maailmanavaruuden kohdepistettä.

Muokatun editorin tekeminen

Ylläoleva havainnollistaa, miten saat yksinkertaiset skriptit pyörimään muokkauksen aikana, mutta tämä ei kuitenkaan yksinään mahdollista omien editorityökalujen luomista. Seuraava askel on luoda Custom Editor juuri luomallesi skriptille.

Kun luot skriptin Unityssä, se periytyy oletusarvoisesti MonoBehaviourista ja on siten komponentti, jonka voit liittää GameObjectiin. Kun asetat komponentin GameObjectiin, Inspector näyttää oletusarvoisen käyttöliittymän, jonka avulla voit tarkastella ja muokata jokaista julkista muuttujaa, esimerkiksi kokonaislukua, kelluvaa tai merkkijonoa.

Tältä LookAtPoint-komponentin Inspector näyttää oletusarvoisesti:

Esimerkkinen Inspector, jossa on julkinen Vector3-kenttä

Räätälöity editori on erillinen skripti, joka korvaa tämän oletusasettelun valitsemillasi editorin ohjaimilla.

Luo mukautettu editori LookAtPoint-skriptiin:

  1. Luo uusi C#-skripti ja anna sille nimeksi ”LookAtPointEditor”.
  2. Avaa skripti ja korvaa sen sisältö alla olevalla koodilla.
//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(); }}

Tämän luokan on periydyttävä luokasta Editor. CustomEditor-attribuutti ilmoittaa Unitylle, minkä komponentin editorina sen tulisi toimia. CanEditMultipleObjects -attribuutti kertoo Unitylle, että tällä editorilla voi valita useita objekteja ja muuttaa niitä kaikkia samaan aikaan.

Unity suorittaa koodin OnInspectorGUI se näyttää editorin Inspectorissa. Voit laittaa tähän mitä tahansa GUI-koodia ja se toimii samalla tavalla kuin OnGUI, mutta se suoritetaan Inspectorin sisällä. Editor määrittelee kohdeominaisuuden, jolla voit käyttää tarkastettavaa GameObjectia.

Tältä näyttää LookAtPoint-komponentin Inspector uudella editorilla:

Tämä näyttää hyvin samankaltaiselta (tosin ”Script”-kenttää ei nyt ole, koska editorin skripti ei lisää mitään Inspector-koodia sen näyttämiseksi).

Mutta nyt, kun voit hallita sitä, miten Tarkastaja näytetään Editor-skriptissä, voit käyttää mitä tahansa haluamaasi koodia Asettele Tarkastaja-kentät, anna käyttäjän säätää arvoja ja jopa näyttää grafiikkaa tai muita visuaalisia elementtejä. Itse asiassa kaikki Unity-editorissa näkyvät tarkastajat, mukaan lukien monimutkaisemmat tarkastajat, kuten maastoMaisema kohtauksessasi. Terrain-peliobjekti lisää suuren tasaisen tason kohtaukseesi, ja voit käyttää Terrainin Inspector-ikkunaa yksityiskohtaisen maiseman luomiseen. Lisätietoja
Katso sanastossa järjestelmä- ja animaatiotuontiasetukset, tehdään kaikki käyttäen samaa API:ta, jota voit käyttää luodessasi omia mukautettuja editoreita.

Tässä on yksinkertainen esimerkki, joka laajentaa editorin skriptiäsi näyttämään viestin, joka kertoo, onko kohdepiste GameObjectin ylä- vai alapuolella:

//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)"); } }}

Tältä näyttää LookAtPoint-komponentin Inspector, jossa on viesti, joka näyttää, onko kohdepiste GameObjectin ylä- vai alapuolella.

Sinulla on täysi käyttöoikeus kaikkiin IMGUI:n komentoihin, joilla voit piirtää minkä tahansa käyttöliittymän, mukaan lukien renderöintiGrafiikan piirtäminen näytölle (tai renderöintitekstuuriin). Oletusarvoisesti Unityn pääkamera renderöi näkymänsä näytölle. Lisätietoja
Katso sanastosta Kameraa käyttävät kohtauksetKomponentti, joka luo kuvan tietystä näkymästä kohtauksessasi. Tulos joko piirretään näytölle tai kaapataan tekstuurina. Lisätietoja
Katso sanastosta editorin ikkunoiden sisällä.

Scene View Additions

Voit lisätä lisäkoodia Scene View:henVuorovaikutteinen näkymä maailmaan, jota olet luomassa. Scene View -näkymää käytetään maiseman, hahmojen, kameroiden, valojen ja kaikkien muiden peliobjektityyppien valitsemiseen ja sijoittamiseen. Lisätietoja
Katso sanastosta. Toteuta tätä varten OnSceneGUI mukautetussa editorissasi.

OnSceneGUI toimii kuten OnInspectorGUI, paitsi että se toimii Scene-näkymässä. Omien editointiohjainten tekemisen helpottamiseksi voit käyttää Handles-luokassa määriteltyjä funktioita. Kaikki siellä olevat funktiot on suunniteltu työskentelyyn 3D Scene-näkymissä.

//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(); } }}

Jos haluat lisätä 2D GUI-objekteja (esimerkiksi: GUI tai EditorGUI), sinun on kiedottava ne kutsuihin Handles.BeginGUI() ja Handles.EndGUI().

Vastaa

Sähköpostiosoitettasi ei julkaista.