728x90 분류 전체보기79 Unity, 전역으로 코루틴 사용하기(Static Coroutine) 정적 코루틴 클래스 유니티를 사용하다보면 코루틴(Coroutine)을 많이 사용하게 되는데, 컴포넌트를 사용 중인 게임 오브젝트가 비활성화 되면 중단되어버립니다. 코루틴을 많이 사용하게 되면 왜 이렇게 사용하게 되는지 이해가 되는데, 주로 컴포넌트를 사용 중인 게임 오브젝트에서 개별적으로 처리하기 위함입니다. 하지만 사용을 하다보면 쓰레드의 백그라운드 워커처럼 코루틴을 백그라운드에서 사용하고 싶은 경우가 생깁니다. 예를 들어서 쓰레드에서는 처리하기 애매한 Resources.LoadAsync()를 연계해서 쓰고 싶은데 쓰레드를 생성해서 사용하기에는 무리가 있습니다. 스크립트 1. StaticCoroutine.cs using System; using System.Collections; using System.. 2022. 7. 24. 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#, 우선순위 큐 개념과 힙을 통한 구현 우선순위 큐란? 큐(Qeueu)는 FIFO(First In First Out) 방식을 따르기 때문에, 입력 순서대로 출력되는 데이터 구조인 반면, 우선순위 큐(Priority Qeueu)는 입력 순서와는 무관하게 우선순위대로 출력되는 데이터 구조입니다. 시간 복잡도 우선 순위 큐는 Enqueue()시, 내부적으로 정렬을 해주거나 또는 탐색을 해주어야하는 로직이 필요합니다. 우선 순위대로 정렬하거나 탐색하는 방법으로 얼마나 효율적으로 만드느냐가 주제의 핵심 포인트가 되겠습니다. 이 글에서는 'O(N)'과 'O(logN)' 두 가지 방식을 다룹니다. 우선순위 큐 구현 방법과 종류 Queue의 Enqueue()시, 내부적으로 효율적인 탐색 방법이 필요하다. 간단한 구현 방식으로는 'O(N)'의 복잡도를 가지고.. 2022. 7. 10. 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. NGUI Atlas 화질 저하 해결 방법 NGUI Atlas 화질 저하? NGUI Atlas로 묶으면 이상하게 원본과 다르게 품질 저하가 발생한다. 해당 관련되어서 정보를 알아보면 아래와 같은 이유를 찾을 수 있다. 아틀라스 사이즈가 커질 수록, 화질 저하가 발생한다. 이는 아틀라스를 만드는 내부 로직 또는 유니티 버전별 내부 로직 의심. (명확한 이유가 없다는 과거글) 실제 진행하는 프로젝트 개발 과정에서, UI 디자이너와 아트 디렉터(AD) 분들이 뭉개져 보인다는 제보를 들었다. 원본 리소스 개별 리소스와 아틀라스를 비교를 해서 확대해보니 픽셀이 깨져보이고 있었다. 원인 유니티에서는 모든 파일을 'Object'클래스를 상속받은 파일로 일괄 관리를 한다. 그래서 부가적으로 각 파일마다 메타 파일이라는 것이 생기고, 거기서 속성을 조절할 수 있.. 2022. 4. 23. Unity, 플레이 모드가 아닌 상태에서 코루틴 사용하기 "Application.isPlaying == false"일 때, 코루틴을 사용하고 싶다면? 일반적이지 않은 상황에서 코루틴을 쓰고 싶은 경우 아래와 같이 해결할 수 있습니다. UnityEditor 네임스페이스를 이용하여 코루틴처럼 만들기 반복기(IEnumerator)의 특성을 이용하여 일반 함수처럼 돌려쓰기 유니티 지원 코루틴 패키지 설치하기 1. UnityEditor 네임스페이스를 이용하여 코루틴처럼 만들기 UnityEditor.EditorApplication.update 델리게이트를 통하여 프레임마다 함수를 호출하는 방법입니다. 아래의 코드를 작성합니다. EditorCoroutine.cs #if UNITY_EDITOR public class EditorCoroutine { public static .. 2022. 4. 6. NGUI Custom Extension Tool 🛠NGUI Custom Extension Tool🛠 NGUI와 UGUI를 융화 시켜주는 강력한 패키지입니다. 기능은 아래와 같습니다. NGUI에서 파티클 시스템 및 스파인 캐릭터 등 뎁스 조절 가능 NGUI에서 파티클 시스템 및 스파인 캐릭터 등 패널의 클리핑 영역 마스킹 처리 가능 1. UIPanel 클리핑 예제 패널 및 스크롤뷰에서 마스킹 기능을 사용하여, 기존 NGUI와 같이 사용이 가능합니다. "UIPanel"을 추가한다. "LayerMask"를 추가한다. 필요한 경우 레이어 마스크를 추가해준다. 2. 뎁스 조절 기능 기존 NGUI와 유연하게 사용할 수 있다.위의 이미지와 같이 뎁스 조절이 가능하며, 스파인 캐릭터도 가능합니다. 마무리 여기저기 알아보면, 클리핑 관련되어서 스텐실 셰이더가 나오며,.. 2022. 3. 24. Unity, UI Masking 중첩 해결 방안 마스크 이미지를 미리 생성해주는 패키지 마스크 기능이 들어가는 UI의 경우 중첩으로 마스크를 지원해주지 않은 경우가 있습니다. 현재 제가 사용 중인 NGUI의 경우 중첩으로 마스킹 하는 경우 제대로 스텐실 쉐이더가 작동하지 않아 깨집니다. NGUI에 대해서 조금 더 알아보니 중첩 마스킹은 지원하지 않는다고 합니다. NGUI측에서는 셰이더 스텐실 연산이 중첩으로 들어가는 경우가 연산에 문제가 생기는 이슈가 있어서 지원하지 않는다고 하네요. 그러면 개별적으로 마스킹 텍스쳐를 생성하고 받아오면 되지 않을까라는 생각에, 마스킹 이미지를 만들어주는 ScriptableObject를 작성했습니다. 예제 1. SciptableObject Data 생성하기 2. 텍스처, 마스크, 좌표 설정 3. 스크립트에서 사용하기 p.. 2022. 3. 6. 이전 1 ··· 3 4 5 6 7 8 9 다음 반응형