AI/Unity

# 2026-02-03 개발 로그: CT 턴 시스템 구현 및 카메라 연출

blacknabis 2026. 2. 4. 00:42

2026-02-03 개발 로그: CT 턴 시스템 구현 및 카메라 연출

턴방식 대 개편

작업 개요

기존의 페이즈(Phase) 기반 턴 시스템(아군 턴 -> 적 턴)을 제거하고, 각 유닛의 속도(Speed)와 CT(Charge Time)에 따라 개별적으로 턴이 돌아오는 CT 턴 시스템을 구현했습니다. 또한 유닛 행동 시 카메라 포커스 연출을 추가하여 전투의 역동성을 높였습니다.

주요 변경 사항

1. CT 턴 시스템 (Charge Time Battle System)

  • 개별 턴 루프 구현: BattleManagerStartPlayerTurn/StartEnemyTurn 페이즈 루프를 제거하고, TurnLoop 코루틴을 통해 실시간으로 CT를 계산하는 구조로 변경했습니다.
  • Time Leap 알고리즘: 가장 빠른 유닛이 행동 가능할 때까지 모든 유닛의 CT를 즉시 가속시켜 불필요한 대기 시간을 없앴습니다.
  • Turn Order 예측: 현재 CT와 속도를 기반으로 향후 12턴의 순서를 미리 계산하여 UI에 표시하는 로직을 업데이트했습니다.

2. 전투 조작감 개선 (UX Refinement)

  • 자동 선택 (Auto-Select): 내 유닛의 턴이 돌아오면 플레이어가 별도로 클릭하지 않아도 즉시 해당 유닛이 선택되고 이동 범위가 표시됩니다.
  • 선택 제한 (Restricted Selection): 현재 턴이 아닌 아군 유닛을 클릭할 경우 정보창만 표시하며, 이동/행동 조작 메뉴가 뜨지 않도록 제한했습니다. 이로써 조작 실수를 방지합니다.
  • 레거시 제거: 불필요해진 BattlePhase.PlayerTurn, BattlePhase.EnemyTurn 상태를 완전히 삭제하고 BattlePhase.Battle 단일 상태로 통합했습니다.

3. 카메라 연출 (Dynamic Camera Focus)

  • Active Unit Focus: 턴이 시작된 유닛에게 카메라가 부드럽게 이동하는 연출을 추가했습니다.
  • Quarter View 보정: 단순히 유닛의 좌표로 이동하는 것이 아니라, 현재 카메라의 쿼터뷰(45도) 각도와 줌 레벨을 고려한 오프셋(Offset)을 계산하여 유닛이 화면 중앙에 오도록 구현했습니다. (Plane.Raycast 활용)

트러블슈팅

  • 컴파일 에러 수정: 레거시 페이즈(PlayerTurn) 제거 과정에서 BattleUIBattleManager 곳곳에 남아있던 참조 코드를 수정했습니다.팀 구분 식별성 강화 (Team Color Indicators)

개요

전투 중 아군과 적군 유닛의 식별이 어렵다는 피드백을 반영하여, 유닛 발 밑에 소속을 나타내는 색상 링(Ring)을 추가함.

구현 상세

  1. 리소스 추가
    • Assets/Resources/UI/TeamRing.prefab: 유닛 발 밑에 표시될 링 프리팹 (SpriteRenderer 포함).
    • Assets/Art/Sprites/TeamRing.png: 파이썬 스크립트로 생성한 깔끔한 원형 링 텍스처 (No-pattern).
  2. 스크립트 변경 (Unit.cs)
    • SetupTeamRing(): 유닛 초기화 시 링 프리팹을 Resources.Load로 불러와 인스턴스화.
    • 색상 구분:
      • 아군 (Player): Vivid Blue (0.2, 0.6, 1.0)
      • 적군 (Enemy): Crimson (0.9, 0.1, 0.2)
    • 크기 및 위치 보정 (LateUpdate):
      • 유닛 모델의 Scale 변경(애니메이션 등)에 영향을 받지 않도록 LateUpdate에서 World Scale을 0.7로 강제 고정.
      • Y축 위치를 0.05로 설정하여 바닥 타일에 딱 붙으면서도 묻히지 않도록 조정.
      • SortingOrder20으로 설정하여 타일 그리드/이동 범위 오버레이보다 위에 그려지도록 처리.

결과

  • 유닛의 외형이나 크기에 상관없이 일관된 크기와 위치에 팀 식별 링이 표시됨.
  • 복잡한 지형 위에서도 아군/적군 구분이 명확해짐.

유닛 성장 데이터 및 배틀 UI 개선 (Unit Growth & Battle UI)

1. 유닛 성장 데이터 리팩토링 (Unit Stats Refactoring)

  • 데이터 기반 성장 시스템: JobGrowthData ScriptableObject를 도입하여, 코드로 하드코딩되어 있던 직업별 성장치를 데이터 에셋으로 분리했습니다.
  • 구조 변경: Unit.csUnitStats.cs가 이제 UnitData에 연결된 성장 데이터를 참조하여 레벨업 시 스탯을 계산합니다.

2. 배틀 UI 개선 (Battle UI Improvements)

  • 레이아웃 최적화: SkillListUI의 버튼 크기를 축소(360x70)하고 ContentSizeFitter를 적용하여 목록 가독성을 높였습니다.
  • 스크롤 뷰 구조 변경: 기존의 단순 패널 구조에서 Scroll View -> Viewport -> Content의 표준 UGUI 스크롤 구조로 변경하여 스크롤링 기능을 안정화했습니다.
    • Note: 초기에는 코드로 자동 생성하려 했으나, 제어의 어려움으로 인해 BattleCanvas.prefab 자체를 수정하는 방식으로 확정했습니다.

3. UI 테스트 환경 구축 (UI Test Environment)

  • UITestScene 신설: 게임플레이 로직 없이 UI만 독립적으로 테스트할 수 있는 씬을 만들었습니다.
  • UITestController: 더미 데이터를 생성하고 UI 패널을 열고 닫는 기능을 제공하여, 빠른 이터레이션이 가능하도록 돕습니다.

4. 실패 및 보류 사항 (Known Issues & Deferred Tasks)

  • 스킬/아이템 UI 세부 조정 중단: 스크롤 뷰 구조 변경 외의 세밀한 UI 배치나 아이템 리스트 디자인 수정 작업은 반복적인 에디터 스크립트 실행 실패와 복잡도로 인해 중단되었습니다.
  • 추후 계획: 해당 UI의 디자인 및 세부 배치는 추후 사용자가 직접 에디터에서 수정하기로 결정했습니다. 현재 구조는 기능적으로 스크롤이 가능한 상태까지만 구현되어 있습니다.

숙련도 올릴겸 온전히 프롬프트로만 UI작업했는데 결국 세밀한 부분에서 실패... 이것도 직접 수정예정

반응형