2025/05 17

점수 시스템 도입 및 게임 흐름 연동 정리

🎮 오늘 한 일시간 기반 점수 시스템 구현ScoreManager에서 Update()로 시간에 따라 점수 증가StartScoring(), StopScoring(), ResetScore() 메서드 구현으로 점수 흐름 제어점수 변경 시 InGameUI.UpdateScoreText() 호출로 UI 동기화점수 UI 연결InGameUI에 UpdateScoreText(float score) 추가코인과 동일한 스타일로 점수 표시프리팹에서 scoreText 필드 연결 확인 및 적용게임 흐름에 점수 시스템 연동게임 시작 시 ScoreManager.StartScoring() 호출게임 오버 시 StopScoring() 호출리스타트 시 ResetScore(), StartScoring() 호출 4. 게임오버 UI 호출 지연..

TIL 2025.05.31

Pause / GameOver UI 기능 안정화 및 반복 사용 대응 개선

🎮 오늘 한 일1. Pause UI 개선Pause → Resume → Pause 루프에서 두 번째 Pause 시 UI가 뜨지 않던 버그 수정UIManager.Open() 호출 시 Open() 함수에서 버튼 패널 상태를 초기화하도록 수정PauseUI.Open() 오버라이드하여 buttonPanel, resumePanel, countdownText 상태 초기화 추가2. Resume 버튼 이벤트 방식 통일OnClick()을 코드에서 할당하도록 변경하여 Prefab 내 미리 연결해둔 함수 제거Awake()에서 resumeButton.onClick.AddListener(OnClickResume) 명시적으로 할당3. GameOver UI 버튼 기능 수정GameOverUI.cs에서 홈 / 리트라이 버튼을 직접 Ad..

TIL 2025.05.29

Unity에서 씬 리로드 후 UI 재생성 및 충돌 처리 문제 해결

🎮 게임 기능 구현 및 디버깅게임 씬 리로드 시 UI가 사라지는 문제 해결GameManager가 DontDestroyOnLoad로 유지되면서 씬 재시작 후 UI가 다시 생성되지 않는 문제를 해결하기 위해 SceneManager.sceneLoaded 이벤트에 OnSceneLoaded(Scene, LoadSceneMode) 메서드를 등록해 UI를 강제로 재생성함.이 때 SceneManager.sceneLoaded += OnSceneLoaded; 형식으로 델리게이트를 등록하면 Unity가 자동으로 (Scene scene, LoadSceneMode mode) 파라미터를 넘겨주는 구조라는 것도 학습함.Unity의 델리게이트 자동 파라미터 전달 이해SceneManager.sceneLoaded += OnSceneL..

TIL 2025.05.28

인게임 UI 구성 및 코인 연동

✅ 오늘 한 일InGameUI 프리팹 구성코인 아이콘과 TMP 텍스트로 구성된 InGameUI 프리팹 제작Canvas 안에 배치하고 UI 형태만 우선 완성코인 스프라이트 이미지 제작직접 그린 오징어 동전 그림을 PNG로 저장하고 투명 배경 처리Unity에서 Sprite로 설정 후 InGameUI에 삽입하여 구성 완료GameManager에서 InGameUI 초기화게임 시작 시 자동으로 UIManager.Instance.Open() 실행되도록 설정GameManager 오브젝트가 하이어라키에 없어서 Start()가 실행되지 않는 문제를 발견하고 해결하이어라키에 GameManager 수동 배치하여 정상 작동 확인Point.cs와 InGameUI 연결코인 획득 시 InGameUI의 텍스트가 실시간으로 증가하도록 ..

TIL 2025.05.28

제네릭 기반 UI 시스템 구축 및 Resources 오류 해결

🎯 오늘 목표Unity 팀 프로젝트에서 UI 시스템의 기반을 잡고,제네릭 기반 UIManager 구조를 이용한 UI 열고 닫기 기능을 구현했다.✅ 오늘 한 일UI 관리 시스템 설계UIBase 라는 추상 클래스 생성 → 모든 UI의 기본 구조 제공 (Open/Close)테스트로 MainUI 를 만들어 UIBase 를 상속해서 간단한 UI 프리팹으로 제작제네릭 기반 UIManager 구현UIManager 클래스는 싱글톤 패턴으로 설계Open() 과 Close() 메서드로 UI를 제네릭하게 관리내부적으로는 Dictionary 를 통해 중복 생성 방지 및 재사용Resources.Load 문제 해결처음엔 Resources/UI/MainUI 프리팹을 찾을 수 없다는 오류 발생원인은 프리팹이 Resources 폴더..

TIL 2025.05.26

물리 기반 상호작용에서의 충돌/점프 문제 해결 과정

