Не удается сохранить переменную сценария редактора - PullRequest
1 голос
/ 16 апреля 2020

Здравствуйте, я пытаюсь сохранить поле настраиваемого редактора. Значение устанавливается в поле со списком, я получаю код из inte rnet, но я понял, что изменения, внесенные в поле со списком, не сохраняются при все, я пытался использовать кнопку «Сохранить», я пытался создать сериализованное поле, но я новичок в C# и единстве. Спасибо за посещение, хорошего дня.

    using UnityEditor;
    using UnityEngine;


    [CustomEditor(typeof(DoorScript))]
    [System.Serializable]
    public class ButtonDropDownMenu : Editor
    {
        public override void OnInspectorGUI()
        {
            base.OnInspectorGUI();
            DoorScript script = (DoorScript)target;

            GUIContent arrayLabel = new GUIContent("Color");
            script.index = EditorGUILayout.Popup(arrayLabel, script.index, script.options);
            /*serializedObject.FindProperty("index").intValue = script.index = EditorGUILayout.Popup(arrayLabel, script.index, script.options);
            script.index = EditorGUILayout.Popup(arrayLabel, script.index, script.options);

            var properlyToSave = serializedObject.FindProperty("Index");
            EditorGUILayout.PropertyField(properlyToSave);
            serializedObject.ApplyModifiedProperties();¨*/

        }
    }



using UnityEngine;
using UnityEngine.Experimental.Rendering.Universal;

public class DoorScript : MonoBehaviour
{
    private SpriteRenderer myColor;
    public Light2D doorLight;
    public Light2D doorPLight;

    [HideInInspector][SerializeField]
    public int index = 0;
    [HideInInspector][SerializeField]
    public string[] options = new string[]
    {
        "White",
        "Red",
        "Blue",
        "Cyan"

    };

    private void Awake()
    {
        myColor = GetComponent<SpriteRenderer>();
        ColorChanger();
    }

    void Start()
    {

    }

    private void ColorChanger()
    {
        if (index <= 0)
        {
            DoorsLights(Color.grey);
        }
        else if (index == 1)
        {
            DoorsLights(Color.red);
        }
        else if (index == 2)
        {
            DoorsLights(Color.blue);
        }
        else if (index >= 3)
        {
            DoorsLights(Color.green);
        }
    }

    private void DoorsLights(Color color)
    {
        myColor.color = color;
        doorLight.color = color;
        doorPLight.color = color;
    }
}

Редактировать:

Я работал Отлично, я сделал изменение вместо

index = EditorGUILayout.Popup(arrayLabel, script.index, script.options); 

Я использовал

 index.intValue = EditorGUILayout.Popup(arrayLabel, script.index, script.options); 

1 Ответ

2 голосов
/ 16 апреля 2020

Если вы хотите обновить свойства из пользовательского редактора, вы должны использовать SerializedProperty. Вот так:

[CustomEditor(typeof(DoorScript))]
public class ButtonDropDownMenu : Editor
{
    SerializedProperty index;
    void OnEnable()
    {
        index = serializedObject.FindProperty("index");
    }
...

Затем убедитесь, что вы звоните serializedObject.ApplyModifiedProperties();, когда закончите:

public override void OnInspectorGUI()
{
    base.OnInspectorGUI();
    ...
    index = EditorGUILayout.Popup(arrayLabel, script.index, script.options);
    ...
    serializedObject.ApplyModifiedProperties();
}

Надеюсь, это поможет! Дайте мне знать, если это не сработает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...