2025/05 20

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

🔧 SpawnManager 리팩토링 및 역할 확장❓ 의문점SpawnManager가 오브젝트 풀만 관리하면 되는가?씬 전환 시 프리팹 참조를 잃었을 때 다시 로드해야 하는가?✅ 해결점기존 역할에 "스폰 위치 지정" 기능을 추가하면서 더 강력한 SpawnManager로 확장 가능.씬 전환 후 ScriptableObject의 참조는 유지되지만, 해당 프리팹은 로딩 상태에 따라 풀/딕셔너리에 재세팅 필요.💡 예시csharp복사편집// Init 시 매번 prefab 재세팅 ItemData data = ResourceManager.Instance.GetResource(key); if (data != null) prefabs[key] = data.prefab; 🌗 낮/밤 사이클에서 빛 오브젝트 전환❓ 의문점Li..

05/29 인벤토리 시스템 구조 개선 및 버그 수정

✅ 학습 내용PlayerInventoryController 클래스 내에서 items 리스트는 inventoryItems 리스트와 중복되는 데이터라는 사실을 파악함.items는 ItemSlot 내부의 item과 1:1로 연결되어 있어, 모든 기능을 inventoryItems만으로 구현 가능.불필요한 리스트(items)는 메모리 낭비 및 유지보수 부담을 야기할 수 있으므로 제거 가능.🛠️ 리팩토링 방향items[index]를 전부 inventoryItems[index].item으로 변경.외부에서 ItemData 목록이 필요할 경우:csharp복사편집public IReadOnlyList Items => inventoryItems.Select(slot => slot.item).ToList().AsReadOnl..

05/28 TIL Unity 매니저 싱글톤 설계 및 Resources.Load 문제 디버깅

✅ 오늘 해결한 문제SpawnManager에서 NullReferenceException 발생Instance 호출 시 new GameObject().AddComponent() 구조가 문제인가 의심했지만, 실제 원인은 Resources.Load()가 null을 반환한 상태에서 .gameObject를 호출한 것이었다.🧠 오늘 배운 것1. Unity에서 AddComponent 시점에 Awake가 즉시 호출됨AddComponent() → 즉시 Awake() 호출따라서 Awake() 안에서 Instance나 다른 매니저 참조 시 순환 참조 위험 존재해결: Awake()에서는 참조 지양, Init() 분리해서 명시적 초기화2. Resources.Load()는 경로가 잘못되면 null을 반환한다.gameObject처..

05/27 TIL 오브젝트 풀에 관한 고찰

