Сериализация свойства из интерфейса в Unity

Итак, сейчас я работаю над стратегией, в которой задействованы 3 типа зданий: «Производство», «Склад» и «Переработка». Любое здание может принадлежать к одному или нескольким из этих типов, поэтому складское здание также может быть перерабатывающим зданием и должно наследовать функциональность обоих этих типов.

Пример:

public class Stronghold : Building, IStorage, IRefining, IProduction
{
    public RefiningOption[] RefiningOptions { get; set; }
}

public interface IRefining
{
    public RefiningOption[] RefiningOptions { get; set; }
}

Я начал реализовывать это с помощью интерфейсов, но столкнулся с проблемой, что Unity не позволяет вам сериализовать свойства, а интерфейсы не могут содержать поля.

Есть ли способ обойти это, который позволил бы мне аккуратно наследовать от нескольких разных типов, или я подхожу ко всему этому неправильно? Я могу придумать решение, которое включало бы использование отдельных компонентов для функциональности каждого типа здания, но прежде чем реализовать это, я хотел знать, каким будет «правильное» решение.

Заранее спасибо. Я пытаюсь расширить свой набор инструментов, поэтому любые отзывы приветствуются.

3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
0
27
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

именно так ? создайте поле в привате. и это частное поле можно сериализовать

private RefiningOption[] _refiningOptions;
public RefiningOption[] RefiningOptions 
{ 
    get { return _refiningOptions; } 
    set { _refiningOptions = value; } 
}
Ответ принят как подходящий

Так же, как ответ выше, но более «компактным» способом

[field: SerializeField] public RefiningOption[] RefiningOptions { get; set; }

Это автоматическое свойство, которое создает вспомогательное поле, доступ к которому можно получить напрямую, введя [поле: "Your_Attribute_Here"].

Спасибо, этот ответ великолепен! В конце концов я выбрал другое решение, потому что оно лучше соответствовало моим потребностям, но мне придется это запомнить, это здорово знать!

basklein 23.04.2022 15:10

Другие вопросы по теме