Study/Project

나만무 17 슬레이어즈

에린_1 2024. 5. 15. 10:39
728x90

나만무

socket.on 에서 setActive(true)가 안됐던 문제

  1. 해결 : 털보도사님 쿠고랑 아저씨가 도와줬다.
  2. Unity에서 Socket.IO를 사용할 때 콜백 함수 내에서 Unity의 메인 스레드로 작업을 전달해야 한다. Socket.IO의 이벤트 처리가 별도의 스레드에서 실행되기 때문에 Unity의 메인 스레드에서 직접 Unity 관련 작업을 수행하면 안된다.
  3. Unity에서 UnityThread.executeInUpdate() 메서드를 사용하여 작업을 메인 스레드로 전달할 수 있다. 이 메서드는 전달된 작업을 Unity의 업데이트 루프에서 실행되도록 예약한다.
  4. Debug.log의 경우 로깅 시스템을 사용하는 메서드로, 실제로 메인 스레드에서 실행되지 않아도 된다고 한다. unity에서 debug.log를 사용하면 로그 메시지가 로깅 시스템에 전달되고, 로깅 시스템이 메시지를 콘솔이나 로그 파일에 출력하게 된다. 이 과정은 비동기적으로 처리되므로 debug.log를 호출하는 스레드와 독립적으로 호출될 수 있기 때문에 debug.log는 출력이 됐다.

메세지 수신을 Update() → 멀티 스레딩 방식으로 변경했다.

  1. Job 시스템도 공부했지만, 좀 복잡하기도 하고, 굳이 싶어서 멀티스레드로 진행했다..
    1. 굳이 였던 이유는 유니티 인스턴스에 접근하지 않는 로직이어서 꼭 유니티 시스템의 Job이 필수는 아니었다.
  2. C#에서 제공하는 System.Threading 을 사용해 멀티 스레드로 동작하도록 구현했다.
Thread thread = new Thread(()) 
  1. 기존에 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