728x90 Utils28 Unity, 작업 중 Editor가 점점 느려지는 경우 작업하다보면 에디터가 점점 느려진다?프로젝트 작업을 하다보면, 알게모르게 메모리가 누수가 되어 누적이 되고, 이는 에디터가 느려지고 작업에 영향을 줍니다. 특히 게임 플레이를 몇 번 하다보면 크게 체감이 됩니다. 유니티 프로파일를 하다보면 알 수가 있지만, 사용하지 않은 리소스들이 메모리를 차지하고 있고, 이는 대체적으로 에디터에서는 로드한 일부 Resource들을 메모리에서 계속 점유하고 있는 작동 원리에 이유가 있습니다. 몇 회 전에 실행한 리소스들도 들고 있는 경우가 종종 발견되곤 합니다. 이 경우 보통 유니티를 껐다가 다시 켜서 해결하기도 하지만, 이를 자동화 방면으로 조금이나마 해결할 수 있을까 싶어서 방법을 알아보았습니다.스크립트EditorModeMemoryManager.cs#if UNITY_.. 2023. 3. 18. C#, 고정된 해쉬 값 가져오기 기본 제공되는 함수 'GetHashCode()' C#에서 지원하는 GetHashCode()가 있습니다. string에서 함수를 호출하면, string이 고유한 인덱스로 변환 처리가 됩니다. 그래서 이를 통해 문자열을 통해서 고유한 인덱스를 얻고 싶을 때 사용할 수 있습니다. private static void Main(params string[] args) { string text = "NAME"; int hashId = text.GetHashCode(); // hashId = 237439930; hashId = text.GetHashCode(); // hashId = 237439930; hashId = text.GetHashCode(); // hashId = 237439930; // 항상 같은 값을 가.. 2023. 3. 18. Unity, 현재 입력된 KeyCode 가져오기 입력된 KeyCode가 필요할 때 개인적으로 키입력이 어떻게 들어오나 테스트 케이스가 필요한 경우가 있었는데, Input.GetKey(KeyCode)를 입력하는 방식으로는 일일이 체크하기 어려운 상황이 있었습니다. 다양하게 들어오는 상황이어서 여러 케이스로 반환을 해주는 함수가 필요했습니다. 스크립트 public class Utils { /// /// 감지된 KeyCode를 반환한다. /// /// 현재 틱에서 입력된 키코드를 반환 private KeyCode DetectPressedKeyCode() { foreach (KeyCode kcode in Enum.GetValues(typeof(KeyCode))) { if (Input.GetKeyDown(kcode)) { return kcode; } } ret.. 2022. 12. 28. C#, List 랜덤으로 섞기 확장함수 (Shuffle) 리스트 랜덤 섞기 리스트를 랜덤으로 섞을 때, 사용하는 확장 함수입니다. 원리는 랜덤으로 생성되는 GUID를 기준으로 Linq를 통해 다시 정렬하는 방식입니다. 스크립트 public static class Utils { /// /// 리스트 랜덤으로 섞기 /// /// /// public static void Shuffle(this List list) { var temp = list.OrderBy(item => Guid.NewGuid()).ToList(); list.Clear(); list.AddRange(temp); } } 예제 private static void Main(params string[] args) { List list = new List() { 0, 1, 2, 3, 4 }; // list.. 2022. 10. 24. C#, 중복되지 않게 랜덤 숫자 생성 중복되지 않은 난수 배열 필요 랜덤으로 난수를 생성하되, 중복되지 않게 생성하고 싶은 경우가 생겨서 작성하게되었습니다. 아래의 스크립트를 통해 난수 배열을 가져올 수 있습니다. 스크립트 /// /// 중복되지 않는 랜덤 숫자 리스트 만들기 (minValue: 0) /// /// 최대값(제외) /// 반환 개수 /// 중복 숫자 여부 /// 랜덤 씨드 /// public static int[] MakeRandomNumbers(int maxValue, int randomSeed = 0) { return MakeRandomNumbers(0, maxValue, randomSeed); } /// /// 중복되지 않는 랜덤 숫자 리스트 만들기 /// /// 최소값(포함) /// 최대값(제외) /// 반환 개수 //.. 2022. 8. 22. C#, 데이터 리스트를 CSV파일로 생성하기 콜렉션을 넣어서 편하게 만들자 개인 프로젝트 작업 도중, 뽑아온 데이터 리스트를 CSV파일로 만들고 싶었는데, 종류가 너무 다양하여 이는 템플릿 형식으로 작성하게 되었습니다. 스크립트 using System; using System.Collections.Generic; using System.IO; using System.Reflection; using System.Text; internal static class Utils { public static string CSV_DATA_PATH = Path.Combine(Environment.CurrentDirectory, "Data"); private static StringBuilder sb = new StringBuilder(); /// /// 경로에 .. 2022. 7. 23. C# Windowform, 유니티처럼 코루틴 만들어서 사용하기 유니티의 코루틴 개념은 편했다. 본래 유니티 프로그래머로 시작한 저한테, 기존 Windowform 접근하는데 불편한 점이 이만저만이 아니었습니다. 개인적으로 유니티의 코루틴 반복기 개념이 편하고 좋아서 개인 아카이브 저장한다는 생각으로 작성하고 올립니다. 장점 별도의 반복문을 메인 쓰레드에서 분리하여 따로 돌리고 싶은 경우가 생기는데, 코루틴 사용으로 크로스 쓰레드를 회피할 수 있습니다. (Avoiding Cross-Thread, Safety Thread) 코루틴의 장점인 스케줄링(Scheduling)이 가능합니다. UI 쓰레드에 접근이 가능합니다. (매우 용이) 스크립트 아래 2개의 스크립트에 프로젝트에 추가하시면 사용할 수 있습니다. 1. Coroutine.cs using System.Collecti.. 2022. 7. 17. C#, 64비트 초과 비트연산자용 구조체 ShiftComparer 비트 연산이 필요한 경우 이해를 위한 글: C#, Enum 'Flags' Technic 대형 비트 연산 비트 연산을 하는 과정에서 64비트 길이를 초과하는 경우가 있었는데, 이를 위해 전용 구조체를 만들었습니다. Add()로 등록하고, Remove()로 삭제할 수 있습니다. 내가 등록한 값이 존재하는지 여부는 IsExist()로 확인 할 수 있습니다. 스크립트 1. 자료형 int 버전 매번 연산을 하여, 연산에 대한 비용이 있습니다. using System; public struct ShiftComparer { private static int DIVIND = 32; private int[] array; private int length; public static ShiftComparer Init(int.. 2022. 7. 4. Unity, 플레이 모드가 아닌 상태에서 코루틴 사용하기 "Application.isPlaying == false"일 때, 코루틴을 사용하고 싶다면? 일반적이지 않은 상황에서 코루틴을 쓰고 싶은 경우 아래와 같이 해결할 수 있습니다. UnityEditor 네임스페이스를 이용하여 코루틴처럼 만들기 반복기(IEnumerator)의 특성을 이용하여 일반 함수처럼 돌려쓰기 유니티 지원 코루틴 패키지 설치하기 1. UnityEditor 네임스페이스를 이용하여 코루틴처럼 만들기 UnityEditor.EditorApplication.update 델리게이트를 통하여 프레임마다 함수를 호출하는 방법입니다. 아래의 코드를 작성합니다. EditorCoroutine.cs #if UNITY_EDITOR public class EditorCoroutine { public static .. 2022. 4. 6. 이전 1 2 3 4 다음 반응형