Practice_Unity/Assets/Scripts/Controllers/EnemyController.cs
Seonkyu.kim ba665c50ce 작업
1. 카메라 컨트롤러 작성
2. Data 매니저 작성
3. 몬스터 세팅 시작
4. Gemini 환경 설정 등록
2025-09-23 17:58:22 +09:00

90 lines
2.7 KiB
C#

using System;
using Unity.VisualScripting;
using UnityEngine;
using UnityEngine.AI;
using EnemyType = Define.EnemyType;
//EnemyController는 몬스터의 '뇌' 역할을 하며, 상태 머신 패턴을 기반으로 동작하고, 외부에서 데이터를 주입받아 초기화되는 구조로 설계하기
public class EnemyController : MonoBehaviour
{
private Movement_Ground _movement;
private Status _status;
[SerializeField] private EnemyType _type = EnemyType.Unknown;
[SerializeField] private TextAsset _path = null;
// EnemyDict = _data.LoadToDict<EnemyGroupDataLoader, string, EnemyData>("Data/enemy_group_data", (enemy) => enemy.id);
enum EnemyBehavior
{
Idle,
Move,
Attack,
Die
}
private EnemyBehavior _behavior = EnemyBehavior.Idle;
private EnemyBehavior Behavior
{
get { return _behavior; }
set
{
_behavior = value;
switch (_behavior)
{
case EnemyBehavior.Die:
case EnemyBehavior.Idle:
_movement.Stop();
break;
case EnemyBehavior.Move:
break;
case EnemyBehavior.Attack:
_movement.Stop();
break;
}
}
}
private void Awake()
{
this.AddComponent<Movement_Ground>();
}
void Start()
{
}
void Update()
{
}
void OnMove()
{
}
}
/*
* 행동 패턴
* - 종류 : Idle(대기), Patrol(순찰), Chase(추적), Run(도망), Return(귀환), Hide(숨기), Fight(싸우기)
* 1. Idle : 제자리에서 대기
* 2. Patrol : 지정된 경로를 따라 순찰
* 3. Chase : 플레이어를 발견하면 추적
* 4. Run : (옵션) 체력이 너무 낮으면 도망
* 5. Return : 일정 시간 동안 플레이어를 찾지 못하면 원래 위치로 귀환
* 6. Hide : 플레이어의 시야에서 벗어나 숨기
* 7. Fight : 플레이어와 일정 거리 내에 들어오면 싸우기
* - 행동 전환
* 1. Idle -> Patrol : 일정 시간 후
* 2. Idle/Patrol -> Chase : 플레이어 발견 시
* 2.1. 플레이어 발견 조건 : 시야각, 거리, 장애물 유무 등
* 3. Idle/Patrol/Chase -> Run : (옵션) 체력이 일정 이하로 떨어지면
* 4. Idle/Patrol/Chase/Run -> Fight : 플레이어와 일정 거리 내에 들어오면
* 5. Patrol -> Idle : 일정 시간 동안 움직이지 않으면
* 6. Patrol/Chase/Run/Fight -> Return : 플레이어를 일정 시간 동안 찾지 못하면
* 7. Patrol/Chase/Run/Fight -> Hide : 플레이어의 시야에서 벗어나면
*/