728x90
나만무
socket.on 에서 setActive(true)가 안됐던 문제
- 해결 : 털보도사님 쿠고랑 아저씨가 도와줬다.
- Unity에서 Socket.IO를 사용할 때 콜백 함수 내에서 Unity의 메인 스레드로 작업을 전달해야 한다. Socket.IO의 이벤트 처리가 별도의 스레드에서 실행되기 때문에 Unity의 메인 스레드에서 직접 Unity 관련 작업을 수행하면 안된다.
- Unity에서 UnityThread.executeInUpdate() 메서드를 사용하여 작업을 메인 스레드로 전달할 수 있다. 이 메서드는 전달된 작업을 Unity의 업데이트 루프에서 실행되도록 예약한다.
- Debug.log의 경우 로깅 시스템을 사용하는 메서드로, 실제로 메인 스레드에서 실행되지 않아도 된다고 한다. unity에서 debug.log를 사용하면 로그 메시지가 로깅 시스템에 전달되고, 로깅 시스템이 메시지를 콘솔이나 로그 파일에 출력하게 된다. 이 과정은 비동기적으로 처리되므로 debug.log를 호출하는 스레드와 독립적으로 호출될 수 있기 때문에 debug.log는 출력이 됐다.
메세지 수신을 Update() → 멀티 스레딩 방식으로 변경했다.
- Job 시스템도 공부했지만, 좀 복잡하기도 하고, 굳이 싶어서 멀티스레드로 진행했다..
- 굳이 였던 이유는 유니티 인스턴스에 접근하지 않는 로직이어서 꼭 유니티 시스템의 Job이 필수는 아니었다.
- C#에서 제공하는 System.Threading 을 사용해 멀티 스레드로 동작하도록 구현했다.
Thread thread = new Thread(())
- 기존에 FixedUpdate()에서 호출되던 Polling()을 메인 스레드가 아닌 다른 스레드가 호출하도록 구현했다. 이렇게 오래 걸릴 일은 아니었는데 Job을 공부했던 시간과 기존의 구현 내용과 충돌하는 부분을 고치는데 시간이 걸렸다.
728x90
'Study > Project' 카테고리의 다른 글
나만무 슬레이어즈 19 (0) | 2024.05.16 |
---|---|
나만무 슬레이어즈 18 (0) | 2024.05.15 |
나만무 슬레이어즈 16 (0) | 2024.05.12 |
나만무 슬레이어즈 15 (0) | 2024.05.12 |
나만무 슬레이어즈 14 (0) | 2024.05.12 |