public void InstantiateMemberCollection(IReference fieldCollection, bool clearContent = true) { if (clearContent) { ClearComponentsAndFieldsContent(fieldCollection); } var memberReferences = fieldCollection.GetMembers(); if (memberReferences != null) { foreach (var memberReference in memberReferences) { var type = memberReference.GetMemberType(); var name = memberReference.GetName(); if (memberReference.GetValue() != null && UiInitializers.Registry.ContainsKey(type)) { var uiComponent = InstantiateUiComponent(UiInitializers.Registry[memberReference.GetMemberType()].prefabName, name); UiInitializers.Registry[type].init.Invoke(this, memberReference, uiComponent); } else if (memberReference.GetMembers() != null && memberReference.GetMembers().Count > 0) { var uiComponent = InstantiateUiComponent("Class", name, type.Name); uiComponent.action = (v) => InstantiateMemberCollection(memberReference); } else if (type.IsEnum && type.GetEnumUnderlyingType() == typeof(int)) { var uiComponent = InstantiateUiComponent("Class", name, type.Name); uiComponent.action = (v) => InstantiateEnumValueCollection(memberReference); } else { InstantiateUiComponent("Unknown", name, memberReference.GetValue() == null ? type.Name + " (Null)" : type.Name); } } } }