본문 바로가기
728x90
반응형

전체 글220

Unity에서 캐릭터별 셰이더와 Material을 독립적으로 제어하는 방법 Unity에서 캐릭터의 하이라이트, 외곽선, 피격 효과 등의 셰이더를 제어하다 보면 자주 마주치는 문제가 있다. 바로 "한 캐릭터의 Material을 변경했는데 다른 캐릭터까지 같이 변경되는 문제"다. 특히 여러 캐릭터가 동일한 Material을 공유하고 있는 상황에서는 sharedMaterial과 material의 차이를 정확히 이해하고 사용하는 것이 중요하다. 캐릭터별로 다른 셰이더 효과를 적용하려면 단순히 material과 sharedMaterial의 차이뿐만 아니라 Material 자체를 변경하려는 것인지, Material의 프로퍼티 값만 변경하려는 것인지도 구분할 필요가 있다. 왜 다른 캐릭터까지 같이 변경될까?여러 캐릭터가 다음과 같이 하나의 Material을 공유하고 있다고 가정한다.Char.. 2026. 8. 15.
Unity 6.3 사라진 머티리얼 변환 기능 어디로갔나 - Render Pipeline Converter Unity 프로젝트를 Built-in Render Pipeline에서 URP로 변경하다 보면 기존 머티리얼이 핑크색으로 깨지는 경우가 있다. 예전에는 머티리얼을 선택한 뒤 메뉴를 통해 URP용 머티리얼로 변환할 수 있었는데, Unity 6.3에서는 기존에 사용하던 메뉴가 보이지 않아 당황할 수 있다. Unity 6.3에서는 Render Pipeline Converter를 이용해 기존 머티리얼을 URP에 맞게 변환할 수 있다.Render Pipeline Converter 실행하기상단 메뉴에서 다음 경로로 이동한다. Window > Rendering > Render Pipeline Converter 실행하면 다음과 같은 화면이 나타난다. 상단의 파이프라인 선택 항목에서 Built-in to URP를 선택한.. 2026. 8. 15.
[궁금시리즈] 5-9. Task.WhenAll()과 Task.WhenAny()는 언제 사용할까? 다음 코드를 보자.await DownloadFileAsync("A");await DownloadFileAsync("B");await DownloadFileAsync("C"); 언뜻 보면 세 개의 다운로드가 동시에 진행될 것처럼 보인다. 하지만 실제 실행 순서는 다음과 같다.A 다운로드↓완료↓B 다운로드↓완료↓C 다운로드 즉,앞 작업이 끝나야 다음 작업이 시작된다.만약 서로 독립적인 작업이라면동시에 실행하는 것이 훨씬 효율적이다.Task를 먼저 생성하면 어떻게 될까?다음 코드를 보자.Task taskA = DownloadFileAsync("A");Task taskB = DownloadFileAsync("B");Task taskC = DownloadFileAsync("C");await taskA;await .. 2026. 7. 21.
[궁금시리즈] 5-8. async void를 사용하면 안 되는 이유 다음 두 메서드를 보자.public async Task SaveAsync(){ await Task.Delay(1000);} 그리고public async void SaveAsync(){ await Task.Delay(1000);} 둘 다 컴파일된다.둘 다 await도 사용할 수 있다. 그렇다면 둘은 무엇이 다를까?많은 초보 개발자는반환형만 다를 뿐 같은 기능이다. 라고 생각한다. 하지만 실제로는동작 방식이 완전히 다르다. 이번 글에서는 왜 async void가 대부분의 상황에서 권장되지 않는지 알아보자.먼저 Task를 떠올려 보자앞에서 살펴본 것처럼Task는 작업 하나를 나타내는 객체이다.Task task = SaveAsync(); Task가 있으므로await task; 도 할 수 있고Task... 2026. 7. 21.
[궁금시리즈] 5-7. CPU Bound와 I/O Bound는 무엇이 다를까? 비동기 프로그래밍을 공부하다 보면 자주 등장하는 용어가 있다.바로 CPU Bound와 I/O Bound이다.처음에는 단순히CPU 작업입출력 작업정도로 이해하기 쉽다. 하지만 실제로는어떤 작업인지에 따라 비동기 처리 방식이 완전히 달라진다.이번 글에서는 CPU Bound와 I/O Bound의 차이와 각각 어떤 방식으로 처리해야 하는지 알아보자.CPU Bound란?CPU Bound는CPU가 계속 계산해야 하는 작업이다. 예를 들어for (int i = 0; i CPU는계산↓계산↓계산↓계산 처럼쉬지 않고 연산을 수행한다.즉,CPU 성능이작업 속도를 결정한다.대표적인 CPU Bound 작업은이미지 처리영상 인코딩데이터 압축AI 계산암호화대량의 수학 연산물리 계산 등이 있다.I/O Bound란?반대로I/O Bo.. 2026. 7. 21.
[궁금시리즈] 5-6. Task.Run()은 언제 사용해야 할까? 비동기 코드를 작성하다 보면 다음과 같은 코드를 자주 보게 된다.await Task.Run(() =>{ DoWork();}); 많은 개발자는"비동기 작업은 모두 Task.Run으로 실행해야 한다." 라고 생각한다. 하지만 실제로는 그렇지 않다.Task.Run()은 모든 비동기 작업을 위한 도구가 아니라 CPU를 많이 사용하는 작업(CPU Bound) 을 다른 스레드에서 실행하기 위한 도구이다. 이번 글에서는 Task.Run()이 왜 존재하는지, 그리고 언제 사용해야 하는지 알아보자.먼저 Task.Run은 무엇일까?다음 코드를 보자.await Task.Run(() =>{ HeavyCalculation();}); Task.Run()은 전달된 작업을 ThreadPool의 스레드에서 실행하도록 예약한.. 2026. 7. 21.
728x90
반응형