본문 바로가기
728x90

분류 전체보기81

C#, 커스텀 밴치마크 라이브러리 (함수 테스트 도구) 간혹 작업 중, '어떤 방식이 효율이 있는지?' 또는 '구글링이나 공부를 통해서 알게된 부분들이 실제로 속도가 어떤지?'가 궁금할 때가 있습니다. 간단하게 코드를 만들어서 테스트하고 싶지만, 매번 새로운 프로젝트를 따로 만들거나 해야하는 번거로움이 있습니다. 위와 같은 고충을 해결하기 위해, 간단하게 작은 라이브러리를 만들었습니다. 기존 MS에서도 지원하는 Benchmark를 모방한 커스텀 밴치마크 스크립트입니다. 굳이 모방을 한 이유는 라이브러리 따로 추가를 해야하고, 릴리즈 모드에서만 작동되고 하는 번거로움이 있으며, 간단하게 실행속도 및 빠른지의 비교에 관련된 부분이 미흡하여 따로 작성하였습니다. 밴치마크 Benchmark.cs 스크립트 더보기 더보기 using System; using System.. 2022. 1. 16.
C#, 일반적인 Cast와 is, as 키워드 그리고 퍼모먼스 프로그래밍 언어 공부 중 형변환을 사용한다면 보편적으로 일반적인 Cast 방식을 사용합니다. private static void Main(string[] args) { int intValue = 0; long longValue = 2147483647; // = int.MaxValue intValue = (int)longValue; Console.WriteLine(intValue); // Result // 2147483647 } 위와 같은 방식으로 long형에서 int형으로 데이터형이 작은쪽으로도 변환이 가능합니다. (8byte to 4byte) 그렇다면 아래와 같은 방식은 어떨까요? private static void Main(string[] args) { int intValue = 0; long lon.. 2022. 1. 13.
A* 알고리즘 구현 (Unity, C# 환경) 유니티에서 제공하는 NavMesh가 있지만, 이는 지형에 활용하는 개념이기에 그리드(Grid, Board)에서 움직이는 것을 구현하는 것에는 부적합합니다. 그래서 보통은 따로 개발을 하기도 합니다. 언젠가는 사용할 것 같아서(예를 들어 보드게임 같이 말이 움직이는 컨텐츠 구현), 개인적으로 공부하면서 작업을 해보고자는 생각에 공부 겸 글을 작성하게 되었습니다. 과거에도 한 번 구현하여 블로그에 배포한 적이 있었는데, 그때는 MFC를 통해서 구현한 것을 포스팅 및 배포했었습니다. 하지만 요즘은 전반적으로 툴을 주로 다루기도 하고, 제가 주로 유니티를 다루고 있어서, 이번에는 유티니에서 사용하여 보여드리겠습니다. 유니티를 통한 구현이지만 스크립트는 유니티 환경에 국한되지 않습니다. 알고리즘의 이해 1. 현재.. 2021. 12. 26.
NGUI Plugin, Custom GameTooltip 개인적으로 만든 NGUI 커스텀 게임 툴팁입니다. NGUI 에셋이 기본적으로 추가되어 있어야 합니다. 툴팁이 필요한 오브젝트에 GameTooltip 컴포넌트를 추가해주어 사용하시면 됩니다. 더 자세한 사용 방법은 패키지 내의 SampleScene에서 참고하여 사용하시길 바랍니다. 2021. 12. 25.
유니티, 코루틴 최적화(Coroutine Yield Instruction) 매번 생성된는 반복기 타이밍 코루틴의 경우 잦은 new() 생성, 메모리 할당으로 인해 불필요한 메모리를 차지합니다. private IEnumerator CountDown(int startTime) { while (true) { timerText.text = (startTime--).ToString(); yield return new WaitForSeconds(1f); if (startTime 2021. 12. 23.
C#, Enum.GetMoveNext() 확장함수로 다음 값으로 넘기기 개인적으로 작업을 하다가 선언한 Enum값을 하나씩 넘겨야하는 작업이 생겼습니다. 그래서 반복문, 배열 처리가 아닌 단순히 함수 Enumerator.MoveNext()처럼 하나씩 넘기면 좋겠다는 생각에 아래와 코드를 만들었습니다. /// /// Enum 다음값 가져오기 /// /// /// /// public static T GetMoveNext(this T source) where T : System.Enum { var array = System.Enum.GetValues(typeof(T)); for (int i = 0; i < array.Length - 1; i++) { if (source.Equals(array.GetValue(i))) return (T)array.GetValue(i + 1); } .. 2021. 12. 21.
C#, Description 통한 Enum 관리하기 Enum을 통한 일반적인 관리 방법 Enum을 통한 여러가지 관리 방법이 있습니다. 그 중에서 Description 어트리뷰트를 사용한 관리를 다루고자합니다. public enum File { Install, Image1, Image2, Image3, EXE, } 위와 같이 각 파일을 지칭하는 Enum이 있고, 우리는 해당 값을 이용하여 파일 주소를 가져오고자 할 경우, 대체적으로 함수를 통해 처리를 합니다. private string GetFilePath(File file) { switch (file) { case File.Install: return "Project/Release/Insall.exe"; case File.Image1: return "Project/Resources/Images/1.jp.. 2021. 12. 19.
C#, 확장함수를 이용하여 Collection<T> First, Last 가져오기 스크립트를 작성하다보면 아래와 같은 상황이 자주 연출됩니다. private static void Function() { List list = new List(); list.Add(0); list.Add(1); list.Add(2); list.Add(3); list.Add(4); var first = list[0]; var last = list[list.Count - 1]; } 코드에는 아무런 문제가 없지만, 가독성에 있어서 적합하지 않습니다. 또한 위의 코드처럼 특정 Collection뿐만이 아니라 Collection마다 First, Last를 가져오는 방식은 여러가지입니다. private static void Function() { Dictionary dic = new Dictionary(); dic... 2021. 12. 19.
유니티, 런타임 중 특정 오브젝트 모두 찾기 아래와 같이 유니티에서는 기본적으로 유니티에서는 런타임 중에 오브젝트를 찾아주는 함수가 존재하지만, 모든 오브젝트를 반환해주지 않습니다. FindObjectsOfTypeAll(typeof(GameObject)); 반환을 안 해주는 오브젝트로는 비활성화된 오브젝트는 반환해주지 않습니다. 아래의 함수는 함수를 사용하면 런타임 중 로드된 씬들의 모든 오브젝트를 반환 반을 수 있습니다. public static List FindAllObjects() where T : UnityEngine.Object { List objects = new List(); for (int i = 0; i < UnityEngine.SceneManagement.SceneManager.sceneCount; i++) { var scene .. 2021. 12. 19.
반응형