Страница 1 из 1

Проблема защиты переменных при CustomEditor

СообщениеДобавлено: 15 авг 2020, 10:31
misereli
Есть такой вот простенький ScriptableObject
Синтаксис:
Используется csharp
using UnityEngine;

namespace Data
{
        [CreateAssetMenu(fileName = "Plant Data", menuName = "Plant Data")]
        public class PlantData : ScriptableObject
        {
                [SerializeField] private string plantName = string.Empty;
                public string PlantName => plantName;
        }
}

В рамках проекта всё хорошо, поле plantName защищено от записи.

Пока не становится нужен CustomEditor:
Синтаксис:
Используется csharp
using UnityEditor;

namespace Editor
{
    [CustomEditor(typeof(Data.PlantData))]
    public class PlantData : UnityEditor.Editor
    {
        public override void OnInspectorGUI()
        {
            var plantData = (Data.PlantData) target;
            plantData.PlantName = string.Empty;
        }
    }
}

Появляется ошибка, что свойство plantData.PlantName не имеет сеттера. Оно и логично, пытаемся перезаписать локальную переменную вне класса, которую я так усердно защищал.
Есть варианты как убить 2-х зайцев? Чтобы и кастом инспектор, и защищенные переменные.

Re: Проблема защиты переменных при CustomEditor

СообщениеДобавлено: 15 авг 2020, 10:42
misereli
Ок, запил костыли )

ScriptableObject
Синтаксис:
Используется csharp
namespace Data
{
        [CreateAssetMenu(fileName = "Plant Data", menuName = "Plant Data")]
        public class PlantData : ScriptableObject
        {
                [SerializeField] private string plantName = string.Empty;
                public string PlantName => plantName;

#if UNITY_EDITOR
                public void CustomInspector()
                {
                        plantName = EditorGUILayout.TextField("Plant name", plantName);
                }
#endif
        }
}


CustomEditor
Синтаксис:
Используется csharp
namespace Editor
{
    [CustomEditor(typeof(Data.PlantData))]
    public class PlantData : UnityEditor.Editor
    {
        public override void OnInspectorGUI()
        {
            DrawDefaultInspector();
            (target as Data.PlantData).CustomInspector();
        }
    }
}


Насколько такое решение тру?

Re: Проблема защиты переменных при CustomEditor

СообщениеДобавлено: 15 авг 2020, 10:58
1max1

Re: Проблема защиты переменных при CustomEditor

СообщениеДобавлено: 15 авг 2020, 11:16
misereli
1max1 писал(а):https://docs.unity3d.com/ScriptReference/SerializedProperty.html


Спасибо. Работает)
Но я пожалуй свой вариант оставлю.
Если захочется переименовать какую-либо переменную в ScriptableObject, придется вручную править CustomEditor.