728x90
Unity의 Occlusion Culling(오클루전 컬링) 은 성능 최적화 기법 중 하나로, 카메라에서 보이지 않는 오브젝트(가려진 오브젝트)를 렌더링하지 않도록 하여 불필요한 연산을 줄이는 기술입니다. 이는 특히 복잡한 씬이나 실내 환경 등에서 성능 향상에 매우 유용합니다.아래에 Occlusion Culling에 대한 개념과 구현 절차를 단계별로 정리했습니다.🧠 Occlusion Culling 개요Frustum Culling: 기본적으로 Unity는 카메라 뷰 프러스텀(Frustum) 밖에 있는 오브젝트는 렌더링하지 않습니다.Occlusion Culling: 카메라 뷰 안에 있지만 다른 오브젝트에 가려져 실제로 보이지 않는 오브젝트도 렌더링하지 않도록 막아줍니다.장점:불필요한 드로우콜 제거CPU 및..
🎨 Unity URP에서 블러 처리하기 – 포스트 프로세싱 완전 정복**포스트 프로세싱(Post-processing)**은 게임 화면의 최종 결과물에 시각 효과를 더하는 과정입니다. Bloom, Color Grading, Vignette 등 다양한 효과가 있지만, 그중에서도 오늘은 "블러(Blur)" 처리에 집중해봅니다.URP(Unity Universal Render Pipeline)에서는 기본적으로 블러 기능이 제공되지 않기 때문에, 직접 구현하거나 외부 예제를 활용해야 합니다.✅ 포스트 프로세싱이란?🎞️ 정의렌더링이 끝난 뒤 화면 전체 혹은 일부에 시각 효과를 추가하는 단계입니다.감성 연출, 몰입도 향상, 주의 집중 등에 자주 활용됩니다.🧰 자주 쓰는 포스트 프로세싱 효과효과 설명 활용 예시Bl..
🎨 포스트 프로세싱이란? – 게임과 콘텐츠를 더 생생하게 만드는 마법**포스트 프로세싱(Post-processing)**은 게임이나 영상에서 렌더링이 완료된 이미지에 추가로 효과를 주는 단계를 말합니다.이 과정을 통해 화면에 생동감을 더하고, 몰입도를 높이며, 마법 같은 연출이 가능해집니다.🌟 왜 필요한가요?단순히 3D 모델과 텍스처만으로는 표현할 수 없는 감성적 분위기, 현실감 있는 깊이, 드라마틱한 효과를 더할 수 있기 때문이에요.특히 교육용 콘텐츠나 어린이 게임에서는 보상 장면, 마법적 순간, 집중 유도 시점에 포스트 프로세싱을 적극 활용하면 콘텐츠의 퀄리티가 확연히 올라갑니다.🧰 자주 쓰이는 효과들효과 설명 사용 예시Bloom밝은 부분이 퍼지며 빛나는 느낌“완성!” 순간의 반짝임Color G..
🎮 Unity Animator 완전 정복 – 애니메이션을 컨트롤하는 가장 확실한 방법Unity에서 캐릭터나 오브젝트에 생명을 불어넣는 가장 강력한 도구는 바로 Animator입니다.이번 글에서는 Animator의 핵심 개념부터 설정, State 구성, Blend Tree, 그리고 스크립트를 통한 제어까지!처음부터 끝까지 단계별로 정리해드릴게요.🧠 Animator란?Animator는 Unity에서 애니메이션 상태(state)를 관리하고 전환시키는 **애니메이션 상태 기계(State Machine)**입니다.💡 쉽게 말하면:"언제 어떤 애니메이션을 재생할지를 자동으로 조절해주는 시스템"📦 Animator 구성 요소 요약요소 설명State하나의 애니메이션 동작 (예: Idle, Walk, Jump 등)..
🎯 Unity에서 비활성화된 자식 오브젝트까지 가져오는 방법 (GetComponentsInChildren 활용법)Unity에서 게임 오브젝트의 자식 컴포넌트를 가져올 때 GetComponentsInChildren()을 자주 사용합니다.하지만 이 메서드는 기본적으로 비활성화된(비활성) 자식 오브젝트는 무시합니다.그래서! 비활성화된 오브젝트도 포함해서 가져오려면 한 가지 설정이 필요합니다.📌 기본 사용법Button[] buttons = parent.GetComponentsInChildren();이 코드는 parent 오브젝트의 자식 중 활성화된(Button 컴포넌트를 가진) 오브젝트만 가져옵니다.즉, SetActive(false) 상태인 자식은 포함되지 않아요.✅ 비활성 자식도 포함하는 방법Button[..
✅ 클로저(Closure)란?클로저는 어떤 함수가 자신이 선언될 때의 스코프(scope)에 있는 변수들을 기억하는 기능이에요.예시:for (int i = 0; i Debug.Log(i); printI();} 이 코드는 0, 1, 2를 출력할 것 같지만…사실은 **모두 3**을 출력합니다.왜냐면 printI() 안의 i는 반복문이 끝난 후의 최종 값 3을 참조하고 있기 때문이에요.람다 함수 안에서 i를 "값으로 복사"하는 게 아니라 **"참조"**만 하기 때문에 이런 문제가 발생합니다.✅ Unity에서의 클로저 문제Unity에서 버튼에 이벤트를 연결할 때도 비슷한 문제가 생깁니다:for (int i = 0; i OnClick_AnsweBtn(AnswersBtnList[i].gameObject));..
https://github.com/otdavies/UnityChromakey/blob/master/Shaders/ChromaKey.shader UnityChromakey/Shaders/ChromaKey.shader at master · otdavies/UnityChromakeyA simple, yet powerful chromakey / greenscreen solution for Unity. Designed to be used with virtual production. - otdavies/UnityChromakeygithub.comChractorPlane (Plane 오브젝트)ChromaKeyMat 머티리얼 할당Video Player 컴포넌트Render Mode ➡️ Render TextureTarg..
✅ 왜 CoroutineRunner가 필요할까?여러 코루틴을 관리할 때 코드가 지저분해짐중단/시작/덮어쓰기 규칙을 정형화하고 싶을 때반복적인 Coroutine 핸들 관리 코드가 싫을 때✅ 기본 개념코루틴을 키(key)로 구분해서 관리하고특정 키에 새로운 코루틴을 덮어쓰기 하거나,전체 코루틴을 멈출 수 있음🚀 간단한 CoroutineRunner 만들기✅ 장점기능설명✅ 키 기반 코루틴 관리"PCR" 키, "Narration" 키 따로 관리 가능✅ 중복 방지같은 키는 자동으로 중지 후 덮어쓰기✅ 확장성 좋음RunAndWait(), 타임아웃, CancellationToken 등 추가 가능✅ 코드 깔끔함Coroutine 핸들 관리 필요 없음 1. 변수 선언[SerializeField] private Corout..
📌 기본적인 인스펙터 속성[Header("제목")] - 섹션 구분[Header("Experiment Process Settings")]public float DenaturationTemp = 94f;✔ 그룹별로 구분 가능[Space(n)] - 간격 추가[Space(10)] // 위 속성과 10픽셀 간격 추가public float AnnealingTemp = 65f;✔ 가독성을 위해 여백을 추가[Tooltip("설명")] - 마우스 오버 시 설명 표시[Tooltip("현재 실행 중인 실험 사이클입니다.")]public int CurrentCycle = 1;✔ 마우스를 올리면 설명 툴팁 표시 [Range(min, max)] - 슬라이더 UI 제공[Range(1, 50)]public int MaxCycle..