Variabel bersyarat dalam Objek Skrip


10

Saat menggunakan ScriptableObjects, bagaimana saya bisa membuat beberapa variabel kondisional?

Kode Contoh:

[System.Serializable]
public class Test : ScriptableObject
{
      public bool testbool;
      public string teststring;
      public int testint;
}

Sasaran: Kapan testbool == truekemudian teststringtersedia untuk diedit, kapan testbool == falsekemudian testinttersedia untuk mengedit sementara yang lain " berwarna abu-abu ".

Jawaban:


7

Jalur ramah Editor adalah "inspektur khusus". Dalam istilah Unity API, ini berarti memperluas kelas Editor .

Berikut ini adalah contoh yang berfungsi, tetapi tautan dokumen di atas akan memandu Anda melalui banyak detail dan opsi tambahan:

using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(Test))]
public class TestEditor : Editor
{
    private Test targetObject;

    void OnEnable()
    {
        targetObject = (Test) this.target;
    }

    // Implement this function to make a custom inspector.
    public override void OnInspectorGUI()
    {
        // Using Begin/End ChangeCheck is a good practice to avoid changing assets on disk that weren't edited.
        EditorGUI.BeginChangeCheck();

        // Use the editor auto-layout system to make your life easy
        EditorGUILayout.BeginVertical();
        targetObject.testBool = EditorGUILayout.Toggle("Bool", targetObject.testBool);

        // GUI.enabled enables or disables all controls until it is called again
        GUI.enabled = targetObject.testBool;
        targetObject.testString = EditorGUILayout.TextField("String", targetObject.testString);

        // Re-enable further controls
        GUI.enabled = true;

        targetObject.testInt = EditorGUILayout.IntField("Int", targetObject.testInt);

        EditorGUILayout.EndVertical();

        // If anything has changed, mark the object dirty so it's saved to disk
        if(EditorGUI.EndChangeCheck())
            EditorUtility.SetDirty(target);
    }
}

Ingatlah bahwa skrip ini menggunakan API khusus Editor, sehingga harus ditempatkan di folder bernama Editor. Kode di atas akan mengubah inspektur Anda menjadi yang berikut:

masukkan deskripsi gambar di sini

Itu akan membuat Anda berputar sampai Anda lebih nyaman dengan skrip Editor.


4
[System.Serializable]
public class Test : ScriptableObject
{
    private bool testbool;
    public string teststring;
    public int testint;

    public string TestString 
    {
        get 
        {    
            return teststring; 
        }
        set 
        {
            if (testbool)
                teststring = value; 
        }
    }
}

Itu terlihat tepat! Saya akan menguji dan melaporkan kembali!
Valamorde

Tampaknya ini hanya akan mencegah nilai yang salah dan tidak membuatnya tidak dapat diedit saat kondisinya sedang terjadi true.
Valamorde
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.