로 이미지(Raw Image)로 UI에 미니맵을 띄우던 이전 포스팅이랑 거의 동일합니다.단지 3D 오브젝트에 표시한다는 차이가 있을 뿐이죠. 그래서 엄밀하게 말하면 미니맵을 구현한다기보다는 카메라를 3D오브젝트에 표시하는 것입니다. 연관글 영역 1. 텍스처 생성 카메라가 보는 화면을 렌더링할 택스처를 생성해야 합니다.프로젝트 창에서 오른쪽 클릭 > 생성 > 렌더 텍스처 를 선택하여 원하는 이름으로 텍스처를 만듭니다. 2. 카메라 생성 미니맵용 카메라를 생성합니다. 미니맵의 확대 축소와 같은 기능을 넣으려면 '투사(Projection)'를 원근(Perspective)으로 설정해야 합니다.'타겟 텍스처(Target Texture)'를 위에서 생성한 텍스처로 설정해 줍니다. 3. 텍스처를 출력할 오브젝..
미니맵은 보통 UI에 표시하므로 '로 이미지(Raw Image)'를 사용하는 방법을 많이 쓰게 됩니다.단, 이 방법은 미니맵 카메라와는 상호작용을 할 수 없습니다. 연관글 영역 1. 텍스처 생성카메라가 보는 화면을 렌더링할 텍스처를 생성해야 합니다. 프로젝트 창에서오른쪽 클릭 > 생성 > 렌더 텍스처를 선택하여 원하는 이름으로 텍스처를 만듭니다. 여기서는 'RawImageTexture'로 이름을 지었습니다. 2. 카메라 생성 미니맵용 카메라를 생성합니다.미니맵의 확대 축소와 같은 기능을 넣으려면 '투사(Projection)'를 원근(Perspective)으로 설정해야 합니다. '타겟 텍스처(Target Texture)'를 위에서 생성한 텍스처로 설정해 줍니다. 3. UI에 로 이미지(Raw Ima..
유니티에서 미니맵을 구현하는 방법은 크게 3가지로 나눌 수 있습니다.(직접 구현하는 건 제외) 로 이미지(Raw Image) : UI공간에서 사용합니다.렌더러 택스처(Render Texture) : 3D공간에서 사용합니다.카메라의 뷰포트(Viewport) : 화면 영역에서 사용합니다. 이 포스팅은 구현에 필요한 공통 내용을 다룹니다.각각의 구현은 다음 포스팅에서 다룹니다. 연관글 영역 1. 각각의 장단점 여기서는 간단한 설명만 합니다.자세한 설명은 각각을 구현하는 포스팅에서 하도록 하겠습니다. 1-1. 로 이미지(Raw Image)UI에 표시할 때 사용하는 방법입니다.'UI Canvas'에서 동작하므로 다루기가 쉽습니다. 문제는 카메라가 렌더링한 이미지만 표시하는 것이므로 카메라와 상호작용을 할 수 없..
이 포스팅은 어드레서블(Addressable)에서 지정한 라벨(Lable)를 기준으로 한 번에 로드하여 사용하는 것을 다룹니다. 다른 포스팅은 한 개씩 로드하여 사용하는 예제였습니다.한 개씩 로드하는 방식은 여러 개를 로드하려면 각각 나머지 리소스가 로드되었는지 확인하는 코드를 직접 구현하여야 합니다. 하지만 어드레서블에서는 여러 개의 리소스를 한 번에 로드하는 기능을 제공하므로 따로 구현할 필요가 없습니다. * 이 포스팅은 '흔한 개발자의 메모장'님의 코드를 참고하여 작성되었습니다. * 연관글 영역 0. 리소스 준비 프리팹은 아래와 같이 등록되어 있습니다. 한 번에 여러 개의 리소스를 불러올 때는 경로(Path)는 몰라도 됩니다.정확히는 로드가 끝나면 리소스의 경로를 조회할 수 있으므로 어떻게 관리..
어드레서블(Addressable)은 비동기(Async)로 사용하는 것이 기본입니다. 문제는 프로젝트가 크지 않다면 이득이 크지 않은데 그에 비해 코드가 복잡해진다는 단점 있습니다. 어드레서블에서 리소스를 사용하는 사이클은 크게 3부분으로 나눕니다. 1) 리소스 로드 2) 리소스 사용하여 인스턴스 만들기 3) 인스턴스 해제 연관글 영역 0. 리소스 준비 프리팹은 아래와 같이 등록되어 있습니다. 원하는 리소스를 한 개만 로드하려는 경우 해당 리소스의 경로(Path)를 알고 있어야 합니다. 비동기로 사용하는 경우 함수가 끝나고 유니티의 라이프사이클에 따라 동작 순서가 달라집니다.그래서 비동기 처리가 끝나면 동작할 함수를 따로 만들어서 관리해야 합니다.(이런 이론적인 내용은 여기서 다룰 게 아니라서 그냥 넘..
어드레서블(Addressable)은 비동기(Async)로 사용하는 것이 기본이지만 동기(Sync)로도 사용할 수 있습니다.규모가 크지 않은 프로그램에서는 굳이 비동기로 리소스를 처리할 이유가 없으므로 동기로 사용하는 방법부터 알아보겠습니다. 어드레서블에서 리소스를 읽어 들이는 건(Load)메모리에 올리는 작업이 아닙니다.스크립트에서 유니티의 프리팹을 사용할 때와 똑같습니다.개체 읽어 들이는 과정과 개체를 화면에 표시('계층 구조'에 추가)하는 단계를 따로 처리해야 하는 것과 같습니다. 어드레서블에서 리소스를 사용하는 사이클은 크게 3부분으로 나눕니다.1) 리소스 로드2) 리소스 사용하여 인스턴스 만들기3) 인스턴스 해제 연관글 영역 0. 리소스 준비 프리팹은 아래와 같이 등록되어 있습니다. 원하는 리소..
유니티에서 사용하는 리소스를 관리하기 위한 패키지입니다. 유니티는 리소스의 경로를 'Resource'폴더에서만 관리해야 해서 불편합니다. (방법이 없는 건 아닙니다.)거기다 이 폴더의 내용은 자동 로딩이라 메모리를 미리 먹어버린다는 문제도 있습니다.(씬 기준)별도로 리소스를 관리하는 경우 개발(에디터)과 배포 시 경로가 달라진다는 문제도 있습니다. 그러다 보니 리소스를 동적으로 관리하는 라이브러리가 필요한데...어드레서블(Addressable)이 리소스를 동적으로 관리하는 패키지입니다. 메모리에 올리는 것뿐만 아니라 리소스를 배포 후에 다운로드하여 관리하거나 패치하는 기능도 들어 있습니다. 설치에서부터 사용까지 한 번에 따라 할 수 있도록 4부작으로 작성하였습니다.어드레서블(Addressable)의 기능..
1. 문제의 발견빌드전에 처리해야 할 것들이 있어서 'AssetPostprocessor'를 상속받아 '빌드 후 실행'을 했더니 아래와 같은 에러가 발생합니다.error CS0246: The type or namespace name 'AssetPostprocessor' could not be found (are you missing a using directive or an assembly reference?) 2. 해결 방법'AssetPostprocessor'는 에디터에서만 사용하는 기능이므로 빌드시 사용하지 않도록 처리해야 합니다. 2-1. ' Editor '폴더로 이동시키기가장 간단한 방법은 'Assets/Editor'폴더를 만들어 넣는 것입니다. 2-2. '조건부 컴파일 기호' 이용하기'조건부 ..
유니티에서 "Stack empty."에러가 발생하였습니다. 무조건 발생하는 건 아닌데 아주 가끔 에러가 납니다. 1. 원인을 찾자 처음에는 'enum'를 'switch'로 비교하는 곳에서 에러가 나서 아주 옛날에 있던 타입변환 버그를 의심했었습니다. 그런데 에러를 추적하다 보니 플레이메이커(Playmaker, FSM)의 함수를 호출하면 해당 에러가 나는 것을 발견하였습니다. 문제는 플레이메이커에서 나는 에러 잡는 방법을 몰라...... 검색을 해도 나오질 않는 겁니다. 2. 해결 방법 결국 여러 번의 삽질을 하다가 어떤 상황인지는 모르겠지만 스레드 에러가 나는 것을 확인했습니다. 이 에러가 "Stack empty."에러와 연관있는지는 모르겠지만 일단 예외 처리가 필요할 것으로 보여서 메인 스레드에서 실행..
검색해서 나오는 방법을 사용하여 유니코드 폰트(나눔 고딕)를 설치하고 TMP(TextMeshPro)로 변환했는데 한글이 계속 깨집니다. 레거시(Legacy text)는 잘만 나옵니다.폰트 자체가 잘못된 게 아니라 생성이 잘못됐다는 거죠. 1. 유니코드 범위 지정하기유니코드 폰트의 경우 폰트 범위를 지정하면 되는 경우가 있으니 해봅시다. 'Character Set'를 'Unicode Range (Hex)'로 설정합니다.그러면 'Character Sequence (Hex)'칸이 생기는데 이 칸에 아래와 같이 범위를 설정합니다. 가-힣, 초성, 중성, 종성의 범위는 다음과 같습니다.AC00-D7AF,1100-1112,1161-1175,11A8-11FF 아니면AC00-D7AF, 1100-11FF 이제 완성..