Синтаксис:
Используется 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;
}
}
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;
}
}
}
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-х зайцев? Чтобы и кастом инспектор, и защищенные переменные.