Как представить изменяемый список как свойство только для чтения в MonoBehaviour - PullRequest
0 голосов
/ 10 ноября 2018

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

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

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

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

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

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

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

...