전체 글 75

[7/11] Unity 게임 제작 프로젝트 중간 점검

🧠 배운 점 / 느낀 점평소엔 일주일간 진행되는 프로젝트를 많이 했었고 어느정도 완성도 있게 게임을 만들었었는데, 이번엔 시간을 더 썼음에도 불구하고 게임이 돌아가지도 않게 미완성으로 중간 점검을 하게 되어서 내 자신이 좀 실망스러웠다.팀원 중 한명만 앞으로 달려간다고 게임이 빨리 만들어지지 않는다는 것을 느꼈고, 진짜 협업은 생각보다 더 어렵구나 느꼈다.회의를 많이 한것은 좋았으나, 목적과 결과 없이 회의를 진행하다보니 쓸데없는 이야기로 시간이 많이 허비됐다. 다음엔 회의를 열기 전에 미리 정하고 시작해야겠다.

TIL 2025.07.16

[7/14] Canvas 위가 아닌 Camera 배경으로 배경 이미지와 캐릭터 넣기

🎮 오늘 한 일UI Canvas 위가 아닌 Camera 배경으로 배경 이미지와 캐릭터를 넣고 싶어서 실험 진행Quad 오브젝트를 생성하여 씬에 배치Material 을 생성하여 배경 이미지를 넣음 (캐릭터도 마찬가지)해당 Material 을 Quad 오브젝트에 드래그해서 적용배경과 캐릭터가 월드 공간에서 자연스럽게 카메라에 보임🧠 배운 점 / 느낀 점Canvas의 Render Mode를 Screen Space - Overlay로 하면 UI와 배경/캐릭터가 완전히 분리됨.UI를 World Space로 하려면 카메라 거리, 크기 모두 신경써야한다.2D 스타일 배경이나 캐릭터 쓸 때는 Albedo만 잘 써도 충분히 자연스러워 보인다.

TIL 2025.07.16

[7/15] 객체 역할 분리의 중요성 및 구조 설계를 고민해야 하는 이유

🧠 배운 점객체 역할 분리의 중요성배틀 매니저에 전투 전환, UI 동기화, 적 생성/제거, 전투 결과 처리 등 너무 많은 책임이 몰려 있는 구조는추후 유지보수나 확장에 매우 불리함.→ 역할을 나눠서 객체 분산 필요 (예: 전투 결과 처리 전용 매니저, UI 매니저 등)하드코딩 지양공격 시간이나 상태값 등을 직접 숫자나 문자열로 입력한 부분이 많았고,transform.GetChild() 같은 인덱스 기반 접근 방식은 구조 변경에 매우 취약하다는 피드백.→ SerializeField, Enum, Dictionary, 상태패턴 등으로 구조화 필요.상태 관리의 일관성 부족enum은 선언돼 있지만 실제 처리는 if, switch로 분산되어 있어,추후 수정 시 여러 곳을 동시에 건드려야 하는 비효율적인 구조였음...

TIL 2025.07.15

[7/10] 기존 UI 구조에 외부 에셋 통합 작업

🎮 오늘 한 일기존 UI 구조에 외부 에셋 통합 작업 진행MessagePopup 기능 테스트 및 AnimationRect와의 병행 여부 실험팝업 애니메이션 연출 방식 결정 (MessagePopup의 DOTween만 사용하기로 정리)하이어라키 구조 정리에 따라 팝업 오브젝트 재배치 및 정돈TMP SubMeshUI 컴포넌트 자동 생성 현상 확인 및 원리 파악🧠 배운 점 / 느낀 점TMP SubMeshUI는 TextMeshPro의 내부 렌더링용 오브젝트이며 삭제해도 자동 생성되므로 신경 쓸 필요 없음SetActive(true) → alpha = 0 → DOFade(1) 순서로 써도 무방하지만, alpha 설정을 먼저 하면 깜빡임을 줄일 수 있음AnimationRect는 여러 UI의 순차 등장에 유용하지만,..

TIL 2025.07.11

[7/9] 팝업 애니메이션 정리

🎮 오늘 한 일팝업 애니메이션 관련 정리기존 패널 컨트롤러에서 팝업 메시지 스크립트로 책임 분리애니메이션Rect 스크립트와 MessagePopup 간 역할 차이 정리팝업에 DOTween 연출 적용 방식 점검 및 최종적으로 애니메이션Rect 제거 결정UI Fade 연출 시 CanvasGroup.alpha와 SetActive 호출 순서 최적화스태미나 부족 팝업 연결 및 페이드 인 적용TMP SubMeshUI 이슈 확인🧠 배운 점 / 느낀 점AnimationRect는 여러 UI 요소의 등장 방향/스케일 등을 연출할 수 있는 범용 연출 컴포넌트지만, 단일 팝업에선 MessagePopup의 DOTween만으로도 충분하다 판단되어 제거DOTween 연출 시 CanvasGroup.alpha = 0을 먼저 주고 S..

TIL 2025.07.11

[7/8] DOTween 애니메이션 도입