✅ 오늘 배운 것1. 프리팹이 다르면 풀도 나눠야 한다WoodItem, RockItem처럼 ResourceItem을 상속한 클래스가 여러 개 있더라도,프리팹(GameObject) 이 다르면 하나의 풀에서 관리하면 안 됨.ObjectPool의 createFunc는 단 하나의 프리팹으로 고정되기 때문에나중에 다른 프리팹을 넣거나 생성하면 의도하지 않은 결과가 발생함.2. 풀은 '타입'이 아닌 '프리팹 단위'로 관리PoolManager 같은 구조에서 한 풀에 여러 종류의 아이템을 넣고 싶을 수 있으나,각 프리팹마다 별개의 PoolManager를 생성하는 방식이 안전하고 명확하다.따라서 Dictionary> 혹은Dictionary> 와 같은 구조를 사용하는 것이 좋다.3. 프리팹 기준 키로 풀 분기 처리if (..

05/26 TIL Unity Fusion2 / 오브젝트 풀

🧠 SummaryUnity와 Photon Fusion 2를 사용하여 네트워크 게임에서의 동기화 처리, 오브젝트 풀링 시스템 설계, 디자인 패턴(Singleton/Factory)에 대해 학습하였다.📌 주요 키워드Unity, Photon Fusion 2, Object Pooling, Singleton, Factory Pattern, ChangeDetector, SpawnManager🔍 배운 내용 상세 정리🕸️ Fusion 네트워크 동기화 시스템[Networked] 속성은 상태 권한이 있는 클라이언트만 값 변경 가능.무권한 클라이언트가 값을 변경하면 이는 예측 상태로 반영되며 나중에 실제 값으로 덮어써짐.🎯 ChangeDetectorChangeDetector는 네트워크 동기화된 값의 변경을 감지.RP..

05/23 TIL 개인 과제 제출 및 팀프로젝트 시작 전 퓨전2 입문하기

🔍 Photon Fusion 2란?Photon Fusion 2는 Exit Games에서 개발한 Unity 전용 고성능 네트워킹 솔루션으로, 이전 버전인 Fusion 1의 후속이며 다음과 같은 특징을 가진다:고성능, 저지연 네트워킹: 게임에 맞춰 다양한 네트워크 아키텍처를 지원하며, 특히 ECS 기반의 내부 구조 덕분에 퍼포먼스가 뛰어나다.멀티 아키텍처 지원:Shared: 클라이언트 간 상태를 공유 (ex. Co-op)Host/Client: 호스트가 authoritative 역할 (ex. Party 게임)Server/Client: 별도 서버가 authoritative (ex. Competitive 게임)Simulation Prediction과 Lag Compensation 등 최신 기술이 내장됨Photo..

05/22 TIL 및 개인 과제 마무리

## 🚉 이동 발판 위의 플레이어 이동 처리 - **문제**: 이동 중인 발판 위에 서 있는 플레이어가, 발판의 움직임에 따라 자연스럽게 따라가야 함. - **기본 해결 방법**: - 발판의 `Rigidbody.velocity`를 매 프레임 `플레이어의 velocity`에 **더해주는 방식**이 일반적이다. - 이를 위해 Player 쪽에서 `isOnMovingPlatform` 상태를 체크하고, `curPlatform.velocity`를 가져와 반영해야 한다. - **점프 시 고려 사항**: - 발판이 움직이고 있을 때 점프하면, 발판의 속도를 **점프에도 반영**해줘야 자연스러운 반응이 나온다. - 예: 점프할 때 `AddForce(jumpPower + curPlatform.veloci..

05/21 TIL

✅ 1. PlayerController의 역할 분리외부 요인(점프대, 충돌 등)에 의한 행동 변화는 PlayerController가 아닌 **Player(캐릭터 본체)**가 직접 처리하는 것이 좋음.PlayerController는 입력 처리 전담 / Player는 행동 상태 관리 및 반응 처리를 맡도록 역할을 분리하는 것이 유지보수에 유리함. ✅ 2. PlayerController에서 Player 필드 보유PlayerController가 Player를 필드로 보유해도 무방.특히 PlayerController가 싱글톤이라면, 현재 조종 중인 캐릭터를 참조해야 하므로 오히려 자연스러운 설계.단, 역참조 순환에 주의 (메모리 누수, 파괴 순서 등).✅ 3. 속도 증가 버프 처리 방식코루틴 vs 시간 체크 방식..

05/20 트러블 슈팅 및 개인 과제 시작

강의 프로젝트 트러블 슈팅- raycast가 적중하지 않는 문제 --> layer mask 설정 , is trigger 해제, rigidbody 제거 등 여러 방식을 시도했고 결과는 is trigger를 false로 두어야 한다는 것이에 전제 조건이 붙는데 rigidbody가 붙어있을 땐 is trigger가 false여야지만 raycast가 정상작동한다rigidbody가 없다면 is trigger는 상관이 없고, rigid body와 collider가 같이 붙어 있어야만 위 문제가 발생한다는 것을 확인 - 음악 재생을 위한 오브젝트를 두고 trigger를 이용해 볼륨을 조절하려 했으나 변경되지 않는 문제 --> 오브젝트의 레이어만 설정하고 태그는 기본 태그를 사용 중이어서 CompareTag가 fals..

05/19 TIL 스카이 박스의 애니메이션 설정, 조명 처리

📘 TIL – Unity 강의 정리 (Light, AnimationCurve)🔦 Light**라이트(Light)**는 게임 혹은 3D 렌더링에서 씬에 광원을 추가하는 데 사용되는 요소로, 씬 내 오브젝트의 조명 효과 및 그림자 표현에 중요한 역할을 한다.✅ 주요 라이트 유형점 광원 (Point Light)한 지점을 기준으로 모든 방향으로 빛을 발산하는 광원.방향성 라이트 (Directional Light)멀리서 오는 평행한 광선을 나타내며, 주로 태양빛처럼 한 방향으로 빛을 쏘는 데 사용됨.스포트라이트 (Spot Light)특정 지점에서 원뿔 형태로 빛을 쏘는 광원. 손전등이나 스테이지 조명에 적합.면 광원 (Area Light)일정 면적(사각형)의 한 면에서 균일하게 빛을 발산. 리얼리즘이 중요할 ..