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

작업 개요
기존의 페이즈(Phase) 기반 턴 시스템(아군 턴 -> 적 턴)을 제거하고, 각 유닛의 속도(Speed)와 CT(Charge Time)에 따라 개별적으로 턴이 돌아오는 CT 턴 시스템을 구현했습니다. 또한 유닛 행동 시 카메라 포커스 연출을 추가하여 전투의 역동성을 높였습니다.
주요 변경 사항
1. CT 턴 시스템 (Charge Time Battle System)
- 개별 턴 루프 구현:
BattleManager의StartPlayerTurn/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) 제거 과정에서BattleUI및BattleManager곳곳에 남아있던 참조 코드를 수정했습니다.팀 구분 식별성 강화 (Team Color Indicators)
개요
전투 중 아군과 적군 유닛의 식별이 어렵다는 피드백을 반영하여, 유닛 발 밑에 소속을 나타내는 색상 링(Ring)을 추가함.
구현 상세
- 리소스 추가
Assets/Resources/UI/TeamRing.prefab: 유닛 발 밑에 표시될 링 프리팹 (SpriteRenderer 포함).Assets/Art/Sprites/TeamRing.png: 파이썬 스크립트로 생성한 깔끔한 원형 링 텍스처 (No-pattern).
- 스크립트 변경 (
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로 설정하여 바닥 타일에 딱 붙으면서도 묻히지 않도록 조정. SortingOrder를20으로 설정하여 타일 그리드/이동 범위 오버레이보다 위에 그려지도록 처리.
- 유닛 모델의 Scale 변경(애니메이션 등)에 영향을 받지 않도록
결과
- 유닛의 외형이나 크기에 상관없이 일관된 크기와 위치에 팀 식별 링이 표시됨.
- 복잡한 지형 위에서도 아군/적군 구분이 명확해짐.
유닛 성장 데이터 및 배틀 UI 개선 (Unit Growth & Battle UI)
1. 유닛 성장 데이터 리팩토링 (Unit Stats Refactoring)
- 데이터 기반 성장 시스템:
JobGrowthDataScriptableObject를 도입하여, 코드로 하드코딩되어 있던 직업별 성장치를 데이터 에셋으로 분리했습니다. - 구조 변경:
Unit.cs와UnitStats.cs가 이제UnitData에 연결된 성장 데이터를 참조하여 레벨업 시 스탯을 계산합니다.
2. 배틀 UI 개선 (Battle UI Improvements)
- 레이아웃 최적화:
SkillListUI의 버튼 크기를 축소(360x70)하고ContentSizeFitter를 적용하여 목록 가독성을 높였습니다. - 스크롤 뷰 구조 변경: 기존의 단순 패널 구조에서
Scroll View->Viewport->Content의 표준 UGUI 스크롤 구조로 변경하여 스크롤링 기능을 안정화했습니다.- Note: 초기에는 코드로 자동 생성하려 했으나, 제어의 어려움으로 인해
BattleCanvas.prefab자체를 수정하는 방식으로 확정했습니다.
- Note: 초기에는 코드로 자동 생성하려 했으나, 제어의 어려움으로 인해
3. UI 테스트 환경 구축 (UI Test Environment)
UITestScene신설: 게임플레이 로직 없이 UI만 독립적으로 테스트할 수 있는 씬을 만들었습니다.UITestController: 더미 데이터를 생성하고 UI 패널을 열고 닫는 기능을 제공하여, 빠른 이터레이션이 가능하도록 돕습니다.
4. 실패 및 보류 사항 (Known Issues & Deferred Tasks)
- 스킬/아이템 UI 세부 조정 중단: 스크롤 뷰 구조 변경 외의 세밀한 UI 배치나 아이템 리스트 디자인 수정 작업은 반복적인 에디터 스크립트 실행 실패와 복잡도로 인해 중단되었습니다.
- 추후 계획: 해당 UI의 디자인 및 세부 배치는 추후 사용자가 직접 에디터에서 수정하기로 결정했습니다. 현재 구조는 기능적으로 스크롤이 가능한 상태까지만 구현되어 있습니다.
숙련도 올릴겸 온전히 프롬프트로만 UI작업했는데 결국 세밀한 부분에서 실패... 이것도 직접 수정예정
반응형
'AI > Unity' 카테고리의 다른 글
| 2월 5일 개발일지 - 프로젝트 "Sdokucat" (0) | 2026.02.06 |
|---|---|
| # 📅 2026년 2월 4일 개발일지 - 프로젝트 "Sdokucat" 🐾 (0) | 2026.02.05 |
| AnityGravity를 사용해서 상점 개선(취중 바이브코딩...) 개발로그. (2) | 2026.02.03 |
| Antigravity로 Unity와 ComfyUI연동하여UI 및 Sound 자동화 (2) | 2026.02.01 |
| ComfyUI 자동화 개발로그 (0) | 2026.01.31 |