🎮 오늘 한 일팝업에 DOTween으로 애니메이션 도입→ 알파값 페이드 + 팝업 살짝 튀는 스케일 애니메이션 적용→ CanvasGroup 이용해서 부드럽게 나타나고 사라지게 처리기존 MessagePopup에 직접 적용→ 버튼 유무에 따라 노출 분기 처리 그대로 유지→ 애니메이션만 자연스럽게 붙임🧠 배운 점 / 느낀 점CanvasGroup 알파값으로 fade 처리하면 자연스러움→ 단순 SetActive보다 훨씬 좋음cgFade = GetComponent() 로 자동 할당 가능→ 인스펙터에서 비워둬도 문제 없음DOFade() → 알파값 변화, DOScale() → 튀는 느낌 연출→ 팝업 연출은 이 두 개로도 충분함애니메이션이 필요한 UI는 AnimationRect 쪽 활용도 고려 가능→ 현재는 팝업에만 ..

TIL 2025.07.09

[7/7] UI 에셋 리소스 받아서 교체 진행

🎮 오늘 한 일패널이 켜져 있는데 화면에 UI가 보이지 않는 버그 발생→ 프리팹 설정, 컴포넌트 할당, 코드까지 모두 점검했으나→ 원인은 RectTransform 스케일이 (0, 0, 0) 으로 설정돼 있어서였음UI 에셋 리소스 새로 받아서 교체 진행→ 기존 임시 버튼/아이콘과 크기, 비율이 달라 직접 수정 필요동봉된 PSD 파일을 열어서 필요한 요소 직접 수정/추출하여 커스텀 에셋 제작UI 정렬 문제 해결→ 원래는 Top Bar를 가운데 앵커로 두고, 그 안에 좌/우 UI를 배치했으나→ 좌우 비율이 긴 디바이스에서 중앙에 몰림 현상 발생→ 해결: Top Bar 제거하고 좌측 UI는 앵커를 왼쪽 상단, 우측 UI는 오른쪽 상단으로 각각 개별 배치하여 해결🧠 배운 점 / 느낀 점UI가 안 보일 때는 a..

TIL 2025.07.07

[7/4] 게임 MVP 제작을 위해 프로젝트 전체적으로 정리

🎮 오늘 한 일안 쓰는 스크립트 전부 제거하고 Assets/UI 폴더·하이어라키 전반 정리→ 파일/오브젝트 이름 컨벤션 맞춰서 작업 속도 증가팀 머지씬·프리팹 충돌 해결하고 기능들 병합버그 수정특정 버튼 클릭 시 패널이 안 열리던 현상코드 라인-바이-라인 디버깅했지만 문제가 없었음결국 Inspector에 잘못 연결된 Reference가 원인 → 올바른 프리팹으로 다시 할당해 해결🧠 배운 점 / 느낀 점“코드보다 인스펙터 먼저”버그 재현이 깔끔한데 스크립트에서 원인이 안 보이면, 거의 레퍼런스 실수다.하이어라키·프로젝트 창 정리만으로도 작업 속도가 빨라진다.머지 전 “불필요 스크립트/프리팹 제거” → 충돌 난이도 확연히 낮아짐.

TIL 2025.07.05

[7/3] 여러 판넬들 대신 하나의 판넬이 모든 역할을 하도록 리팩토링

🎮 오늘 한 일MessagePopup 통합CheckPanel / YesNoPanel → MessagePopup 하나로 리팩토링YES/NO 버튼 자동 토글, Action onYes / onNo 콜백으로 재사용성 확보SelectAdventureUIController 개편모든 경고·확인 창을 messagePopup.Open() 한 줄로 처리스태미나/쥬얼 소모 로직을 UserDataManager API (UseStamina / UseJewel) 로 이관UserDataManager 싱글톤 작성Use / Add 계열 메서드 → 값 갱신 후 PublicUIController.Refresh() 자동 호출실수 방지를 위해 리소스 부족 시 false 반환하도록 설계HUD 모드 추가HudMode.Character 등 새 ..

TIL 2025.07.04

[6/27] 씬 전환 히스토리를 Stack 에 저장하여 뒤로가기 기능 구현

🎮 오늘 한 일SceneManagerEx 싱글톤 구현LoadScene(), LoadPreviousScene() 을 통해 씬 이동을 제어씬 전환 히스토리를 sceneStack 에 저장하여 뒤로가기 기능 구현DontDestroyOnLoad 로 로비씬에서 생성된 매니저를 유지시킴뒤로가기 버튼 공용화SceneBackButton 스크립트 생성 → SceneManagerEx.Instance.LoadPreviousScene() 호출이 스크립트를 적용한 SceneBackButton 프리팹을 제작해 씬마다 재사용덕분에 OnClick() 연결이 쉬워졌고, 직접 코드로 AddListener() 안 써도 됨씬 이동용 버튼도 공통 처리SceneLoadButton 스크립트 작성 → sceneName 을 인스펙터에서 설정해 Lo..

TIL 2025.07.02