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; animator.SetBool("IsTrace", false); break; case State.TRACE: // 추적 시작 agent.SetDestination(playerTr.position); agent.isStopped = false; animator.SetBool("IsAttack", false); animator.SetBool("IsTrace", true); break; case State.ATTACK: animator.SetBool("IsAttack", true); break; case State.DIE: break; } yield return new WaitForSeconds(0.3f); } } void OnCollisionEnter(Collision coll) { if (coll.collider.CompareTag("BULLET")) { Destroy(coll.gameObject); animator.SetTrigger("Hit"); } } }