Int값을 .ToString() 후 캐싱하여 사용하기
·
코드 및 공부/최적화
유니티 버전 - 2022.3.59f1     목차.ToString()의 메모리 사용량.ToString()을 캐싱하여 사용하기     .ToString()의 메모리 사용량int형의 .ToString()은 내부에서 정수 값을 문자열로 변환하면서 새 문자열 인스턴스를 생성합니다, 이때 문자수에 따라 20~40 바이트 정도의 메모리 할당이 일어납니다, 단일 호출에서는 미미하지만 빈번하게 사용되어야한다면 캐싱하여 사용하는 것도 좋은 방법입니다     .ToString()을 캐싱하여 사용하기아래 코드를 통해 int 값에 대하여 확장 메서드로 이용할 수 있습니다, 해당 int 값을 문자열로 변환한 결과를 캐싱된 값으로 얻을 수 있습니다, 하지만 캐싱된 값은 프로그램이 실행되는동안 회수되지 않으므로, 적절하게 관리해주..
딕셔너리의 GetValueOrDefault()
·
코드 및 공부/최적화
유니티 버전 - 2022.3.59f1     GetValueOrDefault()기존의 메서드에서는 키 값을 이용하여 데이터를 찾고, 존재 여부에 따라 반환하는 값을 다르게 해주었습니다public T GetByID(int id){ if (lookupDictionary.TryGetValue(id, out var entry)) { return entry; } return null;}   개선된 코드에서는 GetValueOrDefault() 메서드를 사용하여, 주어진 키(itemCode)가 등록되어 있으면 그에 매핑된 값을 반환하고, 등록되어 있지 않으면 기본값을 반환합니다 여기서 _itemSoDictionary가 형태이므로, 키가 없을 경우 기본값인 null이 반환됩니다.public Item..
ReferenceEquals()를 이용한 null 비교 수행
·
코드 및 공부/최적화
유니티 버전 - 2022.3.59f1     목차기존 Object != nullReferenceEquals()를 이용한 null 비교어떤상황에서 사용해야할까     기존 Object != null오디오 클립을 딕셔너리에서 찾고 클립이 존재한다면 가져와서 실행시키는 로직입니다null 비교는 단순이 참조가 null인지 여부를 확인하는 것뿐만 아니라, 해당 객체의 네이티브 상태까지 검사합니다, 네이티브 상태를 검사한다는 것은 오브젝트가 내부적으로 연결되어있는 c++기반의 실제 리소스가 아직 유효한지도 함께 검사한다는 것을 의미합니다, 그래서 더 많은 성능을 요구합니다     ReferenceEquals()를 이용한 null 비교object.ReferenceEquals(clip, null)은 .NET의 기본 메..
CommandSceheduler를 이용한 메서드 순차 실행
·
코드 및 공부/최적화
유니티 버전 - 2022.3.59f1     목차기존 코드의 문제점전체적인 구조IMethodCommand와 CommandCommandPriorityComparerCommandQueueCommandScheduler메서드 등록실행 결과와 주의점     기존 코드의 문제점기존 코드입니다, 게임에서 하루가 지나고나서 실행되어야할 메서드들이 MorningRoutine이라는 메서드 아래 묶여있습니다, 코드간 결합도가 높고 확장성이 부족할뿐만 아니라 테스트, 가독성등 여러가지 측면에서 문제가 있습니다, MorningRoutine에서 해주어야하는 동작들이기는하지만, 좋지 못한 구조라고 볼 수 있겠습니다      CommandSceheduler의 전체적인 구조1. CommandSceheduler 에서는 개별 Queue에..
allowSceneActivation = false 를 이용한 씬 미리 로딩(PreLoadScene)
·
코드 및 공부/씬
유니티 버전 - 2022.3.59f1     목차코드와 코드의 의도AsyncOperation과 allowSceneActivation실제 동작 (문제 상황)해결법      코드와 코드의 의도플레이어는 현재 씬에서 다른 씬 (A, B, C) 중 하나를 선택하여 이동가능합니다   하지만 개별 씬의 크기가 커짐에 따라 로딩시간이 증가하고, 플레이어 경험을 향상시키기 위하여 개별 씬을 미리 로딩하고 트리거됨과 동시에 해당 씬으로 이동하고자 합니다public async UniTask PreLoadAddScene(SceneName sceneNumber){ if (_preloadSceneDictionary.ContainsKey(sceneNumber)) { return; } AsyncO..
LoadSceneMode.Single과 Additive 의 이벤트함수 실행 순서
·
코드 및 공부/씬
유니티 버전 - 6000.0.40f1     목차Single과 Additive 씬의 이벤트함수 실행 순서더보기2024.12.23 - [코드 및 공부/씬] - 씬 전환시 해당씬의 CinemachineConfiner로 교체하기 씬 전환시 해당씬의 CinemachineConfiner로 교체하기유니티 버전 - 2022.3.17f1     목차들어가며현 프로젝트 세팅코드     들어가며해당 코드를 이용하여 할 수 있는것은 씬이 전환 될때 전환된 씬의 Polygon Collider 2D를 가져와서 Cinemachine의 Cinemacekrxjvpvj0110.tistory.com   씬이 로드될때 Addtive씬의 PolygonCollider2D를 가져오는 코드가있었습니다, 이때는 Title씬에서 InGame씬으로 ..
Rebind한 키세팅 저장/초기화/되돌리기
·
코드 및 공부/입력 관리
유니티 버전 - 6000.0.40f1     목차IUISettingChanger변경된 Rebind 저장     IUISettingChanger키세팅뿐만 아니라 다른 세팅들의 변경사항을 제어하기위한 인터페이스입니다, 각 메서드는 저장/되돌리기/초기화의 역할을 담당하고, 하위의 개별 세팅에서 변경사항이 있을때 IsChanged를 이용하여, 설정 팝업을 끄거나 탭을 넘어갈때 미변경 사항을 체크하고 플레이어에게 되묻는 역할을 합니다 public interface IUISettingChanger{ public void ImplementSetting(); public void RevertSetting(); public void ResetSetting(SystemData systemData); ..
CS0162: Unreachable code detected, 이 코드가 경험적으로 도달할 수 없습니다
·
코드 및 공부/기타
유니티 버전 - 6000.0.40f1     CS0162: Unreachable code detected콘솔에서는 위와 같이 나오고, 에디터에서는 "이 코드가 경험적으로 도달할 수 없습니다", "코드에 도달할 수 없습니다" 등으로 표시되는 이 경고는, return / break / throw 이후의 코드, 조건이 항상 거짓인 반복문 등 컴파일러가 실행 흐름상 "절대로" 도달할 수 없다고 판단하는 상황에서 발생하는 경고입니다 if (false){ Debug.Log("CS0162 경고 발생");}if (true){ Debug.Log("항상 실행");}else{ Debug.Log("CS0162 경고 발생");}while (true){ // break, return, throw 없음 → 무..
Application 클래스
·
코드 및 공부/기타
유니티 버전 - 6000.0.40f1     목차Application.isEditorApplication.persistentDataPathApplication.runInBackgroundApplication.systemLanguageApplication.targetFrameRateApplication.Quit     Application.isEditor현재 코드가 Unity 에디터 내에서 실행되고 있는지를 판단합니다, 에디터 전용 코드나 디버깅용 메시지를 출력할 때 활용할 수 있습니다, 빌드된 파일을 실행중일 때 false를 반환합니다if (Application.isEditor){ print("에디터 내에서 실행중");}     Application.persistentDataPath애플리케이션의 데..
SetValueWithoutNotify()을 이용한 드롭다운 옵션 변경
·
코드 및 공부/UI
유니티 버전 - 6000.0.40f1     목차OnValueChaned 이벤트SetValueWithoutNotify()     OnValueChaned 이벤트세팅 설정 팝업에서 변경사항이 있지만 저장하지않고 다음 탭으로 넘어갈때, 이것을 체크하여 저장or캔슬 팝업을 띄우고자하였지만 변경사항이 없는데도 팝업이 뜨는 문제가 발생하였습니다   그 이유는 팝업을 활성화 할때마다 드롭다운의 값을 사용자 지정값으로 불러오는 로직이 존재하였는데   Dropdown.value = 로직이 드롭다운의 값을 설정함과 동시에 OnValueChaned 호출하고 내부 로직에 의해 변경 사항을 추적하는 변수가 true로 변경되어, 팝업을 활성화하였을뿐이지만 변경사항이 있는것처럼 동작하였습니다     SetValueWithoutN..