본문 바로가기

C#

TIL(Today I Learned) - 50 오늘의 TIL1. 슬레이어 키우기 구조 이해게임의 주요 데이터(무기, 악세사리, 스킬)를 효율적으로 관리하기 위해 DataManager 설계가 필요하다는 점을 확인했습니다.강화 시스템, 상점, 전투 등 다양한 시스템에서 이 데이터를 공유해야 하기 때문에, 데이터를 중앙에서 관리하는 구조가 중요하다고 배웠습니다.2. DataManager 설계 및 구현DataManager의 역할모든 무기, 악세사리, 스킬 데이터를 리스트로 관리합니다.특정 아이템을 검색하거나 데이터를 추가/수정할 때 이를 통합적으로 처리합니다.SO 데이터를 자동으로 로드기존에는 데이터를 수동으로 드래그해 넣어야 했지만, Resources.LoadAll을 사용하여 특정 폴더에서 데이터를 자동으로 로드하도록 변경했습니다.이를 통해 150개의 데.. 더보기
TIL(Today I Learned) - 49 📘 오늘의 TIL (Today I Learned)ScriptableObject를 활용한 데이터 관리SkillSO, WeaponDataSO, AccessoryDataSO와 같은 아이템 데이터를 ScriptableObject로 관리하면, 데이터의 재사용성과 유지보수성이 높아진다.공통 속성은 BaseItemSO로 추출하여 상속 구조를 통해 효율적으로 관리할 수 있다.Resources.Load의 사용법과 대안Resources.Load를 통해 런타임에 ScriptableObject를 로드하려면 반드시 Resources 폴더에 해당 파일이 위치해야 한다.하지만 유지보수와 최적화를 위해 ScriptableObject 데이터베이스를 활용하거나 Unity Addressables를 사용하는 것이 더 나은 대안이다.인벤토.. 더보기
TIL(Today I Learned) - 43 오늘 배운 것 (TIL)UI 미니맵 삼각형 방향 표시삼각형(시야 표시)의 Pivot 설정이 UI 회전과 연계되어 중요하며, Pivot을 (0.5, 0.0)으로 설정하여 꼭짓점이 플레이어 중심에 위치하도록 구현.삼각형의 회전은 Z축 회전을 조정하여 플레이어의 바라보는 방향에 맞추는 것이 핵심.Pivot 문제 해결Pivot 설정은 Unity Editor에서 변경하거나, 코드에서 강제로 설정.잘못된 Pivot 값은 회전 계산에 영향을 미쳐 삼각형이 플레이어와 어긋나는 원인이 됨.UI 좌표 변환플레이어 월드 좌표를 미니맵 좌표로 변환할 때, 비율 계산이 정확해야 UI가 맵 크기와 일치.특히 맵의 비율과 크기를 정확히 고려해야 이상 없이 동작.디버깅의 중요성문제 발생 시, Debug.Log()를 활용해 좌표, 회.. 더보기
TIL(Today I Learned) - 41 오늘은 Unity 프로젝트에서 Git을 활용하는 방법과 QuickSlot 시스템 구현에 대해 학습했습니다.Git 상태 메시지 이해git status 명령을 통해 변경된 파일 상태를 확인.Git의 파일 상태:Changes not staged for commit: 수정되었지만 staging area에 추가되지 않은 파일.Untracked files: Git이 추적하지 않는 새 파일.Staged files: 커밋 준비가 완료된 파일.git add와 git rm 명령을 사용해 파일을 staging area에 추가하거나 삭제 처리.모든 변경 사항을 커밋하기 위해 git commit -m "메시지" 명령 사용.Unity QuickSlot 시스템 구현기능:숫자 키(1~5)를 통해 슬롯 아이템 사용.아이템 사용 후 수.. 더보기
TIL(Today I Learned) - 40 QuitGame 메서드 개선:Application.Quit()은 Unity 에디터에서 작동하지 않기 때문에, UnityEditor.EditorApplication.isPlaying = false;를 추가하여 에디터 모드에서도 종료 테스트가 가능하도록 구현했습니다.이로써 QuitGame 메서드가 빌드 환경과 Unity 에디터 환경 모두에서 일관되게 작동하도록 했습니다.씬 전환 시 GameManager 초기화:OnSceneLoaded를 통해 씬이 로드될 때 InitializeGame을 호출하여 InGameScene에서 필요한 설정이 자동으로 초기화되도록 했습니다.GameManager가 초기화 과정에서 필요한 오브젝트들을 동적으로 생성하여 관리하도록 설계하여 코드의 유연성과 유지보수성을 높였습니다.슬라이더로 .. 더보기
TIL(Today I Learned) - 39 게임에서 HP 슬라이더와 캐릭터 스탯 연동: HP 슬라이더를 캐릭터의 HP와 연동하려면, HealthSystem에서 체력 변경 이벤트를 발생시키고, UI에서 이를 구독하도록 해야 합니다. 이때, HP 슬라이더는 HealthSystem에서 제공하는 OnHealthChanged 이벤트를 구독하여 체력이 변경될 때마다 슬라이더 값을 업데이트하도록 합니다. 이를 통해, 슬라이더가 실시간으로 체력을 반영하도록 구현할 수 있습니다.몬스터 소환 시 체력과 크기 증가: 몬스터 소환 시마다 체력과 크기를 증가시키기 위해, 소환된 몬스터의 HealthSystem을 초기화할 때 체력과 크기를 조정합니다. monsterOriginalScale을 사용하여 크기를 증가시키고, currentHealthMultiplier를 통해 체.. 더보기
TIL(Today I Learned) - 38 🔍 작업 내용 요약AutoClickController 및 TimeControlController에 대한 기능 구현:자동 클릭 및 시간 조절 버튼을 통해 플레이어 행동을 제어하는 기능을 구현했습니다.버튼 클릭 시 애니메이션 효과 적용 및 구매 여부에 따른 버튼 활성화/비활성화 로직을 추가했습니다.애니메이션 속도 조정:Mathf.PingPong을 사용한 애니메이션 속도를 조절하여 버튼이 4배 느리게 커졌다 작아졌다 하도록 조정했습니다.Mathf.PingPong(Time.time / 4, 0.2f) + 0.9f를 통해, Time.time을 나누어 애니메이션 효과의 속도를 느리게 했습니다.GameManager와의 참조 연결 문제 해결:동적 생성된 Player 객체의 컴포넌트를 참조하기 위해 GameManage.. 더보기
TIL(Today I Learned) - 35 1. Singleton과 DontDestroyOnLoad 사용법Singleton 패턴을 사용하여 UIManager와 GameManager 등 여러 매니저를 관리하고, 특정 씬에서만 한 번 초기화되도록 설정.DontDestroyOnLoad는 루트 오브젝트(부모가 없는 오브젝트)에만 적용 가능하다는 점을 확인. 이를 위해 싱글톤 인스턴스 생성 시 항상 루트로 설정되도록 transform.SetParent(null)을 사용.특정 씬마다 다른 매니저 인스턴스가 필요할 경우, DontDestroyOnLoad를 사용하지 않고 씬 전환 시 새 인스턴스를 생성하는 구조를 활용.2. UIManager에서 동적 UI 초기화UIManager에서 UIRoot 프리팹을 배열로 관리하여 여러 UI를 동적으로 불러오도록 설정.Sc.. 더보기