Как представить изменяемый список как свойство только для чтения в MonoBehaviour

Допустим, у меня есть что-то вроде этого

public class BodyPart : MonoBehaviour {
    private BodyPart parent;
    private List<BodyPart> children;
}

и я хочу иметь возможность поддерживать обе ссылки при добавлении / удалении детей и смене родителей. В идеале я хотел бы просто создать свойства и убедиться, что родительский объект обновляется при добавлении потомков, и наоборот. Но выставление списка как свойства (даже свойство только для чтения) - позволяет мне сделать

bodyPart.Children.Add(new BodyPart());

который не будет вызывать сеттер, поэтому родительское поле не будет обновлено должным образом.

Я видел, как люди выставляли List<...> как свойство типа ReadOnlyCollection<...>, но я не уверен, будет ли система компонентов Unity работать с таким свойством, и, может быть, есть какой-то лучший способ? Также - может быть, IReadOnlyCollection лучше?

Я знаю, что мог бы вместо этого создать иерархию GameObjects и использовать встроенные родительско-дочерние отношения единства, но я не хочу, чтобы мои BodyParts были полноценными GameObjects с преобразованиями и всем остальным, это всего лишь модель для атрибутов RPG и инвентаря система. Также пример упрощен, и в конечном итоге я хочу иметь больше логики и несколько видов отношений между компонентами, закодированными в этой модели.

0 ответов

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