스크립팅 가능한 객체의 조건부 변수


10

를 사용하는 동안 ScriptableObjects일부 변수를 조건부로 만들려면 어떻게해야합니까?

예제 코드 :

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

목표 :testbool == true다음 teststring편집을 사용할 경우 testbool == false다음 testint다른 하나는 "동안 편집 사용할 수 있습니다 회색으로 ".

답변:


7

편집자에게 친숙한 경로는 "맞춤 검사기"입니다. Unity API 용어에서 이는 Editor 클래스 확장을 의미합니다 .

다음은 실제 예제이지만 위의 문서 링크는 많은 세부 정보와 추가 옵션을 안내합니다.

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

이 스크립트는 편집기 전용 API를 사용하므로 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; 
        }
    }
}

정확 해 보인다! 테스트하고 다시 신고하겠습니다!
Valamorde

이렇게하면 잘못된 값만 방지하고 조건이 일 때 편집 할 수 없게됩니다 true.
Valamorde 2016 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.