[내일배움캠프 Unity 9기]

05/30 TIL SpawnManager 역할 고민, 낮/밤 사이클 전환, NavMesh SamplePosition

kyvv 2025. 5. 30. 22:21

🔧 SpawnManager 리팩토링 및 역할 확장

❓ 의문점

  • SpawnManager가 오브젝트 풀만 관리하면 되는가?
  • 씬 전환 시 프리팹 참조를 잃었을 때 다시 로드해야 하는가?

✅ 해결점

  • 기존 역할에 "스폰 위치 지정" 기능을 추가하면서 더 강력한 SpawnManager로 확장 가능.
  • 씬 전환 후 ScriptableObject의 참조는 유지되지만, 해당 프리팹은 로딩 상태에 따라 풀/딕셔너리에 재세팅 필요.

💡 예시

csharp
복사편집
// Init 시 매번 prefab 재세팅 ItemData data = ResourceManager.Instance.GetResource<ItemData>(key); if (data != null) prefabs[key] = data.prefab;

🌗 낮/밤 사이클에서 빛 오브젝트 전환

❓ 의문점

  • Light.intensity로 오브젝트를 SetActive() 하면 왜 낮/밤 빛이 동시에 켜지는가?

✅ 해결점

  • float 비교 (== 0.15f)는 오차 때문에 불안정.
  • 명확한 낮/밤 시간 구간 (time) 기준으로 켜고 끄는 것이 더 안정적.

💡 예시

csharp
복사편집
bool isDayTime = time >= 0.25f && time <= 0.75f; sun.SetActive(isDayTime); moon.SetActive(!isDayTime);

🧠 Input System - 숫자 키 1~7 처리

❓ 의문점

  • Input System에서 숫자 키를 누르면 어떤 값을 받는가?
  • ReadValue<int>() - 1 방식으로 0~6 인덱스를 정확히 받을 수 있는가?

✅ 해결점

  • Input System에서는 각 키에 별도 액션을 바인딩하거나
  • Key.1 ~ Key.7을 수동으로 매핑해서 처리해야 정확함.

💡 예시

csharp
복사편집
if (Keyboard.current.digit1Key.wasPressedThisFrame) UseQuickSlot(0); // ... 반복

📦 인벤토리 ↔ 퀵슬롯 간 아이템 이동

❓ 의문점

  • ItemSlot을 참조형으로 넘기면, 퀵슬롯 수량이 바뀌었을 때 인벤토리도 같이 바뀌지 않나?

✅ 해결점

  • 참조형이라면 당연히 연결됨.
  • 깊은 복사를 위해 new ItemSlot(otherSlot) 같은 복사 생성자를 구현해야 안전.

💡 예시

csharp
복사편집
public ItemSlot(ItemSlot other) { this.item = other.item; this.count = other.count; }

🧭 NavMesh 랜덤 위치 지정 함수

❓ 의문점

  • NavMesh.SamplePosition()이 실패하는 경우가 있는가?
  • 왜 항상 범위 내에서 결과가 나오지 않을까?

✅ 해결점

  • 샘플링 범위 내 지형이 없다면 실패함.
  • 반복 재시도 + range 조정으로 보완 가능.

💡 예시

csharp
복사편집
for (int i = 0; i < 10; i++) { if (NavMesh.SamplePosition(...)) return hit.position; } Debug.LogWarning("유효한 위치를 찾지 못했습니다.");

⏳ 날짜 카운트 방식

❓ 의문점

  • time = (time + rate * deltaTime) % 1 구조에서 언제 날짜를 증가시켜야 할까?

✅ 해결점

  • prevTime > time인 순간은 0을 지나간 시점, 즉 하루가 지난 것으로 판단 가능.

💡 예시

csharp
복사편집
if (time < prevTime) ++dayCount;

🔚 정리

  • 단순 기능에서 역할을 확장할 땐 모듈화와 책임 분리가 핵심
  • Unity의 float 기반 값 비교는 절대 == 하지 말 것
  • Input System의 유연성은 높지만, 복잡한 키 매핑은 명시적으로 처리해야 확실
  • 데이터 구조가 참조형일 땐, 상태 공유에 주의하고 필요시 깊은 복사 고려
  • NavMesh나 시간 기반 계산 등은 실패 가능성에 대한 대비 로직을 항상 포함