목록유니티 (3)
Coding Memo
Summary Coroutine은 반드시 Unity 메인 스레드에서만 실행되어야 한다. (다른 스레드에서 StartCoroutine을 호출해도 소용없다!) 외부 스레드에서 Unity 오브젝트 접근을 막아 놓은 것과 동일한 맥락으로 생각하면 될 것 같다. 내가 겪었던 문제는 다음과 같다. Situation Client가 Server에 연결이 되고 연결이 되었을 때의 callback으로 서버에 ping 패킷을 보내는 Coroutine을 호출하고 있었다. tcp 연결은 내가 간단하게 만든 라이브러리에서 실행이 된다. 코드를 간단하게 나타내면 다음과 같다. StartCoroutineEx는 static이고 MonoBehaviour를 상속하고 있는 CoroutineManager에 있는 static함수로, IEnum..
Unity에서 GameObject에 Component(MonoBehaviour)를 추가 하면 ‘Inspector’에 관련 내용이 표시가 된다. 위 이미지에서는 Transform과 SpriteRenderer가 Component로 붙어있고, 각 컴포넌트에 에디터에서 직접 편집하고 수정할 수 있는 값들이 나타나 있다. 이 값들은 흔히 우리가 MonoBehaviour에서 [SerializeField]태그가 붙거나 public으로 선언한 필드가 있으면 자동으로 Inspector에 나타나게 된다. 이 값들을 (태그에서 알 수 있듯이) SerializedProperty라고 하고 이것을 가지고 있는 객체를 SerializedObject라고 한다. 말 그대로 직렬화 되어서 우리가 유니티 에디터에서 다루기 쉽도록 바꾼 것..
Unity 프로젝트를 노트북에서 잠깐 볼 일이 생겨 gitjub를 통해 repository를 clone 하여 프로젝트를 불러왔다. 겉보기에는 기존 프로젝트와 동일하게 보였다. 그러나 실행 시키니까 에러가 무수히 많이 뜨는 것을 보았다. 이유는 scriptable object에 대한 베이스 script들이 missing 상태였고, 프리팹 내에 있는 스크립트들또한 마찬가지이며, serializefield도 일부 missing object 상태였다. meta 데이터를 생성하고 컴파일 하는 중에 오류가 있었나? 하고 혹시 몰라서 zip으로 다운받아서 프로젝트를 다시 open해 보아도 똑같았다. 무엇이 문제였을까? 문제는 바로 .meta 파일 이었다. 어느 순간인지는 모르겠으나(...) .gitignore에 *...