protected override void Update()
    {
        base.Update();

        if (CacheTargetObject != null)
        {
            CacheTargetObject.gameObject.SetActive(destination.HasValue);
        }

        if (CharacterEntity.CurrentHp <= 0)
        {
            queueUsingSkill = null;
            destination     = null;
            if (CacheUISceneGameplay != null)
            {
                CacheUISceneGameplay.SetTargetCharacter(null);
            }
        }
        else
        {
            BaseCharacterEntity targetCharacter = null;
            CharacterEntity.TryGetTargetEntity(out targetCharacter);
            if (CacheUISceneGameplay != null)
            {
                CacheUISceneGameplay.SetTargetCharacter(targetCharacter);
            }
        }

        if (destination.HasValue)
        {
            var destinationValue = destination.Value;
            if (CacheTargetObject != null)
            {
                CacheTargetObject.transform.position = destinationValue;
            }
            if (Vector3.Distance(destinationValue, CharacterTransform.position) < StoppingDistance + 0.5f)
            {
                destination = null;
            }
        }

        UpdateInput();
        UpdateFollowTarget();
    }