Как представить изменяемый список как свойство только для чтения в 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 и инвентаря система. Также пример упрощен, и в конечном итоге я хочу иметь больше логики и несколько видов отношений между компонентами, закодированными в этой модели.