public override GameObject CreateGameObject(ReferenceData referenceData, Transform parent = null)
    {
        var gameObject = base.CreateGameObject(referenceData, parent);

        gameObject.AddComponent <CharacterVoice>().Initialize(this);

        var body = gameObject.AddComponent <CharacterBody>();

        body.Initialize(race, head, hair, npcFlags.HasFlag(NpcFlags.Female));

        DialogController.Create(gameObject, this, referenceData);

        var characterData = gameObject.AddComponent <Character>();

        characterData.Initialize(this);

        var animation = gameObject.GetComponent <CharacterAnimation>();
        var inventory = gameObject.GetComponent <IInventory>();

        var equipment = gameObject.GetComponent <CharacterEquipment>();

        equipment.Initialize(animation, body, inventory);

        foreach (var collider in gameObject.GetComponentsInChildren <Collider>())
        {
            collider.gameObject.layer = LayerMask.NameToLayer("Npc");
        }

        AddServices(gameObject);

        var rigidbody = gameObject.AddComponent <Rigidbody>();

        //rigidbody.isKinematic = true;
        rigidbody.constraints = RigidbodyConstraints.FreezeRotation;

        CharacterAudio.Create(gameObject);

        return(gameObject);
    }