@Gwinterion

The same field name is serialized multiple times in the class or its parent class. Как исправить ошибку?

У меня есть компонент Entity
public class Entity : MonoBehaviour
{
    [SerializeField] private EntityScriptableObject _scriptableObject;

    public EntityScriptableObject ScriptableObject => _scriptableObject;
}


И класс Document который от него унаследован
public class Document : Entity
{
    [SerializeField] private DocumentScriptableObject _scriptableObject;

    public new DocumentScriptableObject ScriptableObject => _scriptableObject;
}


С Entity проблем не возникает, но вот при добавлении компонента Document на объект Unity выдаёт такую ошибку:

The same field name is serialized multiple times in the class or its parent class. This is not supported: Base(MonoBehaviour) _scriptableObject.

kgXZQwH.png

Также в инспекторе дублируется поле _scriptableObject

ZRygPYO.png

Как я понимаю проблема возникает из-за того что поля с одинаковым названием я пытаюсь сериализовать в базовом и наследуемом классах. Возникает вопрос можно ли (и нужно ли) исправить эту ошибку, ведь код, судя по всему, компилируется и работает так как я и задумывал. Также меня больше беспокоит то что в инспекторе дублируются поля, хотя когда я пытаюсь передать туда ссылку на объект то она передается в оба поля сразу. Это баг юнити или это из-за того что я не скрываю поле базового класса? Если дело в этом то почему тогда тип полей одинаковый в инспекторе хотя в базовом и наследуемом классах они разные? Не вызовет ли это проблем в дальнейшем если так это и оставить?
  • Вопрос задан
  • 195 просмотров
Решения вопроса 1
mindtester
@mindtester Куратор тега C#
http://iczin.su/hexagram_48
если еще не нашли решения..
и сложно придумать другую "архитектуру".. вопросы:
- дерево родителя и потомков? если есть иерархия более одного уровня:
- у вас может быть ошибка в последовательности выяснения "потомка"
- имхо один родитель, при чем virtual
- использование интерфейсов (но не конфликт имени/типа поля!! ;)
- и гарантия десирализации в нужный класс
.. вы же пытаетесь сделать нечто вроде конвейера "скриптования"? (очень очень много лет назад пытался использовать такой подход.. мое работало )).. но TVision приехал очень быстро.. и наработки потеряли смысл )))
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
NikFaraday
@NikFaraday
Student full-stack Developer
Простите, пожалуйста, но это очень глупый вопрос. Вы C# вообще учили?

Вот ваш класс:
public class Entity : MonoBehaviour
{
    [SerializeField] private EntityScriptableObject _scriptableObject;

    public EntityScriptableObject ScriptableObject => _scriptableObject;
}


И вам же четко пишет, что у вас два поля с одинаковыми именами. Вот:
[SerializeField] private EntityScriptableObject _scriptableObject;


И вот:
public EntityScriptableObject ScriptableObject => _scriptableObject;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы