public override GameObject CreateGameObject(ReferenceData referenceData, Transform parent = null) { var model = this.model ?? "base_anim.nif"; NiFile niFile; if (!niCache.TryGetValue(model, out niFile)) { var reader = BsaFileReader.LoadArchiveFileData($"meshes\\{model}"); niFile = new NiFile(reader); niCache.Add(model, niFile); } var gameObject = niFile.CreateGameObject(parent); if (gameObject == null) { return(null); } gameObject.name = name; CharacterInventory.Create(gameObject, this, referenceData); var equipment = gameObject.AddComponent <CharacterEquipment>(); var animation = gameObject.AddComponent <CharacterAnimation>(); var combat = gameObject.AddComponent <CharacterCombat>(); var input = AddCharacterInput(gameObject); combat.Initialize(animation, equipment, input); input.Initialize(aiData, wanderData, animation, combat); var character = gameObject.AddComponent <CharacterMovement>(); character.Initialize(animation, input); return(gameObject); }