Unity 공부
Awake() Vs. Start()
특징 | Awake | Start |
---|---|---|
공통점 | 최초 1회만 실행됨 → 보통 초기화 용도로 사용 모든 오브젝트 참조 보장 |
|
객체 상태 | 객체가 Disabled일 때도 실행 | 객체가 Enabled일 때만 실행 |
실행 타이밍 | 모든 오브젝트 생성 이후 모든 Start 실행 이전(동적 생성 제외) |
최초 Update 실행 직전 |
따라서 미리 만들어둬야 하는 동적 할당체(Collections 등)는 Awake에서 할당해주는 것이 좋아 보인다(Disabled일 때도 실행해두고, Start에서 해당 변수들을 사용하기 위해서).
출처: https://blog.naver.com/blastingzone/220406033699
Dictionary의 순회
Dictionary<K, V>를 순회할 때는 KeyValuePair<K, V>라는 자료형을 사용한다.
혹은 자료형을 명시하지 않고 var를 사용해도 무방하다.
(item.Key, item.Value로 접근 가능)
출처: https://stackoverflow.com/questions/141088/how-to-iterate-over-a-dictionary
TextMeshPro 한글 폰트 깨짐
먼저 TTF/OTF 등 폰트 파일을 에셋에 추가하고,
Window → TextMeshPro → Font Asset Creator
위 UI에서 Source Font File로 에셋에 등록한 폰트 파일을 사용해서 Generate Font Atlas를 통해 SDF 에셋을 생성한다.
이후 사용할 TextMeshPro Prefab이나 오브젝트에 위 폰트 SDF를 추가해주면 완료.
추가로, SDF의 인스펙터 창에서 Altas Population Mode를 Dynamic으로 바꿔주고, 샘플링 사이즈를 60 정도로 바꿔주는 게 좋다고 한다. 글자를 미리 로딩해놓을 필요가 없다면 동적으로 로딩해서 최적화를 신경써주자.
출처: https://maloveforme.tistory.com/168
out 키워드
매개변수 앞에 붙이는 키워드, 즉 "매개변수 한정자"의 일종
변수가 참조로 전달되며, 이 변수는 함수 내부에서 값을 지정해주어야 함
예시: Int32.TryParse 함수는첫 번째 매개변수로 들어온 문자열을 int 타입의 숫자로 변환해서 두 번째 매개변수로 들어온 out 키워드 매개변수에 담아줍니다. 반환은 숫자로 변환이 가능한 값이면 true, 아니면 false.
특정 조건 하에서만 변수를 할당해서 메모리를 아끼고 싶을 경우 유용하게 사용할 수 있어 보인다.
출처: https://blockdmask.tistory.com/606
코루틴(Coroutine)이란?
실행의 지연과 재개를 허용함으로써, 비선점적 멀티태스킹을 위한 서브 루틴을 일반화한 컴퓨터 프로그램 구성요소
- 비선점형 비동기 처리 - 즉 동시성 O 병렬성 X (논리적으로 병렬 작업처럼 보이지만, 물리적으로 그렇진 않음)
- 선점형 비동기 처리: 코드가 복잡해지고, Context switch 비용 커짐
- 작업 단위인 Context를 오버라이드하여 실행 → Context switch 비용 없음, 개발자가 직접 작업 스케줄링 가능
- 서브 루틴과 다름
- 메인 루틴: 프로그램 전체의 개괄적인 동작으로 main 함수에 의해 수행되는 흐름
- 서브 루틴: 반복적인 기능을 모은 동작으로 main 함수 내에서 실행되는 개별 함수의 흐름
- 그런데 코루틴은 서브루틴과는 다르게, 중간에 동작을 중단하고 이후 해당 지점에서 실행 재개가 가능(진입-반환이 여러 개)
- Continuation Passing Style(CPS, 연속 전달 방식)과 State machine을 이용
- 일종의 콜백 함수인 Continuation을 전달해 함수 작업 완료 시 다시 호출하는 방식
출처: https://dev.gmarket.com/82
Switch 문
계산 결과를 내놓는 식(연산자)
string grade = score switch {
90 => "A",
80 => "B",
_ => "C"// default
};
위 코드를 실행하면, score에 따라 grade가 A, B, C로 초기화된다.
2개 이상의 매개변수를 받거나, 내부에서 when 절을 사용해 추가 분기 처리도 가능하다.
int damage = (selectedCardDamage, opponentSelectedCardDamage) switch
{
(1, _) => 1,
(_, 0) => 0,
(0, 1) => 0,
(0, _) => opponentSelectedCardDamage,
var (s, o) when s > o => selectedCardDamage,
_ => 0
};
출처: https://daekyoulibrary.tistory.com/entry/C-switch-%EB%AC%B8%EA%B3%BC-when-%EC%A0%88-%EA%B7%B8%EB%A6%AC%EA%B3%A0-switch-%EC%8B%9D
https://blog.naver.com/saegot/222427891659
23까지 완료!(12/10)
댓글