배경Unity 2022.3.17f1을 사용하여 "Only Up!" 스타일의 3D 플랫폼 게임을 제작하던 중,플레이어가 발판 또는 장애물에 충돌할 때 점프가 되지 않거나, 통과해버리는 현상이 발생했다.발단플레이어가 점프 패드나 벽의 옆면에 붙은 상태에서Space 키를 눌러도 점프가 되지 않는 현상이 반복 발생했다.특히 다음과 같은 문제들이 주요 원인이 되었다:마찰력(Friction)이 작용하여 플레이어가 표면에 "들러붙는" 현상 발생IsGrounded() 함수가 정확히 바닥만 감지하고, 옆면 감지는 실패점프 판정이 제대로 이루어지지 않아 플레이 흐름이 끊어짐전개문제를 해결하기 위해 다양한 접근을 시도하였다:플레이어와 발판 모두에 Physics Material을 적용→ NoFriction 머티리얼을 제작해 ..

TIL 2025.05.23

싱글톤에 대해서(수정중)

여태 싱글톤을 꽤 사용해왔지만 아직 완벽하게 이해하지 못한 것 같아서 이번에 확실하게 정리해보겠다.싱글톤이란 게임 전체에서 단 하나만 존재하도록 만든 클래스 또는 객체이다.예를 들어, 게임에 플레이어가 한 명만 있다면 게임 매니저, UI매니저, 사운드 매니저 등 하나만 있어야 될 것이다.이럴 때 싱글톤을 써서 전역에서 공유되고, 오직 하나만 존재하도록 만든다. 이 싱글톤을 이용하여 하나씩 설명해보겠다. 일단 코드를 먼저 살펴보자면,private static CharacterManager 를 _instance 로 만들었다.외부에서도 접근해야되니 public 으로 되어있는 Instance 를 만든다. 게터 (getter, get 프로퍼티를 부르는 말) 를 만든다.게터를 통해서 외부에서는 Instance 로 ..

TIL 2025.05.21

UI 코드 제어와 델리게이트 활용으로 유연한 UI 시스템 구현하기

✅ 오늘 한 일UICondition, DamageIndicator 등 UI를 직접 드래그 앤 드롭하지 않고 코드로 연결하는 방식으로 구현CharacterManager를 통해 플레이어 컴포넌트에 접근하고, UI 요소들을 동적으로 초기화DamageIndicator는 PlayerCondition에서 발생하는 데미지 이벤트를 델리게이트로 구독하여 이미지 효과 실행🔥 오늘 배운 점UI를 코드로 제어하는 방식의 중요성: 프리팹으로 만들었을 때 인스펙터 연결이 깨질 수 있으므로, 코드로 연결하는 방식이 유지보수에 유리함UI와 게임 로직의 분리: UICondition은 PlayerCondition을 직접 참조하지 않고, CharacterManager를 통해 접근함으로써 결합도를 낮춤델리게이트 기반 이벤트 시스템을 사..

TIL 2025.05.19

1인칭 플레이어 컨트롤러 구현 & 스카이박스로 씬 분위기 연출하기

✅ 오늘 한 일받아온 지형을 추가하고 스카이 박스를 제작플레이어 생성 (Capsule Colider, Rigidbody) - 1인칭 게임을 제작하기 때문에 플레이어의 스프라이트는 없음Input Action으로 Move, Attack, Jump, Inventory, Look (마우스로 시점 이동) 설정Move, Jump, Look 구현 - Jump는 Raycast를 이용하여 땅에서 떨어져 있을 때 점프가 안되도록 설정 (한번만 점프가 가능하도록)🔥 오늘 배운 점스카이박스는 게임 세계의 배경을 둘러싸는 환경 매핑 기술이다.씬의 배경으로 사용되며, 게임 환경을 확장시키는데 활용된다. (하늘, 구름, 산 등)Rigidbody - ForceMode 에 대하여 배웠다.- Acceleration : 가속도를 적용-..

TIL 2025.05.16

AudioManager로 BGM 흐름 제어 시스템 완성하기

✅ 오늘 한 일AudioManager 스크립트에 BGM 기능 추가GameScene 진입 시 자동으로 BGM 재생플레이어 사망 시 BGM 자동 정지 처리 (AudioManager.Instance.StopBGM() 호출)리트라이 시 BGM이 다시 재생되도록 초기화 처리GitHub develop 브랜치로 커밋 및 버전 관리 완료🔥 오늘 배운 점배경음악도 게임의 분위기와 몰입도를 높이는 중요한 요소씬 전환과 리트라이 등 다양한 게임 흐름에 따라 BGM 상태를 정확히 관리해줘야 어색함이 없음DontDestroyOnLoad를 쓸 경우 씬 간 오디오 상태 관리를 명확히 분기해야 한다는 점🧠 느낀 점오늘은 플레이어 중심의 경험 설계를 사운드 시스템에서도 다시 생각하게 되었다.단순히 재생하는 것이 아닌, “언제” 어..

TIL 2025.05.15