유니티에서 사용하는 리소스를 관리하기 위한 패키지입니다. 유니티는 리소스의 경로를 '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 이제 완성..
유니티 허브(Unity Hub)용 'modules.json' 유니티 허브(Unity Hub)용 'modules.json' 파일 모음입니다. 유니티(Unity)를 설치하자마자 추출한 파일입니다. 유니티를 수동으로 설치하면 유니티 허브에서 재대로 인식을 하지 못하는 경우가 있습니다. 이럴 때 유니티를 재설치하지 않고 유니티 허브에서 동작시키기 위한 파일입니다. github에서 보기 왜 필요합니까? 유니티(Unity)를 수동으로 설치하고 유니티 허브(Unity Hub)에 추가한 후 다음과 같은 오류가 발생할 때 사용됩니다. 'Add Modules'가 나타나지 않는 경우 'Unity 2022.3.20f1 is no longer available from the Hub. For a better experience..
소켓 통신 라이브러리를 만들어 사용하는 중인데 '.NET' 응용프로그램에서는 문제가 없는데 유니티에서는 문자열이 깨지는 현상이 발생했습니다....???? 1. 문제의 발견 서버에서는 문자열을 아스키 배열로 보내고 있습니다. .NET 프로그램에서는 아스키를 문자열로 바꿀 때 다음과 같은 방법을 사용합니다. Encoding.Default.GetString(byteData); -- 혹은 -- Encoding.ASCII.GetString(byteData); 그런데 유니티에서는 이렇게 하면 한글 아스키가 디코딩되지 않는 현상이 있습니다. 재연하기 재연용 코드는 다음과 같습니다. //byte[] ascii = System.Text.ASCIIEncoding.Default.GetBytes("가나다라"); byte[] ..
유니티뿐만 아니라 UI/UX관련 작업을 하다 보면 UI쓰레드가 아닌 곳에서 작업하다가 문제가 생기는 경우가 종종 있습니다. 얼마 전 서버에서 온 데이터를 UI 뿌리는 테스트를 하고 있었는데 UI가 갱신되지 않는 현상이 일어났습니다. * 테스트에 사용된 버전 : Unity 2020.3.25f1 연관글 영역 1. 다른 쓰레드 이런 경우 원래는 에러가 나야 하지만 유니티도 그렇고 다른 플랫폼도 그렇고..... 에러가 안 나는 경우가 있긴 합니다. ㅎㅎㅎㅎ 결국 올 게 왔구나 하면서 검색을 하는데.... 뭐지? 증상을 격은 사람들은 많은데 해결에 대한 내용이 없지;;;; C#은 쓰레드에 액션만 던져주면 간단하게 해결이 가능합니다. 참고 : [WPF] 다른 스레드에서 UI쓰레드 접근하기 - Dispatcher.I..
유니티에서 클릭했을 때 맨 위에 있는 오브젝트를 찾는 대표적인 방법이 레이캐스트(Raycast)를 이용한 방법입니다.그런데 2D 스프라이트(Sprite) 오즈젝트(object)를 사용하면 레이캐스트가 맞질 않습니다. 스프라이트의 기본 설정에 충돌체(Collider)가 없기 때문입니다. 1. 증상 확인하기 2D프로젝트를 생성하고 '2D Object > Sprite'와 '3D Object > Plane2'를 추가하고 두 오브젝트를 어느 정도 겹쳐 둡니다.상태를 확인할 텍스트오브젝트도 하나 올려줍니다. 스크립트를 생성하고 아래 코드를 넣습니다. 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 31 32 33 34 ..
전에 4.x버전용 드래그를 구현한 적이 있습니다. (참고 : [Unity 4] 오브젝트 드래그 하기 ) 그런데 5.x용 자료를 보다 보니 드래그 관련 이벤트가 있군요. 언제 생긴 건지 모르겠지만 이것을 이용하면 오브젝트 드래그를 쉽게 구현할 수 있습니다. 1. 드래그 이벤트 'MonoBehaviour.OnMouseDrag()'이라는 이벤트가 생겼습니다. (참고 : unity documentation - MonoBehaviour.OnMouseDrag() ) 오브젝트에 'MonoBehaviour'가 붙어 있다면 그냥 이벤트만 오버라이드해서 사용하면 됩니다. 이 이벤트를 오버라이드한 스크립트를 가지고 있는 오즈젝트는 드래그가 시작되면 이벤트가 넘어옵니다. 프로젝트를 생성하고 '3D Text'객체와 'Cube'..
*Unity 5.3에서 확인 했습니다. 몇버전 부터인지는 모르겠는데 스크립트에서 씬을 이동하는 방법이 바꿨네요. (참고 : Unity Community - Unity 5.3 How to load current level ) //기존 코드 //Application.LoadLevel("SceneName"); //유징 필요 using UnityEngine.SceneManagement; SceneManager.LoadScene("SceneName"); 코드를 실행하기 전에 File > Build 로 들어가서 씬을 추가해 줘야 합니다. 이건 테스트용 프로젝트