Harta site
TreeView

Editor kustom

Untuk mempercepat pengembangan aplikasi, membuat editor kustom untuk komponen yang Anda gunakan. Halaman ini menunjukkan cara membuat skrip sederhana untuk membuat GameObjectsObjek mendasar dalam adegan Unity, yang dapat mewakili karakter, props, pemandangan, kamera, waypoints, dan banyak lagi. Fungsi GameObject didefinisikan oleh Komponen yang melekat padanya. More info
Lihat di Glossary
selalu melihat titik.

  1. Create a C# script and name it "“LookAtPoint”.
  2. Buka script dan ganti kontennya dengan kode di bawah ini.
  3. Masukkan skrip ke GameObject di SceneAdegan berisi lingkungan dan menu permainan Anda. Pikirkan setiap file Adegan unik sebagai tingkat yang unik. Di setiap Adegan, Anda menempatkan lingkungan, hambatan, dan dekorasi, pada dasarnya merancang dan membangun permainan Anda dalam potongan-potongan. More info
    Lihat di Glossary
    Anda.
//C# Example (LookAtPoint.cs)
using UnityEngine;
public class LookAtPoint : MonoBehaviour
{
    public Vector3 lookAtPoint = Vector3.zero;

    void Update()
    {
        transform.LookAt(lookAtPoint);
    }
}

Ketika Anda memasukkan Mode bermain, GameObject yang Anda tempelkan skrip untuk sekarang mengorientasikan dirinya ke dalam koordinat yang Anda set ke properti "Look At Point". Ketika menulis Editor scriptsSepotong kode yang memungkinkan Anda untuk membuat Komponen Anda sendiri, memicu peristiwa permainan, memodifikasi sifat komponen dari waktu ke waktu dan menanggapi input pengguna dengan cara apa pun yang Anda sukai. More info
Lihat di Glossary
, seringkali berguna untuk membuat skrip tertentu dijalankan selama Edit mode, sementara aplikasi Anda tidak berjalan. Untuk melakukan ini, tambahkan atribut ExecuteInEditMode ke kelas, seperti ini:

//C# Example (LookAtPoint.cs)
using UnityEngine;
[ExecuteInEditMode]
public class LookAtPoint : MonoBehaviour
{
    public Vector3 lookAtPoint = Vector3.zero;

    void Update()
    {
        transform.LookAt(lookAtPoint);
    }
}

Sekarang jika Anda memindahkan GameObject di Editor, atau mengubah nilai "Look At Point" di InspectorJendela Unity yang menampilkan informasi tentang Pengaturan GameObject yang dipilih saat ini, aset atau proyek, memungkinkan Anda untuk memeriksa dan mengedit nilai. More info
Lihat di Glossary
, GameObject memperbarui rotasinya sehingga terlihat pada titik target di ruang dunia.

Membuat Editor Kustom

Di atas menunjukkan bagaimana Anda bisa mendapatkan skrip sederhana yang berjalan selama waktu edit, namun ini sendiri tidak memungkinkan Anda untuk membuat alat Editor Anda sendiri. Langkah selanjutnya adalah membuat Custom Editor untuk script yang Anda buat.

Ketika Anda membuat skrip di Unity, secara default itu mengherankan dari MonoBehaviour, dan oleh karena itu adalah komponen yang dapat Anda melampirkan ke GameObject. Ketika Anda menempatkan komponen pada GameObject, Inspector menampilkan antarmuka default yang dapat Anda gunakan untuk melihat dan mengedit setiap variabel publik, misalnya: integer, float, atau string.

Ini adalah bagaimana Inspektur untuk komponen LookAtPoint terlihat secara default:

A default Inspector with a public Vector3 field
Inspektur default dengan lapangan vektor3 publik

A custom editor is a separate script which replaces this default layout with any editor controls that you choose.

Untuk membuat editor kustom untuk script LookAtPoint:

  1. Buat skrip C# baru dan nama "LookAtPointEditor".
  2. Buka script dan ganti kontennya dengan kode di bawah ini.
//C# Example (LookAtPointEditor.cs)
using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(LookAtPoint))]
[CanEditMultipleObjects]
public class LookAtPointEditor : Editor 
{
    SerializedProperty lookAtPoint;
    
