Exemplo n.º 1
0
    // 적 캐릭터의 상태를 검사하는 코루틴 함수
    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);
        }
    }
Exemplo n.º 2
0
    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);
        }
    }
Exemplo n.º 3
0
    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);
        }
    }
Exemplo n.º 4
0
    //적 캐릭터의 상태를 검사하는 코루틴 함수
    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);
        }
    }
Exemplo n.º 5
0
    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);
        }
    }