protected virtual void Start()
    {
        startPosition = transform.position;
        LevelManager  = LevelManager.Instance;
        Agent         = GetComponent <NavMeshAgent>();
        Rb            = GetComponent <Rigidbody>();
        Animator      = GetComponent <Animator>();
        if (target == null)
        {
            target = FindObjectOfType <Finishline>();
        }

        Agent.updatePosition = false;
        //cache states for better memory control
        CacheStates();
        //set state to Idle
        CheckCacheAndChangeState(AIState.Idle);
    }
 protected override void Awake()
 {
     base.Awake();
     if (finishline == null)
     {
         finishline = FindObjectOfType <Finishline>();
     }
     if (hudManager == null)
     {
         hudManager = FindObjectOfType <HUDManager>();
     }
     if (characterPaintingPosition == null)
     {
         characterPaintingPosition = paintStage.transform.Find("PlayerPosition");
     }
     SetupScene();
     //subscribe to finishline passed action
     finishline.OnFinishlinePassed += FinishlinePassed;
 }