コード例 #1
0
    IEnumerator AISearching()
    {
        int   num       = 0;
        float time      = 1.0f;
        float Limit     = 0.0f;
        bool  prevFight = false;

        //평화
        while (true)
        {
            if (ObjLife.Hp <= 0)
            {
                Targetting T;
                T = FindObjectOfType <Targetting>().GetComponent <Targetting>();
                Debug.Log(T);
                ani.SetBool("Die", true);

                MobSound.PlaySound(3);

                yield return(new WaitForSeconds(Die_Time));

                this.gameObject.SetActive(false);
            }
            {
                if (Fight)
                {
                    NCommand.StateChange(true);
                }
                else
                {
                    NCommand.StateChange(false);
                }

                if (Fight != prevFight)
                {
                    Limit = float.MaxValue;
                }
                if (Fight == false)
                {
                    while (Peace.Count < 2)
                    {
                        num = getRandom(0, 3);
                        Peace.Enqueue(num);
                    }
                }
                //전투
                else
                {
                    //전투중 AI 조건
                    while (Battle.Count < 2)
                    {
                        if (Vector3.Distance(Player.position, this.gameObject.transform.position) <= ObjLife.Range)
                        {
                            num = 12;
                        }
                        else
                        {
                            num = 11;
                        }
                        Battle.Enqueue(num);
                    }
                }

                if (Limit >= time)
                {
                    Limit = 0.0f;
                    if (!Fight)
                    {
                        num = (int)Peace.Dequeue();                        //동작 처리시에 큐서 빠져나감
                    }
                    else
                    {
                        //num = (int)Battle.Dequeue();//동작 처리시에 큐서 빠져나감

                        if (Vector3.Distance(Player.position, this.gameObject.transform.position) <= ObjLife.Range)
                        {
                            num = 12;
                        }
                        else
                        {
                            num = 11;
                        }
                    }

                    //	//
                    //	//실행할 동작 - 삭제할 부분
                    //	Debug.Log(num);
                    //	string temp;
                    //	AITree.Instance.AIDic.TryGetValue(num, out temp);
                    //	Debug.Log(temp);
                    //	//실행할 동작 - 삭제할 부분

                    switch (num)
                    {
                    case 0:
                    {
                        //ani.SetBool("Stop", true);
                        ani.SetBool("IsMove", false);
                        time = Time_Nature_Stop;
                        break;
                    }

                    case 1:
                    {
                        ani.SetBool("Stop", false);
                        ani.SetBool("IsMove", true);
                        time            = Time_Nature_Move;
                        msg.time        = time;
                        msg.destination = Stage5Pos.GetRandomPos();
                        msg.Speed       = ObjLife.Speed;
                        NCommand.NatureMove(msg);
                        break;
                    }

                    case 2:
                    {
                        ani.SetBool("Stop", false);
                        ani.SetBool("IsMove", false);
                        time = Time_Nomal_StopMotion;
                        break;
                    }

                    case 3:
                    {
                        time = Time_Nomal_MoveWay;
                        break;
                    }

                    case 10:
                    {
                        time = Time_Taget_Search;
                        break;
                    }

                    case 11:
                    {
                        ani.SetBool("Stop", false);
                        ani.SetBool("IsMove", true);
                        ani.SetBool("IsAttack", false);
                        time            = Time_Battle_Move;
                        msg.time        = time;
                        msg.destination = Player.position;
                        msg.Speed       = ObjLife.BattleSpeed;
                        BCommand.BattleMove(msg);
                        break;
                    }

                    case 12:
                    {
                        ani.SetBool("Stop", false);
                        ani.SetBool("IsMove", false);
                        ani.SetBool("IsAttack", true);
                        time = Time_Normal_Attack;
                        BCommand.Attack(time, isRange);
                        break;
                    }

                    default:
                        time = 1.0f;
                        break;
                    }
                    prevFight = Fight;
                }
                Limit += 0.1f;
                yield return(new WaitForSeconds(0.1f));
            }
        }
    }