示例#1
0
        /// <summary>
        ///   Awake.
        /// </summary>
        private void Awake()
        {
            _stateMachineController = new StateMachineController();
            _navMeshAgent           = GetComponent <NavMeshAgent>();
            _entity = GetComponent <Entity>();

            EntityIdle        entityIdle        = new EntityIdle();
            EntityChasePlayer entityChasePlayer = new EntityChasePlayer(_navMeshAgent);
            EntityAttack      entityAttack      = new EntityAttack();
            EntityDead        entityDead        = new EntityDead();

            _stateMachineController.Add(entityIdle);
            _stateMachineController.Add(entityChasePlayer);
            _stateMachineController.Add(entityAttack);

            _stateMachineController.AddAnyStateTransition(entityDead, () => _entity.IsDead);

            Player player = FindObjectOfType <Player>();

            _stateMachineController.AddStateTransition(entityIdle,
                                                       entityChasePlayer,
                                                       () => FlatDistance(_navMeshAgent.transform.position, player.transform.position) < 5);
            _stateMachineController.AddStateTransition(entityChasePlayer,
                                                       entityAttack,
                                                       () => FlatDistance(_navMeshAgent.transform.position, player.transform.position) < 2);

            _stateMachineController.ChangeState(entityIdle);
        }
 private void OnEntityDead(HealthController controller)
 {
     if (EntityDead != null)
     {
         EntityDead.Invoke(controller);
     }
 }