유니티뿐만 아니라 UI/UX관련 작업을 하다 보면 UI쓰레드가 아닌 곳에서 작업하다가 문제가 생기는 경우가 종종 있습니다. 얼마 전 서버에서 온 데이터를 UI 뿌리는 테스트를 하고 있었는데 UI가 갱신되지 않는 현상이 일어났습니다. * 테스트에 사용된 버전 : Unity 2020.3.25f1 1. 다른 쓰레드 이런 경우 원래는 에러가 나야 하지만 유니티도 그렇고 다른 플랫폼도 그렇고..... 에러가 안 나는 경우가 있긴 합니다. ㅎㅎㅎㅎ 결국 올 게 왔구나 하면서 검색을 하는데.... 뭐지? 증상을 격은 사람들은 많은데 해결에 대한 내용이 없지;;;; C#은 쓰레드에 액션만 던져주면 간단하게 해결이 가능합니다. 참고 : [WPF] 다른 스레드에서 UI쓰레드 접근하기 - Dispatcher.Invoke [..
유니티에서 클릭했을 때 맨 위에 있는 오브젝트를 찾는 대표적인 방법이 레이캐스트(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 로 들어가서 씬을 추가해 줘야 합니다. 이건 테스트용 프로젝트
유니티에서 만든 프로젝트를 Html5로 빌드하면 'WebGL'로 빌드 결과물이 나옵니다. 이렇게 나온 파일을 웹서버에 올리고 접속해보면.... Uncaught could not load memory initializer Release/[파일명].html.mem 아 잰장할 ㅎㅎㅎ 1. 원인 얼핏 보면 메모리 에러 같지만 이건 메모리 에러는 아니고 메모리로 사용되는 파일을 받을 수 없어서 발생하는 에러입니다. (흠....엄밀이 따지면 메모리 에러 맞네요 ㅎㅎㅎ) 빌드 결과물을 보면 'Release'폴더에 '*.data'와 '*.mem'파일이 있습니다. 그런데 웹서버는 보안상 이유로 허용된 파일확장자가 아니면 다운로드가 되지 않습니다. 저 두개는 웹서버에서 허용된 확장자가 아니므로 이런 에러가 발생하는 것입니..
'NAudio With Unity3D'를 'Unity 3.5 .net Subset Base'로 빌드한 'NAudio.dll' 아래는 프로젝트 파일입니다.(Visual Studio 2015) Author : Dang-Gun Roleeyas ( http://blog.danggun.net/ ) Create date : 2015.09.17 License : Ms-PL ( Ms-PL ) 오픈소스 프로젝트인 'naudio-with-unity3d'를 'Unity 3.5 .net Subset Base Class Libraries' 기반으로 빌드한 프로젝트입니다. (참고 : 구글코드 - naudio-with-unity3d , GitHub - naudio-with-unity3d ) 유니티에서 별도의 빌드없이 '.Net 2..
3D에서 오브젝트를 움직일 때는 글로벌 축(Global Axis, 월드 축(Word Axis))이나 로컬 축(Local Axis)을 기준으로 움직이게 됩니다. 1. 글로벌 축(Global Axis, 월드 축(Word Axis)) 글로벌 축은 항상 고정된 축입니다. 유니티의 스크린에서 오른쪽 위에 표시되는 방향이 글로벌 축과 같은 방향입니다. 글로벌 축을 기준으로 움직이면 오브젝트의 축과 관계없이 글로벌 축의 방향으로만 움직이게 됩니다. 글로벌 축으로 움직이는건 쉽습니다. 그냥 트랜스폼(transform)의 포지션(Position, 혹은 로케이션(Rotation))만 병경하면 됩니다. //z축으로 이동 transform.position = transform.position + new Vector3(0, 0..
그냥 클래스 라이브러리로 유니티용 DLL을 만들었다간 아래와 같은 에러를 보게 됩니다. 1. 에러 재연하기 프로젝트를 '.Net 3.5'의 '클래스 라이브러리'로 생성합니다. (유니티는 여전히 mono 2.6입니다.) using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace UnityDLL_Test { public class Class1 { public int c; public void AddValues(int a, int b) { c = a + b; } public static int GenerateRandom(int min, int m..
유니티 엔진(unity3d)이 5.0 버전이 발매되었습니다! 유니티의 신 버전을 기다리던 이유 중 하나가 유니티의 'Mono'버전 때문입니다. 유니티는 'mono project'기반으로 돌아가기 때문에 모노 버전이 중요합니다. 그런데... 참고 : unity 커뮤니티 블로그 - The future of scripting in Unity (참고 : '게으른자'님 블로그 - Unity 5.0b – IL2CPP) 1. 유니티의 모노 버전 헉? 유니티 5.0에서도 모노 2.6을 쓴다고 합니다;; 이유는 라이센스 문제 때문이라는군요. Mono의 라이센스는 GPL 2.0입니다. (참고 : mono-project - FAQ: Licensing ) 그런데 모노를 활용하기 위한 IDE툴인 모노 디벨롭(mono devel..
유니티가 5.0이 되면서 플러그인 몇 개를 흡수해서 GUI를 구성하는 방법이 비주얼 적으로 바뀌었습니다. (4.6 때 바뀐 거 같지만 넘어가고 ㅎㅎㅎ) 새로워진 GUI 작성방법을 배워 봅시다. 이전 포스팅을 참고하시면 좋을 듯 하네요. 참고 : [Unity] GUI 작성하기 0. 테스트 화면 만들기 방향키를 'GUI'로 만들고 방향키를 누르면 카메라가 이동하도록 만들 것입니다. 테스트를 위해 프로젝트를 생성하고 3D 큐브를 하나 추가 합니다. 테스트용이니 적당한 이미지를 큐브에 적용합니다. 1. 버튼 만들기 이제 'GameObject'메뉴에 'UI'카테고리가 생겼습니다!!!! 1-1. 버튼 추가 하기 UI > Button 을 눌러 GUI 버튼을 추가 합니다. 이제 트랜스폼툴에 새로 추가된 'UI 툴'을 ..