Допустим, у меня есть что-то вроде этого
public class BodyPart : MonoBehaviour {
private BodyPart parent;
private List<BodyPart> children;
}
и я хочу иметь возможность поддерживать обе ссылки при добавлении / удалении детей и смене родителей. В идеале я бы просто создал свойства и обеспечил обновление родительского элемента при добавлении потомков и наоборот. Но выставление списка как свойства (даже свойство только для чтения) - позволяет мне сделать
bodyPart.Children.Add(new BodyPart());
, который не вызывает сеттер, поэтому родительское поле не будет обновлено должным образом.
Я видел, как люди выставляли List <...> как свойство типа ReadOnlyCollection <...>, но я не уверен, будет ли система компонентов Unity работать с таким свойством, и, возможно, есть какое-то лучшее путь? Также - может быть, IReadOnlyCollection лучше?
Я знаю, что вместо этого я мог бы создать иерархию GameObjects и использовать встроенные родительско-дочерние отношения единства, но я не хочу, чтобы мои BodyParts были полноценными GameObjects с преобразованиями и всем остальным, это всего лишь модель для RPG Атрибутика и инвентарь. Также пример упрощен, и в конечном итоге я хочу иметь больше логики и несколько видов отношений между компонентами, закодированными в этой модели.