コード例 #1
0
 private void CallbackEnemyBehaviourStateChangeEvent(object o, EnemyBehavourChangeArgs args)
 {
     if (args.NewBehaviourState == EnemyBehaviour.BehaviourState.ATTACK)
     {
         PlaySound(attackPlayerSound);
     }
 }
コード例 #2
0
    private void FixedUpdate()
    {
        EnemyBehavourChangeArgs args = new EnemyBehavourChangeArgs();

        args.NewBehaviourState = CurrentState;
        this.detectedObstacle  = DetectObstacles();
        switch (this.CurrentState)
        {
        case BehaviourState.IDLE:
            TryChangeToPatrol();
            SetChaseIfCanSeeTarget();
            break;

        case BehaviourState.PATROL:
            Move(this.PatrolSpeed);
            TryChangeToIdle(this.detectedObstacle);
            SetChaseIfCanSeeTarget();
            break;

        case BehaviourState.CHASE:
            if (!IsPlayerInAttackReach())
            {
                Move(this.ChaseSpeed);
            }
            SetIdleIfLostSightOfTarget();
            SetAttackIfTargetIsInReach();
            break;

        case BehaviourState.ATTACK:
            this.Attack();
            break;

        default:
            Idle();
            break;
        }
        EnemyBehaviourStateChangeEvent?.Invoke(this, args);
    }