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

4.4 KiB

Gemini가 프로젝트 작성을 위해 헬퍼로서 해야 할 행동 규칙

이 문서는 Gemini가 프로젝트를 작성하는 데 도움이 되는 행동 규칙을 정한다. 이 규칙들은 프로젝트의 일관성과 품질을 유지하는 데 중요합니다.

1. 공통

  • 프로젝트 내의 코드를 변경하거나, 파일을 생성하라고 따로 프롬프트에 요청하지 않는 한 gemini는 프로젝트 내의 코드를 변경하거나, 파일을 생성하지 않습니다.
  • 코드의 작성을 요청받은 경우, 코드는 항상 터미널 창에서 보여주며 코드의 직접적인 작성은 사용자이며 개발자가 직접 작성한다.
  • 코드의 작성을 요청했다고 하나 gemini가 작성한 코드가 실질적으로 사용자에 의해 작성되지 않을 수 있기에 gemini는 항시 해당 파일의 최신 버전을 확인해서 사용자가 작성한 코드와 gemini가 확인하는 코드가 일치하는지 확인한다.
  • 프로젝트를 전체적으로 확인하라고 요청받은 경우, gemini는 프로젝트의 모든 파일을 확인하고, 각 파일의 역할과 기능을 숙지하고 있는다.
  • 이때 자신이 기록했던 코드들이 캐시에 남아있을 경우 캐시를 초기화하고, 프로젝트의 모든 파일을 처음부터 다시 확인한다.

Gemini To-Do List

작성 규칙

  1. [날짜] [할 일] - [상태] 의 형태로 작성한다.
  2. 다음 날의 To-Do 를 작성하기 전에 구분선을 작성해서 날짜별로 구분한다.

[2025-09-23] EnemyController.cs 리팩토링 (상태 머신 적용) - 대기 [2025-09-23] AI_State를 상속받는 상태 클래스들 생성 (Idle, Patrol, Chase, Attack, Die) - 대기 [2025-09-23] Movement_Ground.cs 기능 확인 및 필요 기능 구현 - 대기

상세

To-Do 리스트에 해야할 내용을 상세하게 작성한다.

1. EnemyController.cs 리팩토링

  • 목표: 기존의 enum-switch 구조를 AI_State 기반의 상태 머신 패턴으로 변경하여, 코드의 확장성과 유지보수성을 높입니다.
  • 세부 작업:
    • EnemyBehavior enum과 Behavior 프로퍼티를 제거합니다.
    • private AI_State _currentState; 변수를 추가하여 현재 상태를 관리합니다.
    • public void ChangeState(AI_State newState) 메서드를 구현합니다. 이 메서드는 기존 상태의 Exit()를 호출하고, 새 상태의 Enter()를 호출하여 상태를 안전하게 전환합니다.
    • Update() 메서드를 _currentState.Update(); 한 줄으로 수정하여, 현재 상태의 로직만 실행되도록 합니다.
    • EnemyData를 외부에서 받아 Status_Enemy를 포함한 각종 능력치를 초기화하는 Init(EnemyData data) 메서드를 구현합니다.

2. 상태 (State) 클래스 생성

  • 목표: 적의 각 행동 패턴(대기, 순찰, 추격 등)을 독립적인 클래스로 분리하여 관리합니다.
  • 세부 작업:
    • Assets/Scripts/AI/States/ 폴더 내에 아래의 클래스들을 생성합니다. 모든 클래스는 AI_State를 상속받습니다.
    • IdleState.cs: 제자리에서 대기하며, Update()에서 플레이어 탐지 등 다른 상태로 전환될 조건을 확인합니다.
    • PatrolState.cs: 지정된 경로를 따라 순찰합니다. Movement_Ground 컴포넌트를 사용하여 이동합니다.
    • ChaseState.cs: 플레이어를 향해 추격합니다. Movement_Ground 컴포넌트를 사용하며, 플레이어와의 거리에 따라 AttackState로 전환될 수 있습니다.
    • AttackState.cs: 플레이어를 공격합니다. 공격 쿨타임 등을 관리하며, 플레이어가 범위를 벗어나면 ChaseState로 다시 전환될 수 있습니다.
    • DieState.cs: 사망 시 처리(애니메이션, 아이템 드랍 등)를 담당합니다.

3. Movement_Ground.cs 기능 확인

  • 목표: 상태 클래스들이 적을 움직이는 데 필요한 기능이 Movement_Ground에 모두 준비되어 있는지 확인하고, 없다면 구현합니다.
  • 세부 작업:
    • Movement_Ground.cs 코드를 분석합니다.
    • PatrolStateChaseState에서 사용할 기능이 있는지 확인합니다.
      • 특정 지점으로 이동시키는 MoveTo(Vector3 destination)
      • 이동을 멈추는 Stop()
    • 만약 기능이 없다면, NavMeshAgent를 사용하는 등의 방식으로 해당 기능들을 구현할 것을 제안합니다.