using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; public class MonsterController : MonoBehaviour { public enum State { IDLE, TRACE, ATTACK, DIE } public State monsterState; public float attackDist = 2.0f; public float traceDist = 10.0f; public bool isDie = false; public Transform playerTr, monsterTr; private NavMeshAgent agent; private Animator animator; // Start is called before the first frame update void Start() { playerTr = GameObject.Find("Player").GetComponent(); monsterTr = transform; agent = GetComponent(); animator = GetComponent(); StartCoroutine(CheckMonsterState()); StartCoroutine(MonsterAction()); } IEnumerator CheckMonsterState() { while (!isDie) { // 거리 계산 float distance = Vector3.Distance(playerTr.position, monsterTr.position); if (distance <= attackDist) { monsterState = State.ATTACK; } else if (distance <= traceDist) { monsterState = State.TRACE; } else { monsterState = State.IDLE; } yield return new WaitForSeconds(0.3f); } } IEnumerator MonsterAction() { while (!isDie) { switch (monsterState) { case State.IDLE: agent.isStopped = true; break; case State.TRACE: // 추적 시작 agent.SetDestination(playerTr.position); agent.isStopped = false; break; case State.ATTACK: break; case State.DIE: break; } yield return new WaitForSeconds(0.3f); } } }