// 적 캐릭터의 상태를 검사하는 코루틴 함수 IEnumerator CheckState() { // 오브젝트 풀에 생성 시 다른 스크립트의 초기화를 위해 대기 yield return(new WaitForSeconds(1.0f)); // 적 캐릭터가 사망하기 전까지 도는 무한 루프 while (!isDie) { // 상태가 사망이면 코루틴 함수를 종료시킴 if (state == State.DIE) { yield break; } // 주인공과 적 캐릭터 간의 거리를 계산 float dist = Vector3.Distance(playerTr.position, enemyTr.position); // 공격 사정거리 이내인 경우 if (dist <= attackDist) { // 주인공과의 거리에 장애물 여부를 판단 if (enemyFOV.isViewPlayer()) { // 장애물이 없으면 공격 모드 state = State.ATTACK; } else { // 장애물이 있으면 추적 모드 state = State.TRACE; } } // 추적 반경 및 시야각에 들어왔는지 판단 else if (enemyFOV.isTracePlayer()) { state = State.TRACE; } // 그 이외 else { state = State.PATROL; } // 0.3초 동안 대기하는 동안 제어권을 양보 yield return(ws); } }
IEnumerator CheckState() { //오브젝트 풀에 생성 시 다른 스크립트의 초기화를 위해 대기 yield return(new WaitForSeconds(1.0f)); while (!isDie) { if (state == State.DIE) { Debug.Log("죽은 상태"); yield break; } float dist = Vector3.Distance(playerTr.position, enemyTr.position); if (dist <= attackDist) { //state = State.ATTACK; //주인공과의 거리에 장애물 여부를 판단 if (enemyFOV.isViewPlayer()) { Debug.Log("여기는 if"); state = State.ATTACK; //장애물이 없으면 공격모드 있으면 추적모드 } else { state = State.TRACE; Debug.Log("여기는 else"); } }//추적 반경 및 시야각에 드러왔는지 판단 else if (enemyFOV.isTracePlayer()) { Debug.Log("여기는 else if"); state = State.TRACE; } else { state = State.PATROL; } yield return(ws); } }
IEnumerator CheckState() { yield return(new WaitForSeconds(1.0f)); while (!isDie) { //상태 사망이면 코루틴 종료 if (state == STATE.STATE_DIE) { yield break; } //Player와 Enemy의 거리 계산 float dist = Vector3.Distance(playerTr.position, enemyTr.position); //공격 및 추적 사거리 이내인 경우 if (dist <= attackDist) { if (enemyFOV.isViewPlayer()) { state = STATE.STATE_ATTACK; //장애물 없으면 공격 } else { state = STATE.STATE_TRACE; //장애물 있으면 추적 } }//추적 반경 및 시야각에 들어왔는지 판단 else if (enemyFOV.isTracePlayer()) { state = STATE.STATE_TRACE; } else { state = STATE.STATE_PATROL; } yield return(ws); } }
//적 캐릭터의 상태를 검사하는 코루틴 함수 IEnumerator CheckState() { yield return(new WaitForSeconds(1.0f)); //적 캐릭터가 사망전까진 무한 루프 while (!isDie) { //상태가 사망이면 코루틴 함수를 종료시킴 if (state == State.DIE) { yield break; } //주인공과 적 캐릭터 간의 거리를 float dist = Vector3.Distance(playerTr.position, enemyTr.position); //공격 사거리 이내인 경우 if (dist <= attackDist) { if (enemyFOV.isViewPlayer()) { state = State.ATTACK; } else { state = State.TRACE; } } else if (enemyFOV.isTracePlayer()) { state = State.TRACE; } else { state = State.PATROL; } //0.3초 대기하는 동안 제어권을 양보 yield return(ws); } }
IEnumerator CheckState() { yield return(new WaitForSeconds(1.0f)); while (!isDie) { if (state == State.DIE) { yield break; } float dist = Vector3.Distance(playerTr.position, enemyTr.position); if (dist <= attackDist) { if (enemyFOV.isViewPlayer()) { state = State.ATTACK; } else { state = State.TRACE; } } else if (enemyFOV.isTracePlayer()) { state = State.TRACE; } //else if (dist <= traceDist) //{ // state = State.TRACE; //} else { state = State.PATROL; } yield return(ws); } }