internal virtual void AddTraitToUnit(AddTraitToUnitMessage msg)
        {
            var traitCount = _currentTraits.Count(c => c.Trait.name == msg.Trait.name);

            if (traitCount < msg.Trait.MaxStack)
            {
                var controller = Instantiate(FactoryController.TRAIT_CONTROLLER, transform);
                _currentTraits.Add(controller);
                controller.Setup(msg.Trait);
            }
        }
        void Start()
        {
            var playerController  = Instantiate(FactoryController.UNIT_CONTROLLER, _startingPosition.transform.position.ToVector2(), Quaternion.identity);
            var addTraitToUnitMsg = new AddTraitToUnitMessage();

            for (var i = 0; i < _playerStartingTraits.Count; i++)
            {
                addTraitToUnitMsg.Trait = _playerStartingTraits[i];
                gameObject.SendMessageTo(addTraitToUnitMsg, playerController.gameObject);
            }
        }