    void OnEnable()
    {
        lookAtPoint = serializedObject.FindProperty("lookAtPoint");
    }

    public override void OnInspectorGUI()
    {
        serializedObject.Update();
        EditorGUILayout.PropertyField(lookAtPoint);
        serializedObject.ApplyModifiedProperties();
    }
}

Kelas ini harus mewarisi dari Editor. Atribut CustomEditor menginformasikan Komponen Unity yang harus bertindak sebagai editor untuk. Atribut CanEditMultipleObjects memberi tahu Unity bahwa Anda dapat memilih beberapa objek dengan editor ini dan mengubahnya setiap pada saat yang sama.

Unity mengeksekusi kode di OnInspectorGUI menampilkan editor di Inspector. Anda dapat menempatkan kode GUI di sini dan bekerja dengan cara yang sama seperti OnGUI tidak, tetapi berjalan di dalam Inspektur. Editor mendefinisikan properti target yang dapat Anda gunakan untuk mengakses GameObject Anda memeriksa.

Ini adalah bagaimana Inspektur untuk komponen LookAtPoint terlihat dengan editor baru:

Hal ini terlihat sangat mirip (meskipun field “Script” sekarang tidak hadir, karena script editor tidak menambahkan kode Inspektur untuk menunjukkannya).

Namun sekarang bahwa Anda memiliki kendali atas bagaimana Inspektur menampilkan dalam skrip Editor, Anda dapat menggunakan kode apa pun yang Anda suka meletakkan bidang Inspektur, memungkinkan pengguna untuk menyesuaikan nilai, dan bahkan menampilkan grafik atau elemen visual lainnya. Bahkan semua Inspektur yang Anda lihat dalam Editor Unity termasuk Inspektur yang lebih kompleks seperti sistem terrainPemandangan di tempat kejadian Anda. Terrain GameObject menambahkan pesawat datar besar untuk adegan Anda dan Anda dapat menggunakan jendela Inspektur Terrain untuk menciptakan lanskap rinci. More info
Lihat di Glossary
dan pengaturan impor animasi, semuanya dibuat menggunakan API yang sama yang memiliki akses ke saat membuat editor kustom Anda sendiri.

Berikut adalah contoh sederhana yang memperluas skrip editor Anda untuk menampilkan pesan yang menunjukkan apakah titik target di atas atau di bawah GameObject:

//C# Example (LookAtPointEditor.cs)
using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(LookAtPoint))]
[CanEditMultipleObjects]
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)");
        }
    }
}

Ini adalah bagaimana Inspektur untuk komponen LookAtPoint terlihat dengan pesan yang ditampilkan jika titik target di atas atau di bawah GameObject.

Anda memiliki akses penuh ke semua perintah IMGUI untuk menggambar semua jenis antarmuka, termasuk rendering Adegan menggunakan CameraKomponen yang menciptakan gambar sudut pandang tertentu di tempat kejadian Anda. Output ditarik ke layar atau ditangkap sebagai tekstur. More info
Lihat di Glossary
dalam jendela Editor.

Adegan Lihat Additions

Anda dapat menambahkan kode tambahan ke Scene ViewTampilan interaktif ke dunia yang Anda buat. Anda menggunakan Adegan Lihat untuk memilih dan posisi pemandangan, karakter, kamera, lampu, dan semua jenis lain dari Game Object. More info
Lihat di Glossary
. Untuk melakukan ini, menerapkan OnSceneGUI dalam editor kustom Anda.

OnSceneGUI bekerja sama seperti OnInspectorGUI kecuali berjalan dalam pandangan Adegan. Untuk membantu Anda membuat kontrol pengeditan Anda sendiri, Anda dapat menggunakan fungsi yang didefinisikan dalam kelas Handles. Semua fungsi di sana dirancang untuk bekerja dalam pandangan adegan 3D.

//C# Example (LookAtPointEditor.cs)
using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(LookAtPoint))]
[CanEditMultipleObjects]
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();
        }
    }
}

Jika Anda ingin menambahkan benda GUI 2D (misalnya: GUI atau EditorGUI), Anda perlu membungkusnya dalam panggilan untuk Menangani. StartGUI() Login

Harta site
TreeView