//상태 진입 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"); }
//랜덤 위치로 이동 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); }