Example #1
0
    //상태 진입
    public override void Enter()
    {
        m_Core.monState = topState;                                                     //몬스터의 현재 상태는 Patrol입니다
        patrolState     = M_PatrolState.RandomPatrol;                                   //시작은 랜덤부터

        Random.seed            = (int)System.DateTime.Now.Ticks;                        //랜덤값의 시드를 무작위로 만든다
        nowPatrolWayPointIndex = Random.Range(0, patrolWayPoints.Length - 1);           //인덱스 랜덤 선택
        patrolTimeCounter      = 0.0f;

        //////Debug.Log("Enter Patrol");
    }
Example #2
0
    //랜덤 위치로 이동
    void RandomPatrol()
    {
        patrolTimeCounter += (Time.deltaTime + m_Core.delayTime);     //시간 계속 카운트

        //순찰 시간 제한을 넘기면 플레이어 쪽으로 이동
        if (patrolTimeCounter > patrolTimeLimit)
        {
            patrolState = M_PatrolState.GoToPlayerPatrol;
        }


        //현재 선택된 순찰 지점에 도착하면
        if (Vector3.Distance(m_Core.Tr.position, patrolWayPoints[nowPatrolWayPointIndex].position) < 1.0f)
        {
            m_Core.delayTime = waitTimeToArrive;                                        //다음 움직임까지 일정 시간 대기

            int tempPrevIndex = nowPatrolWayPointIndex;                                 //이전 인덱스 저장

            //다음에 갈 인덱스를 랜덤으로 선정 (이전 인덱스와 겹치지 않도록 한다)
            while (true)
            {
                Random.seed            = (int)System.DateTime.Now.Ticks;                //랜덤값의 시드를 무작위로 만든다
                nowPatrolWayPointIndex = Random.Range(0, patrolWayPoints.Length - 1);

                if (!nowPatrolWayPointIndex.Equals(tempPrevIndex))
                {
                    break;
                }
            }
        }

        //지정 순찰 위치까지 이동
        m_Core.NvAgent.Resume();
        m_Core.NvAgent.destination = patrolWayPoints[nowPatrolWayPointIndex].position;
        m_Core.SetDestinationRealtime(false, null);
        m_Core.Animator.SetBool("IsRunning", true);
    }