Итак, сейчас я работаю над стратегией, в которой задействованы 3 типа зданий: «Производство», «Склад» и «Переработка». Любое здание может принадлежать к одному или нескольким из этих типов, поэтому складское здание также может быть перерабатывающим зданием и должно наследовать функциональность обоих этих типов.
Пример:
public class Stronghold : Building, IStorage, IRefining, IProduction
{
public RefiningOption[] RefiningOptions { get; set; }
}
public interface IRefining
{
public RefiningOption[] RefiningOptions { get; set; }
}
Я начал реализовывать это с помощью интерфейсов, но столкнулся с проблемой, что Unity не позволяет вам сериализовать свойства, а интерфейсы не могут содержать поля.
Есть ли способ обойти это, который позволил бы мне аккуратно наследовать от нескольких разных типов, или я подхожу ко всему этому неправильно? Я могу придумать решение, которое включало бы использование отдельных компонентов для функциональности каждого типа здания, но прежде чем реализовать это, я хотел знать, каким будет «правильное» решение.
Заранее спасибо. Я пытаюсь расширить свой набор инструментов, поэтому любые отзывы приветствуются.
именно так ? создайте поле в привате. и это частное поле можно сериализовать
private RefiningOption[] _refiningOptions;
public RefiningOption[] RefiningOptions
{
get { return _refiningOptions; }
set { _refiningOptions = value; }
}
Так же, как ответ выше, но более «компактным» способом
[field: SerializeField] public RefiningOption[] RefiningOptions { get; set; }
Это автоматическое свойство, которое создает вспомогательное поле, доступ к которому можно получить напрямую, введя [поле: "Your_Attribute_Here"].
Спасибо, этот ответ великолепен! В конце концов я выбрал другое решение, потому что оно лучше соответствовало моим потребностям, но мне придется это запомнить, это здорово знать!