[Unity 이슈] Editor에서는 잘 되지만 Build가 안되는 이슈
·
유니티(Unity)/이슈 도감
✍️ 개요  최근에 빌드를 했는데...    위 사진처럼 Package에서 빌드 오류가 발생했습니다. 간혹 빌드 시 일부 스크립트에서 using 구문에서 오류가 발생하곤 합니다. 오늘은 이 부분에 대해서 원인과 해결책을 살펴보도록 하겠습니다.만약 Build 시 아래 오류가 발생한다면 아래 해결책으로 해결될 수 있습니다.  The type or namespace name 'PackageManager' does not exist in the namespace 'UnityEditor'The type or namespace name 'EditorWindow' could not be foundThe type or namespace name 'Editor' does not exist in the namespace ..
[Unity 이슈] Package 파일 참조하는 방법
·
유니티(Unity)/이슈 도감
✍️ 개요  최근에 Custom Package을 만들었는데 위처럼 에셋을 불러오지 못하는 문제를 확인했습니다. AssetDatabase.LoadAssetAtPath 의 경로는 Unity 프로젝트 디렉토리의 루트를 기준으로 하더군요. 그래서 위처럼 절대 경로를 사용하면 안된다는 사실을 깨달았습니다.   📌 해결 방법   AsssetDatabase.LoadAssetAtPath(string path) 메서드를 활용합니다. 루트가 프로젝트 폴더이니 path를 Packages/~로 시작하여 에셋에 접근하면 됩니다. 여기서 중요한 점은, Editor에 표시되는 폴더명이 아니라, pakcage.json에 기재된 패키지명을 적습니다. 잘못된 예 : Packages/DevelopKit/HubTexture.png올바른 ..
[Unity 쉐이더] 프로퍼티 생성
·
유니티(Unity)/쉐이더
✍️ 개요  쉐이더 프로퍼티는 쉐이더에서 정의된 변수로, Material을 통해 제어할 수 있는 값을 의미합니다. Unity의 Inspector 창에서 쉽게 설정할 수 있으며, 이 값을 통해 Mesh에 적용되는 시각적 표현을 제어할 수 있습니다. 오늘은 주요 쉐이더 프로퍼티에 대해 알아보고, 생성하는 방법을 다루도록 하겠습니다.      📌 프로퍼티란?  프로퍼티(Property) : Material을 통해 제어할 수 있는 값 위 사진처럼 프로퍼티를 추가하면 Inspector에서 확인할 수 있습니다. 만약 Inspector에서 Color을 변경하면 변경된 Color가 쉐이더 코드에 적용됩니다. 그래서 동일한 쉐이더를 사용하더라도, 서로 다른 Material을 생성할 수 있습니다.    프로퍼티는 쉐이더..
[Unity 쉐이더] 메터리얼과 쉐이더 적용
·
유니티(Unity)/쉐이더
✍️ 개요  오늘은 메터리얼과 쉐이더를 직접 적용하는 간단한 실습을 해보도록 하겠습니다. 실습을 통해 쉐이더와 메터리얼이 Unity에서 어떻게 동작하는지 이해할 수 있습니다.      📌 메터리얼 생성  ① Model 생성하기 먼저, 쉐이더와 메터리얼을 적용할 3D Object을 만듭니다. [ Hierarchy ] - [ 우클릭 ] - [ 3D Object ] - [ Cube ] 을 선택하세요.    그러면 위처럼 Cube 하나가 생성됩니다.    Cube을 선택하면 Inspector 창을 살펴보면 Mesh와 Material을 확인할 수 있습니다. 기본적으로 URP에서 제공하는 Material이 설정되어 있습니다. Mesh = Model을 구성하는 Vertices 데이터Material = Mesh에 적..
[Unity 쉐이더] 쉐이더란 무엇인가?
·
유니티(Unity)/쉐이더
✍️ 개요  이 카테고리는 유니티의 쉐이더 그래프(Shader Graph)에 대한 이론과 실습을 정리한 카테고리입니다. 만약 쉐이더에 관심이 있으신 분들은 저와 함께 공부하면서 실력을 쌓아봅시다.  [ Unity - URP란 무엇인가? ] [Unity] URP란 무엇인가?✍️ 개요 UPR(Universal Renderer Pipeline)은 현재 Unity에서 기본적으로 사용하는 렌더 파이프라인입니다. 최근에는 뛰어난 성능과 최적화로 모바일과 VR 플랫폼에서도 많이 사용하고 있습니다. 오늘은gus6615.tistory.com 이전에 UPR란 무엇인가? 포스터에서 유니티 그래픽스 파이프라인의 역사에 대해 잠깐 언급한 적이 있습니다. 유니티 쉐이더에 대해 본격적으로 들어가기 전에 역사에 대해 자세히 살펴보고..
[Unity 이슈] InitializeOnLoad 주의 사항
·
유니티(Unity)/이슈 도감
✍️ 개요   이번에 커스텀 패키지를 제작하면서 InitializeOnLoad 어트리뷰트를 사용하면서 시행착오를 많이 겪었죠. InitializeOnLoad를 통해 호출되는 로직은... 매우 조심스럽게 다뤄야 한다는 사실을 뼈저리게 경험했답니다. 지금부터 InitializeOnLoad을 사용할 때 주의할 점을 정리하도록 하겠습니다.      📌 문제 분석  [Unity 이슈] 커스텀 패키지 Addressable 이슈✍️ 개요   [ Custom Package 제작하기 ] [Unity 기능] 커스텀 패키지 제작하기✍️ 개요 유니티를 사용해온 프로그래머라면 사용자 패키지(Custom Package)을 만들고 싶다는 생각이 든 적 있지 않나요?gus6615.tistory.com 이 이슈는 커스탬 패키지를 제..
[Unity 이슈] 커스텀 패키지 Addressable 이슈
·
유니티(Unity)/이슈 도감
✍️ 개요   [ Custom Package 제작하기 ] [Unity 기능] 커스텀 패키지 제작하기✍️ 개요 유니티를 사용해온 프로그래머라면 사용자 패키지(Custom Package)을 만들고 싶다는 생각이 든 적 있지 않나요? 저는 최근에 게임잼이나 신작을 준비할 때마다 빠르게 시작하기 위한 탬gus6615.tistory.com  흐에에에에--! 매우 험난했던 커스텀 패키지 제작기... 사실 이슈가 많았기 때문에 한 번 더 포스팅하도록 하겠습니다. 분명 나처럼 고생하신 분들이 있을거야...      📌 문제 분석  기분 좋게 새로운 프로젝트를 열어서 커스텀 패키지를 설치했어요. 그리고 Sample도 설치해서 잘 작동하는지 확인하는데...     아니... Addressable이 왜 다 빠져있는거임....
[Unity 이슈] 커스텀 패키지 종속성 문제
·
유니티(Unity)/이슈 도감
📌 개요   [ Custom Package 제작하기 ] [Unity 기능] Custom Package 제작하기✍️ 개요  유니티를 사용해온 프로그래머라면 사용자 패키지(Custom Package)을 만들고 싶다는 생각이 든 적 있지 않나요? 저는 최근에 게임잼이나 신작을 준비할 때마다 빠르게 시작하기 위한gus6615.tistory.com  이전에 커스텀 패키지를 만드는 과정을 살펴봤었어요. 그런데 만약 여러분이 스크립트에서 Unity Package Manager을 사용했다면 종속성 문제가 발생했을거예요. 저는 커스텀 패키지에서 Addressable 패키지와 Unitask 패키지를 사용했는데 여기서 문제가 발생했거든요. 그래서 오늘은 종속성 문제를 해결하는 방법에 대해 알아보도록 하겠습니다.     ?..
[Unity 기능] 커스텀 패키지 제작하기
·
유니티(Unity)/기능 구현
✍️ 개요 유니티를 사용해온 프로그래머라면 사용자 패키지(Custom Package)을 만들고 싶다는 생각이 든 적 있지 않나요? 저는 최근에 게임잼이나 신작을 준비할 때마다 빠르게 시작하기 위한 탬플릿이 있으면 좋겠다는 생각을 했습니다. 그래서 자주 사용하는 Manager 모듈을 탬플릿으로 제작하여 사용자 패키지로 만들었습니다. 혹시라도 저처럼 사용자 패키지를 제작하고 싶은 분들을 위해 과정을 공유하도록 하겠습니다.      📌 커스텀 패키지 레이아웃 설정  위 하이러키 구조가 유니티가 권장하는 커스텀 패키지 레이아웃입니다. 다소 복잡해보이지만 모두 구축할 필요는 없습니다. 그래서 저는 package.json, Editor, Runtime, Samples~만 구축하도록 하겠습니다. 만약 자세한 내용에..
[Unity 최적화] UI SetActive 호출 타이밍
·
유니티(Unity)/최적화 기법
✍️ 개요      📌 UI SetActive 최적화 방법 /// Bad Case (총 3회의 dirty 플래그 처리)Image img = GetComponent();img.gameObject.SetActive(true); //dirty 플래그 처리img.fillAmount = 1f; //dirty 플래그 처리img.transform.position = Vector3.zero; //dirty 플래그 처리/// Good Case (총 1회의 dirty 플래그 처리)Image img = GetComponent();img.fillAmount = 1f;img.transform.position = Vector3.zero;img.gameObject.SetActive(true); //d..