Unity 에러 / get_isActiveAndEnabled can only be called from the main thread.

이건개발·2024년 5월 28일
1

전체 에러 메세지는 아래와 같고

get_isActiveAndEnabled can only be called from the main thread.
Constructors and field initializers will be executed from the loading thread when loading a scene.
Don't use this function in the constructor or field initializers, instead move initialization code to the Awake or Start function.

gameObject.SetActive(true);

통신 데이터를 받고 UI 를 고치려고 이런걸 호출 했는데 에러가 발생했다.

UI 함수는 별도의 쓰레드에서는 호출 할 수 없다.
이벤트를

ConcurrentQueue 를 이용해서 이벤트를 쌓아

void Update()
에서 빼서 사용하는 식으로 처리해야한다.

class MyEvent {
	string action;
	string data;
}

ConcurrentQueue<MyEvent> my_event_queue = new ConcurrentQueue<MyEvent>();

void OnRecv(string data) {
  var evt = new my_event_queue();
  evt.action = "recv";
  evt.data = data;
  my_event_queue.Enqueue(evt);
}

void Update() {
  WS__Event evt;
  while(ws_event_queue.TryDequeue(out evt))
  {
  	if(evt.action == "recv") {
  		// 여기서 처리
  	}
  }
}

이런식으로 OnRecv 에서 받은걸 큐에 넣고
Update 에서 빼서 처리

profile
게임 개발 / 웹 개발 / 주식 투자 / 은퇴자 / 클라우드타입 / 파이어베이스 / 수퍼베이스 / 유니티

0개의 댓글