시야감지 작업 완료 에너미 상태 완료 상태 변환 로직 완료 필요한건 todo 파일 보면서 확인 할 것 Todo 1. 에너미 추가학기 위한 path 하는 작업 하기
6.6 KiB
6.6 KiB
To-Do List
작성 규칙
- 날짜를 가장 상위에 작성한다.
- 할일 - 상태를 순서대로 작성한다.
- 다음 날의 To-Do 를 작성하기 전에 구분선을 작성해서 날짜별로 구분한다.
2025-09-23
EnemyController.cs리팩토링 (상태 머신 적용) - 완료 (CurrentState 프로퍼티 사용)AI_State를 상속받는 상태 클래스들 생성 (Idle, Patrol, Chase, Attack, Die) - 대기Movement_Ground.cs기능 확인 및 필요 기능 구현 - 대기
2025-09-24
EnemyController.cs의Init(EnemyData data)메서드 구현 - 완료EnemyData및Status_Enemy정의 확인 및 필요 시 구현 - 완료Assets/Scripts/AI/States/폴더 내에 상태 클래스들 생성 (IdleState.cs,PatrolState.cs,ChaseState.cs,AttackState.cs,DieState.cs) - 완료Movement기본 클래스/인터페이스 및Movement_Ground.cs기능 확인 (MoveTo,Stop메서드) - 완료
2025-09-25
Manager.cs싱글톤 이중 초기화 문제 해결 (제안된 포괄적 수정 적용) - 대기InputActions.Finalize()경고 원인 파악 및 해결 (로그 분석 및Manager.cs수정 후 재확인) - 대기DetectionSystem.cs시각 감지 로직 구현 (변수 오타 수정,Awake()초기화,LayerMask적용,DStage및IsTargetInSightsetter 수정,_targetTransitionDuration제거) - 대기DetectionSystem.cs청각 감지 로직 구현 - 대기Idle_State.cs행동 로직 구현 - 대기Patrol_State.cs행동 로직 구현 - 대기Chase_State.cs행동 로직 구현 - 대기Attack_State.cs행동 로직 구현 - 대기Die_State.cs행동 로직 구현 - 대기
상세
To-Do 리스트에 해야할 내용을 상세하게 작성한다.
1. EnemyController.cs 리팩토링 (완료)
- 목표: 기존의 enum-switch 구조를
AI_State기반의 상태 머신 패턴으로 변경하여, 코드의 확장성과 유지보수성을 높입니다. - 세부 작업:
EnemyBehaviorenum과Behavior프로퍼티를 제거합니다. (완료)private AI_State _currentState;변수를 추가하여 현재 상태를 관리합니다. (완료)public AI_State CurrentState { get; set; }프로퍼티를 구현하여 상태를 안전하게 전환합니다. (완료)Update()메서드를_currentState?.Update();한 줄로 수정하여, 현재 상태의 로직만 실행되도록 합니다. (완료)EnemyData를 외부에서 받아Status_Enemy를 포함한 각종 능력치를 초기화하는Init(EnemyData data)메서드를 구현합니다. (완료)
2. EnemyController.cs의 Init(EnemyData data) 메서드 구현
- 목표:
EnemyController가 외부에서 주입된EnemyData를 기반으로 초기화될 수 있도록 합니다. - 세부 작업:
EnemyData클래스의 정의를 확인합니다. (필요 시 생성) (완료)Status_Enemy클래스의 정의를 확인합니다. (필요 시 생성) (완료)public void Init(EnemyData data)메서드를EnemyController.cs에 추가하고,data를 사용하여_type및_status를 초기화합니다. (완료)_movement컴포넌트가 스포너에 의해 주입되는 방식에 따라_movement참조를 설정하는 로직을 추가합니다.
3. 상태 (State) 클래스 생성
- 목표: 적의 각 행동 패턴(대기, 순찰, 추격 등)을 독립적인 클래스로 분리하여 관리합니다.
- 세부 작업:
Assets/Scripts/AI/States/폴더 내에 아래의 클래스들을 생성합니다. 모든 클래스는AI_State를 상속받습니다.IdleState.cs: 제자리에서 대기하며,Update()에서 플레이어 탐지 등 다른 상태로 전환될 조건을 확인합니다.PatrolState.cs: 지정된 경로를 따라 순찰합니다.Movement컴포넌트를 사용하여 이동합니다.ChaseState.cs: 플레이어를 향해 추격합니다.Movement컴포넌트를 사용하며, 플레이어와의 거리에 따라AttackState로 전환될 수 있습니다.AttackState.cs: 플레이어를 공격합니다. 공격 쿨타임 등을 관리하며, 플레이어가 범위를 벗어나면ChaseState로 다시 전환될 수 있습니다.DieState.cs: 사망 시 처리(애니메이션, 아이템 드랍 등)를 담당합니다.
4. Movement 기본 클래스/인터페이스 및 Movement_Ground.cs 기능 확인
- 목표: 상태 클래스들이 적을 움직이는 데 필요한 기능이
Movement기본 클래스/인터페이스와Movement_Ground에 모두 준비되어 있는지 확인하고, 없다면 구현합니다. - 세부 작업:
Movement기본 클래스 또는 인터페이스의 정의를 확인합니다. (완료)Movement_Ground.cs코드를 분석합니다. (완료)PatrolState와ChaseState에서 사용할 기능이 있는지 확인합니다. (완료)- 특정 지점으로 이동시키는
MoveTo(Vector3 destination)(완료) - 이동을 멈추는
Stop()(완료)
- 특정 지점으로 이동시키는
- 만약 기능이 없다면,
NavMeshAgent를 사용하는 등의 방식으로 해당 기능들을 구현할 것을 제안합니다.
기능 구현을 위한 고려 사항 및 질문
개발 과정에서 논의되었거나 추가적인 확인이 필요한 설계 결정, 구현 방식, 잠재적 문제점 등을 기록한다.
1. EnemyController의 _movement 변수 초기화 방식
- 현황:
EnemyController의_movement변수는Movement타입으로 선언되어 있으며,EnemyController의Awake()메서드에서는 초기화되지 않습니다. - 계획: 스포너 또는 외부 로직에서
GameObject에 적절한Movement컴포넌트(예:Movement_Ground,Movement_Air)를 추가하고,EnemyController의Movement프로퍼티(또는 필드)에 해당 인스턴스를 할당할 예정입니다. - 확인 필요:
- 스포너에서
Movement컴포넌트를GameObject에 추가한 후EnemyController가GetComponent<Movement>()를 통해 참조를 가져올 것인지, - 아니면 스포너가
EnemyController인스턴스에 직접_movement를 할당할 것인지 명확히 해야 합니다. EnemyController의Init(EnemyData data)메서드 내에서_movement참조를 설정하는 로직이 필요할 수 있습니다。
- 스포너에서