Các biến có điều kiện trong các đối tượng Scriptable


10

Trong khi sử dụng ScriptableObjects, làm thế nào tôi có thể làm cho một số biến có điều kiện?

Mã ví dụ:

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

Mục tiêu: Khi testbool == trueđó teststringcó sẵn để chỉnh sửa, khi testbool == falseđó testintcó sẵn để chỉnh sửa trong khi mục tiêu khác là "chuyển sang màu xám ".

Câu trả lời:


7

Đường dẫn thân thiện với Biên tập viên là một "thanh tra tùy chỉnh". Theo thuật ngữ Unity API, điều này có nghĩa là mở rộng lớp Editor .

Dưới đây là một ví dụ hoạt động, nhưng liên kết doc ở trên sẽ đưa bạn qua rất nhiều chi tiết và các tùy chọn bổ sung:

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

Hãy nhớ rằng tập lệnh này sử dụng API chỉ dành cho Trình chỉnh sửa, do đó, tập lệnh này phải được đặt trong thư mục có tên Trình chỉnh sửa. Đoạn mã trên sẽ biến thanh tra của bạn thành như sau:

nhập mô tả hình ảnh ở đây

Điều đó sẽ giúp bạn lăn cho đến khi bạn cảm thấy thoải mái hơn với kịch bản 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; 
        }
    }
}

Có vẻ chính xác! Tôi sẽ kiểm tra và báo cáo lại!
Valamorde

Có vẻ như điều này sẽ chỉ ngăn chặn một giá trị sai và không làm cho nó không có sẵn để chỉnh sửa trong khi một điều kiện là true.
Valamorde
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.