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

Раздел, посвящённый всему, что связано с программированием для Редактора Юнити. Скрипты Редактора, Wizards и прочее.

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

Сообщение misereli 15 авг 2020, 10:31

Есть такой вот простенький 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-х зайцев? Чтобы и кастом инспектор, и защищенные переменные.
Unity3d.ru :) Discord worldadmin#5845
Аватара пользователя
misereli
UNITрон
 
Сообщения: 165
Зарегистрирован: 05 мар 2012, 14:13
Откуда: Tver

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

Сообщение misereli 15 авг 2020, 10:42

Ок, запил костыли )

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


Насколько такое решение тру?
Unity3d.ru :) Discord worldadmin#5845
Аватара пользователя
misereli
UNITрон
 
Сообщения: 165
Зарегистрирован: 05 мар 2012, 14:13
Откуда: Tver

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

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

Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

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

Сообщение misereli 15 авг 2020, 11:16

1max1 писал(а):https://docs.unity3d.com/ScriptReference/SerializedProperty.html


Спасибо. Работает)
Но я пожалуй свой вариант оставлю.
Если захочется переименовать какую-либо переменную в ScriptableObject, придется вручную править CustomEditor.
Unity3d.ru :) Discord worldadmin#5845
Аватара пользователя
misereli
UNITрон
 
Сообщения: 165
Зарегистрирован: 05 мар 2012, 14:13
Откуда: Tver


Вернуться в Editor

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1