반응형

[Unity] 109

[C#] reflection

: 프로그램 실행 도중 객체의 정보를 조사하거나, 다른 모듈에 선언된 인스턴스를 생성하거나, 기존 개체에서 형식을 가져오고 해당하는 메서드를 호출, 또는 해당 필드와 속성에 접근할 수 있는 기능을 제공합니다. Type.GetConstructors() : 모든 public 생성자 가져옴 -> 괄호 안에 매개변수 타입이 찍힘 Type.GetMethods() : 해당 형식의 메서드 목록을 가져옴 Type.GetFields() : 해당 형식의 필드 목록을 가져옴 * 사용 예시 using System.Reflection; class Animal { public int age; public string name; public Animal(string name, int age) { this.name = name; t..

[Unity]/[C#] 2022.10.05

[C#] partial 클래스

: 클래스, 구조체, 인터페이스, 메서드의 정의를 둘 이상의 소스파일에 분할하는 것으로, 컴파일할 때 다시 결합합니다. * 사용 타이밍 대규모 프로젝트에서 여러 프로그래머가 동시에 한 클래스에 대해 작업할 경우 자동으로 생성된 소스로 작업하는 경우 → 소스 파일을 다시 만들지 않고도 클래스에 코드 추가 * 주의 사항 - 대리자, 열거형 선언에서는 partial 한정자를 사용할 수 없음. * 사용 방법 간단한 예시 public partial class Employee { public void DoWork() { Console.WriteLine("work"); } } public partial class Employee { public void DoSleep() { Console.WriteLine("slee..

[Unity]/[C#] 2022.10.04

[Unity] Scriptable Object

: 클래스 인스턴스와는 별도로 대량의 데이터를 저장하는 데 사용할 수 있는 데이터 컨테이너 입니다. 값의 사본이 생기는 것을 방지하여 프로젝트의 메모리 사용량을 줄입니다. 변경되지 않는 데이터를 저장하는 MonoBehavior 스크립트와 연결된 프리팹이 있는 프로젝트의 경우 유용한데, 데이터를 일반 변수로 구현할 경우 인스턴스화 할 때마다 프리팹에 이 데이터에 대한 자체 사본이 생성됩니다. Scriptable Object를 사용하면 메모리에 Scriptable Object의 데이터 사본만을 저장하여 이를 참조하는 방식으로 작동합니다. 유니티 오브젝트에서 파생되지만 게임 오브젝트에 컴포넌트로 부착할 수 없고, 프로젝트에 에셋으로 저장됩니다. 에디터 사용 시, Scriptable Object에 데이터를 저장..

[Unity]/[Unity] 2022.10.03

[C#] 일반화 프로그래밍

* 일반화 대상 = 데이터 형식. * 형식 매개 변수 T는 모든 데이터 형식을 대신할 수 있습니다. * ArrayList, Queue, Stack, Hashtable 컬렉션들은 모두 object 형식을 기반으로 하기 때문에 태생적으로 성능 문제를 안고 있는데, 일반화 컬렉션은 컴파일시 컬렉션에서 사용할 형식이 결정되고, 쓸데없는 형식 변환을 일으키지 않아 성능 저하가 해결됩니다. 대표적인 일반화 컬렉션은 List, Queue, Stack, Dictionary가 있습니다. List = ArrayList의 일반화 버전, Dictionary = Hashtable의 일반화 버전입니다. * 타입 일반화 메서드 예시 static void CopyData(T[] source, T[] target) { target =..

[Unity]/[C#] 2022.09.30

[C#] 확장 메서드 기법

: 기존의 클래스에 손대지 않고 메서드를 추가하는 방법입니다. * 확장 메서드 사용 조건 확장 메서드를 정의할 클래스를 static으로 선언. 정의한 클래스 내부에 확장하고 싶은 메서드를 static으로 선언. 첫번째 파라미터로 메서드가 포함되어질 클래스를 this 포인터와 함께 적어줌. * 확장 메서드 사용 예시 public static class LongExtensions { public static string ToPrice(this long value) { return value.ToString("N0"); } } long a = 13343454323243; string price = a.ToPrice(); Console.WriteLine((price)); //13,343,454,323,243 출력

[Unity]/[C#] 2022.09.29

[C#] 메서드 매개 변수 : params, in, ref, out

* params : 가변 개수의 인수. * in : 매개 변수를 참조로 전달할 수 있지만, 호출된 메서드로만 읽을 수 있습니다. static void InArgExample(in int number) { number = 19; //오류 출력 -> 수정 불가능. } * ref : 인수가 값이 아닌 참조로 전달됨을 의미합니다. void Method(ref int refArgument) { refArgument = refArgument + 44; } int number = 1; Method(ref number); Console.WriteLine(number); //45 출력 -> 값타입인 int도 참조로 전달 * out : 매개 변수가 참조로 전달되고, 호출된 메서드에 의해 새로 기록되도록 해줍니다. 메서드가..

[Unity]/[C#] 2022.09.28

[C#] Tuple(튜플) 형식

: 간단한 데이터 구조로, 여러 데이터 요소를 그룹화하여 간결한 구문으로 제공합니다. 여러 값을 함께 리턴해야 할 때 유용합니다. 타입이 없는 튜플은 지역변수에 넣을 수 없습니다. var invalid = (10, null); → 유효하지 않음. 애리티(arity)가 동일하고, 그에 대응하는 요소의 타입이 암시적으로 변환 가능할 경우 튜플 리터럴을 튜플 타입으로 암시적 변환할 수 있습니다. 튜플 리터럴 : 각 요소는 값을 가지며, 이름을 선택적으로 지정할 수 있습니다 - (5, title: ”text”) 튜플 타입 : 각 요소가 타입을 가지며, 이름을 선택적으로 지정할 수 있습니다 - (int x, string) //튜플 변수를 선언하고 초기화 (double, int) t1 = (4.5, 3); Cons..

[Unity]/[C#] 2022.09.27

[C#] Action과 Func

: 메서드를 매개변수로 전달하는 기법. delegate에는 action, func, predicate 대리자가 있으며, 이번 포스팅에서는 action과 func의 사용 예시만 다뤄보려 합니다. * 이전 delegate vs event 포스팅 : https://geukggom.tistory.com/210 [C#] delegate와 event의 차이 1. delegate 2. event 3. delegate와 event의 차이점 1. delegate : delegate는 하나의 형식(type)으로, 메서드에 대한 참조입니다. delegate는 인스턴스 메서드, 정적메서드 모두 참조 가능합니다. delegate는.. geukggom.tistory.com * 둘 다 입력 매개 변수의 개수가 0~16개까지 가능...

[Unity]/[C#] 2022.09.26

[Unity] AsyncOperation

: 비동기적인 연산을 위한 코루틴을 제공합니다. 유니티의 LoadScene 메서드를 호출했을 때, 유니티는 해당 장면의 모든 정보를 메모리로 가져오기 전까지 다른 작업을 하지 못합니다. 이 상황이 게임이 멈춰있는 상황으로 이어질 수 있기 때문에 유니티에서는 AsyncOperation을 제공합니다. 사용 예시를 간단하게 보여드리겠습니다. using UnityEngine.SceneManagement; AsyncOperation asyncOper = SceneManager.LoadSceneAsync("SceneName"); //장면이 준비되는 즉시 장면을 활성화시킬 것인지 허용 여부 asyncOper.allowSceneActivation = false; while(!asyncOper.isDone) //해당 동..

[Unity]/[Unity] 2022.09.23

[Unity] 유니티용 비동기 라이브러리 패키지 Unitask

: 유니티용 async-await 통합 비동기 라이브러리 패키지. C#의 async-await를 유니티에 맞게 최적화하여 기본 Task보다 가볍고, 기존 C#의 Task/ValueTask/IValueTaskSource와 호환성이 뛰어납니다. * 예시 코드 private UniTask WaitTouch() { _touchButton.gameObject.SetActive(true); return _touchButton.OnClickAsync(); } try-catch로 예의처리 가능합니다. 콜백 없이 작성하는 경우, 코드가 선형적으로 순서대로 실행되기 때문에 규칙성 있고 깔끔합니다. struct base : heap에 할당되지 않으므로 zero allocation. 유니티 메인 쓰레드(Player Loop)..

[Unity]/[Unity] 2022.09.22
반응형