コード例 #1
0
ファイル: AudioBehavior.cs プロジェクト: Baensi/Assets
        /// <summary>
        /// Возвращает аудиофайл сообщения соответствующего статуса AgressionStateAI
        /// </summary>
        /// <param name="state">Статус агрессии AI</param>
        /// <returns>Возвращает аудиофайл</returns>
        public AudioClip getStateMessage(AgressionStateAI state)
        {
            switch (state) {
                case AgressionStateAI.Normal:

                    return getCollectionItem(ref oldNormalIndex, ref normalMessagesList);

                case AgressionStateAI.Warning:

                    return getCollectionItem(ref oldWarningIndex, ref warningMessagesList);

                case AgressionStateAI.Enemy:

                    return getCollectionItem(ref oldEnemyIndex, ref enemyMessagesList);

                default:

                    return null;
            }
        }
コード例 #2
0
ファイル: PathWalker.cs プロジェクト: Baensi/Assets
        public void OnStartWalker()
        {
            agent = gameObject.GetComponent<NavMeshAgent>();
            animator = GetComponent<Animator>();
            base.OnStartEnemyBehaviorAI(animator);

            State = AgressionStateAI.Normal;
        }
コード例 #3
0
ファイル: PathWalker.cs プロジェクト: Baensi/Assets
        public void OnUpdateWalker()
        {
            if(destroyed)
                return;

            if (states.health <= 0) // ходок умер
                DoDie();

            bool moveFlag = true;

                // Пытаемся просканировать видимую местность не чаще раза в SEE_UPDATE_TIME сек.
            if (Time.time - seeDelayTimeStamp >= SEE_UPDATE_TIME) {
                OnSeeIteration();
                seeDelayTimeStamp = Time.time;
            }

            if(Time.time - moveDelayTimeStamp >= MOVE_UPDATE_TIME) { // проверка на "заторы"

                if(Vector3.Distance(transform.position, oldPosition) <= 0.1f)  // дистанция практически не сменилась
                    switch (walkState) {
                        case WALK: // врагов поблизости нет, ходок идёт на точку, но, дистанция не меняется

                                OnFindNewIdlePoint(); // пытаемся идти на другую точку

                            break;
                        case RUN: // есть враг, но, ходок во что то упёрся

                                target = null;
                                State = AgressionStateAI.Normal; // пытаемся забыть цель, до неё не достать

                            break;
                    }

                moveDelayTimeStamp = Time.time;
                oldPosition = transform.position;

            }

                // Проверяем,
            if (isMinIdleDistance(transform.position, point, minMovDistance)) {
                OnIdleIteration();
                moveFlag = false;
            }

            if(isMinAttackDistance(transform, target, minAttackDistance, target)) {
                OnAttackIteration();
                moveFlag = false;
            }

            if(moveFlag)
                OnMoveIteration();

            if (target != null && isSeeDistanceGameObject(target,transform)) {

                memoryTimeStamp = Time.time;
                transform.LookAt(target);

            } else {

                if (Time.time - memoryTimeStamp >= enemyMemory) { // смотрим, как долго персонаж пропадает из вида
                                                                  // если время больше "памяти" AI, забываем цель

                    State = AgressionStateAI.Normal;
                    target = null;

                }

            }
        }
コード例 #4
0
ファイル: PathWalker.cs プロジェクト: Baensi/Assets
        public void OnSeeIteration()
        {
            if(target!=null)
                return;

            List<IStateAI> seeNPC = LookViewService.getInstance().getSeeAIObjects(this, new Ray(transform.position, transform.forward),seeDistance,seeAngle);

            foreach(IStateAI ai in seeNPC) {

                if (getFraction() != ai.getFraction()) { // ходок видит врага
                    State  = AgressionStateAI.Enemy;
                    target = ai.toObject().transform;
                    memoryTimeStamp = Time.time; // запоминаем момент когда видим цель
                    return;
                }

            }
        }