본문 바로가기
728x90

Utils27

C#, 클래스 이름을 입력해서 클래스에 접근하기 텍스트를 입력해서 클래스를 가져오다. 개인 프로젝트 작업 중, 매 번 형식이 다른 클래스를 읽어와야하는 상황이 생겼습니다. 내부 런타임 중에서 바뀌는 상황이기 때문에, 이를 string을 매개변수로 받아 특정 클래스에 접근하는 구현 방식이 필요한 상황이었습니다. 이에 대한 처리는 이미 .Net에서 지원하고 있습니다. 스크립트 ClassFactory.cs using System; public static class ClassFactory { public static object GetClassInstance(string className, string namespaceFullPath = "") { Type type = Type.GetType($"{namespaceFullPath}.{className}, A.. 2023. 8. 5.
C#, 폴더 및 파일 전체 복사 완전 복제 스크립트로 파일 또는 폴더 자체를 복제가 필요한 상황이 생겨 작성하게 되었습니다. 스크립트 public static class Utils { /// /// 폴더 복제 (하위 폴더 및 파일 모두) /// /// /// public static void CloneFolder(string sourceFolderPath, string destinationFolderPath) { if (Directory.Exists(sourceFolderPath)) { // 폴더 생성 Directory.CreateDirectory(destinationFolderPath); var files = Directory.GetFiles(sourceFolderPath); // 파일 복사 foreach (var file in fi.. 2023. 7. 4.
Unity, PlayerPrefs 커스텀 클래스 (오버라이딩) 유니티 제공 PlayerPrefs 한계 유니티에서 기본 제공하는 PlayerPrefs 클래스는 간단하게 사용이 가능하지만, 대체적으로 사용하는데 아래와 같은 불편함이 있습니다. 한정된 클래스 타입으로 string, int, float만 제공합니다. 보안에 취약합니다. 해킹 이슈에 노출되어있습니다. 파일 로드의 개념이지만 캐싱을 따로 하고 있지 않습니다. 위와 같은 문제를 해결하려면 다른 방법이 필요하기에 PlayerPrefs를 글로벌 클래스로 수정하여 사용하는 방식입니다. 근본적으로는 PlayerPrefs의 기능을 쓰지만, 다양한 타입에 사용이 가능하고, Serialize 및 base64 알고리즘를 통해서 보안을 좀 더 강화했습니다. 알고리즘을 추가하여 본인이 원하면 수정도 가능합니다. 또한, 내부적으로.. 2023. 6. 1.
Unity, 에셋 FileID 가져오기 Local identifier in file 에셋의 파일 아이디를 가져오는 기능이 필요했는데, 아무래도 유니티에서는 지원하는 기원은 아닌가 보네요. 그저 구글링해서 얻은 기능이고 기록용으로 남깁니다. 스크립트 #if UNITY_EDITOR using System.Reflection; using UnityEditor; public static class UnityEditorUtils { /// /// 에셋의 파일 아이디 가져오기 /// /// /// public static int GetAssetFileID(UnityEngine.Object unityObject) { PropertyInfo inspectorModeInfo = typeof(SerializedObject).GetProperty("inspect.. 2023. 5. 14.
Unity, 박스 콜라이더 기즈모 Box Collider Gizmo Box Collider 기즈모를 볼 수 있는 스크립트입니다. 여러개의 콜라이더를 씬뷰에서 볼 수 없으니 디버깅하는데 불편함이 있어 작성하게 되었습니다. 스크립트 에디터 스크립트로써, 반드시 'Editor'라고 명시된 폴더 안에 생성하셔야합니다. BoxColliderEditor.cs using UnityEngine; using UnityEditor; [CustomEditor(typeof(BoxCollider))] public class BoxColliderEditor : Editor { private void OnSceneGUI() { BoxCollider boxCollider = target as BoxCollider; if (boxCollider == null) { r.. 2023. 5. 11.
Unity, Transform 인스펙터 커스텀 커스텀 에디터 스크립트 NGUI를 사용하던 지원하는 기능 중, 트랜스폼 컴포넌트를 커스텀해주는 기능이 있습니다. 단순하게 'P', 'R', 'S' 버튼을 눌러주는 것만으로 초기화 처리를 해주는 기능이 있는데, 이 기능을 개인적으로 사용하고자 작성했습니다. 스크립트 에디터 스크립트로써, 반드시 'Editor'라고 명시된 폴더 안에 생성하셔야합니다. TransformInspector.cs using UnityEngine; using UnityEditor; [CanEditMultipleObjects] [CustomEditor(typeof(Transform), true)] public class TransformInspector : Editor { [System.Flags] enum Axes : byte { N.. 2023. 5. 9.
NGUI, BBCode 태그 제거하기 (Replace) BBCode단순하게 BBCode 기능을 비활성화할 수 있지만(supportEncoding = false), 반드시 이용은 하나 유저 입력을 막고 싶은 경우가 있습니다. 정규식과 string의 Replace를 적절히 이용하면 쉽게 제거할 수 있습니다.스크립트public static class Utils { public static string RemoveBBCode(string input) { string output = input; // Remove [b], [i], [u], [s], [sub], [sup] tags output = Regex.Replace(output, @"\[(b|i|u|s|sub|sup)\]", ""); // Remove [url=...] tags with variable-lengt.. 2023. 4. 8.
NGUI, SafeArea를 통한 아이폰 노치 영역 대응하기 UIAnchor 노치 대응 NGUI를 이용하여 UI를 표현하고 있었지만, 최근 출시되는 기기들이 다양한 디스플레이로 나오기 시작했습니다. 이로 인해서 개발자들은 각각 상황에 맞게 대응을 해주어야하는 상황이 되었습니다. 펀치홀, 노치, 다이나믹 아일랜드 등 여러가지의 이름으로 개발자를 괴롭혀 왔지만, 유니티 2021.3 버전 이상부터는 SafeArea 클래스를 제공하고 있습니다. 이는 기기 화면에서 물리적인 화면의 영향 없이 온전하게 보이는 영역을 Rect로 확인할 수 있습니다. 이로써 SafeArea 클래스를 이용하여, UIAnchor 스크립트에 추가하여 안전한 영역에 앵커 자리를 잡도록 적용할 수 있습니다. 스크립트 UIAnchor.cs의 Update() 함수 안에, 아래와 같이 SafeArea 주석으.. 2023. 3. 30.
Unity, 작업 중 Editor가 점점 느려지는 경우 작업하다보면 에디터가 점점 느려진다?프로젝트 작업을 하다보면, 알게모르게 메모리가 누수가 되어 누적이 되고, 이는 에디터가 느려지고 작업에 영향을 줍니다. 특히 게임 플레이를 몇 번 하다보면 크게 체감이 됩니다. 유니티 프로파일를 하다보면 알 수가 있지만, 사용하지 않은 리소스들이 메모리를 차지하고 있고, 이는 대체적으로 에디터에서는 로드한 일부 Resource들을 메모리에서 계속 점유하고 있는 작동 원리에 이유가 있습니다. 몇 회 전에 실행한 리소스들도 들고 있는 경우가 종종 발견되곤 합니다. 이 경우 보통 유니티를 껐다가 다시 켜서 해결하기도 하지만, 이를 자동화 방면으로 조금이나마 해결할 수 있을까 싶어서 방법을 알아보았습니다.스크립트EditorModeMemoryManager.cs#if UNITY_.. 2023. 3. 18.
반응형