| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
- 입문
- Gir Ignore
- 최적화
- 삼성 개발자 옵션
- Sprite Atlas
- SVN
- 텍스트 메시 프로
- PVRTC
- unity
- TextMeshPro
- 2D Camera
- 기초
- Dots
- DotsTween
- Android Debug
- Custom Package
- Dynamic Font
- 버전관리
- 엘지 개발자 옵션
- git
- 게임개발
- C#
- Unity Editor
- Samsung 개발자 옵션
- claude code
- adfit
- 이미지 폰트
- LG 개발자 옵션
- ui
- 다이나믹 폰트
- Today
- Total
목록unity (82)
EveryDay.DevUp
[PART14.고급 언어 기능(5/5)] partial 클래스와 partial 메서드 — 코드 생성기와 함께 쓰는 방법하나의 클래스를 여러 파일에 나눠 쓰는 이유 / 컴파일러가 합치는 원리 / Source Generator와의 완벽한 시너지목차문제 제기partial 클래스partial 메서드C# 버전별 변화정리문제 제기Unity에서 PlayerController를 만들다 보면 입력 처리, 이동, 전투, 애니메이션, 사운드까지 한 파일에 몰리면서 수천 줄짜리 괴물 스크립트가 탄생한다. 팀원 둘이 같은 파일을 수정하면 Git 충돌은 일상이 된다.더 심각한 문제가 있다. 코드 생성 도구가 자동으로 만들어주는 코드와 내가 직접 작성한 코드가 같은 클래스에 있어야 할 때, 생성 도구를 다시 실행하면 내 코드가 덮..
[PART14.고급 언어 기능(4/5)] Source Generator — 컴파일 타임 코드 생성리플렉션을 대체하는 이유 / Roslyn 파이프라인에서 코드가 태어나는 과정 / AOT와 Unity에서 빛나는 순간목차문제 제기 — 리플렉션이 풀지 못하는 문제개념 정의 — Source Generator는 무엇인가내부 동작 — Roslyn 파이프라인에서 코드가 태어나는 과정실전 적용 — 리플렉션을 Source Generator로 대체하기함정과 주의사항 — Source Generator의 제약과 흔한 실수C# 버전별 변화 — ISourceGenerator에서 IIncrementalGenerator로정리 — 핵심 요약 체크리스트1. 문제 제기 — 리플렉션이 풀지 못하는 문제Unity 모바일 게임을 만들다 보면, ..
[PART14.고급 언어 기능(3/5)] 표현식 트리 — 코드를 데이터로 다루는 원리람다를 실행하지 않고 분석한다 / Expression와 Func의 결정적 차이 / IQueryable의 비밀 / IL2CPP 환경에서의 생존 전략목차문제 제기개념 정의내부 동작실전 적용함정과 주의사항C# 버전별 변화정리문제 제기Unity 프로젝트에서 이런 코드를 본 적이 있을 것이다.C#// 리플렉션으로 컴포넌트 프로퍼티에 접근string propName = "Health";var value = playerComponent.GetType().GetProperty(propName)?.GetValue(playerComponent);프로퍼티 이름을 문자열로 넘기는 이 패턴은 위험하다. "Health"를 "Helath"로 오타를..
[PART14.고급 언어 기능(2/5)] 리플렉션 — 타입을 런타임에 분석하는 원리typeof · GetType · MethodInfo.Invoke의 IL 수준 동작 / 리플렉션의 성능 비용과 델리게이트 캐싱 / BindingFlags로 private 멤버까지 탐색하는 방법 / IL2CPP 코드 스트리핑 함정 / Source Generator로 리플렉션을 대체하는 현대적 패턴목차문제 제기 — 컴파일 타임에 알 수 없는 타입을 다뤄야 한다면?개념 정의 — 리플렉션이란 무엇인가내부 동작 — Type 객체를 얻는 세 가지 방법실전 적용 — 리플렉션은 언제 쓰는가함정과 주의사항C# 버전별 변화정리1. 문제 제기 — 컴파일 타임에 알 수 없는 타입을 다뤄야 한다면?Unity 프로젝트에서 이런 상황을 떠올려보자. ..
[PART14.고급 언어 기능(1/5)] Attribute — 코드에 메타데이터를 붙이는 방법코드 위에 꼬리표를 달아 프레임워크가 읽게 만드는 원리 / 커스텀 Attribute 작성법 / Unity Inspector의 비밀목차왜 이걸 알아야 하는가개념 정의 — Attribute란 무엇인가내부 동작 — 컴파일러와 런타임이 Attribute를 처리하는 방식실전 적용 — Attribute를 효과적으로 쓰는 방법함정과 주의사항C# 버전별 변화정리왜 이걸 알아야 하는가Unity에서 [SerializeField]를 붙이면 private 필드가 인스펙터에 나타나고, [Range(0, 100)]을 붙이면 슬라이더가 생긴다. [RequireComponent]를 붙이면 컴포넌트가 자동으로 추가된다. 이 대괄호 한 줄이 도..
[PART13.패턴 매칭과 현대 C#(4/4)] 범위와 인덱스 — ^와 ..는 무엇인가끝에서부터 세는 인덱스 / 슬라이싱 / Span과의 결합으로 할당을 없애는 법목차문제 제기 — 왜 `arr.Length - 1`을 매번 쓰는가개념 정의 — `^`와 `..`, 그리고 두 구조체내부 동작 — 컴파일러는 이 문법을 어떻게 풀어내는가실전 적용 — Unity 핫패스에서 GC를 없애는 법함정과 주의사항 — `^0`, `List`, 잘못된 슬라이싱C# 버전별 변화정리1. 문제 제기 — 왜 arr.Length - 1을 매번 쓰는가Unity에서 간단한 상황을 하나 떠올려 봅시다. 네트워크 패킷의 마지막 체크섬 바이트를 읽고, 헤더 4바이트를 뗀 본문을 꺼낸다고 해봅니다. C# 8.0 이전이라면 이런 코드가 익숙합니다...
[PART13.패턴 매칭과 현대 C#(3/4)] ref, out, in — 세 키워드의 차이왜 값을 복사하지 않고 참조로 넘기는가 / out 변수 인라인 선언 / in의 존재 이유목차문제 제기 — 큰 struct를 값으로 넘기면 무슨 일이 벌어지는가개념 정의 — ref·out·in은 무엇이 다른가내부 동작 — 관리 포인터와 계약의 차이실전 적용 — Unity 핫패스에서 언제 무엇을 쓰는가함정과 주의사항 — 방어적 복사와 잘못된 계약C# 버전별 변화 — 7.0·7.2·11·12·13에서 무엇이 생겼나정리 — 핵심 요약 체크리스트마무리1. 문제 제기 — 큰 struct를 값으로 넘기면 무슨 일이 벌어지는가Unity에서 캐릭터 상태를 표현하는 구조체를 하나 떠올려 봅시다. 위치·회전·속도·체력·마나·상태 플래..
[PART13.패턴 매칭과 현대 C#(2/4)] switch 표현식 — 왜 switch statement를 대체하는가값을 반환하는 분기 / 완전성 검사로 잡는 버그 / 패턴 매칭과 만나 생기는 표현력목차왜 switch 표현식을 알아야 하는가switch 표현식이란 무엇인가컴파일러는 switch 표현식을 어떻게 변환하는가실전: Unity에서 switch 표현식 쓰는 법흔한 실수와 엣지 케이스C# 버전별 switch·패턴 매칭 발전사정리목차1. 왜 switch 표현식을 알아야 하는가2. switch 표현식이란 무엇인가3. 컴파일러는 switch 표현식을 어떻게 변환하는가4. 실전: Unity에서 switch 표현식 쓰는 법5. 흔한 실수와 엣지 케이스6. C# 버전별 switch·패턴 매칭 발전사7. 정리1...
[PART13.패턴 매칭과 현대 C#(1/4)] 패턴 매칭 — is와 switch는 어떻게 진화했는가C# 1의 투박한 is 캐스팅부터 C# 11의 리스트 패턴까지 / 왜 언어가 "데이터의 모양을 선언"하는 방향으로 기울었는가 / 컴파일러가 만드는 if 체인과 점프 테이블의 실제 / Unity 핫패스에서 언제 박싱이 튀어나오는가목차[문제 제기] object를 받아 분기하는 코드가 왜 이렇게 장황한가[개념 정의] 패턴의 7가지 갈래 — 한눈에 펼쳐놓기[어원/역사] C# 1~6 — is는 원래 "true/false를 던지는" 소박한 연산자였다[원리] C# 7 — is와 switch가 "패턴"을 먹기 시작하다[원리] C# 8 — switch가 "값을 돌려주는 표현식"이 되다[원리] C# 9~11 — 관계·논리·..
[PART12.메모리 관리와 성능(10/10)] unsafe와 포인터 — 관리형 세계를 벗어나는 방법왜 C#에 포인터가 있는가 / fixed 문과 GC pinning / delegate*와 fixed-size buffer / Span로 대부분을 안전하게 대체하는 법목차1. [문제 제기] 관리형 세계의 벽 — 왜 GC가 있는데 포인터가 필요한가2. [개념 정의] unsafe·포인터·fixed — 무엇인가3. [내부 동작] fixed는 왜 안전한가 — GC 압축과 pinning4. [실전 적용] unsafe가 진짜 필요한 순간들5. [함정과 주의사항]6. [C# 버전별 변화]7. [정리]C#은 GC(Garbage Collector, 관리형 힙의 객체를 자동으로 수거하는 런타임 구성요소)가 메모리를 책임지는 ..
