월드 로그

돌아가는 월드를 Unity Console에서 지켜보는 법, 그리고 실패한 behaviour의 모습.

업데이트 2026-09-08

월드가 Editor를 떠나는 순간 Unity Console은 아무것도 보지 못합니다. 로그를 읽기 편한 마지막 자리가 Play 모드인데, 월드가 망가지는 곳은 Play 모드가 아닙니다. 여덟 명이 들어와 있고, 남의 회선이고, 한 시간 전에 올린 빌드에서 망가집니다.

Udonite → Open Window → Settings → Logging은 당신이 월드에 있는 동안 클라이언트의 로그를 읽어 당신의 줄을 Console로 되돌립니다.

세 가지 설정, 사실은 하나

선택 넘겨주는 것
아무것도
Udonite 로그 Log로 쓴 줄만
모든 로그 클라이언트가 쓰는 것까지 전부. 그 양이 상당합니다

기본값은 Udonite 로그입니다. 리스너는 읽기만 하고 쓰지 않으며, 월드가 돌면서 로그를 내보내고 있지 않으면 아무것도 넘기지 않습니다.

모든 로그는 한 번 읽을 때 200줄에서 멈추고 몇 줄을 버렸는지 알려 줍니다. 붐비는 월드는 한 번에 수천 줄을 돌려주고, Console은 그걸 거절하기 훨씬 전부터 기어가기 시작합니다.

VRChat 자체 설정에서 전체 로깅을 켜지 않으면 아무것도 도착하지 않습니다. Console이 비어 있는 이유로는 이것이 가장 흔합니다.

넘어온 줄은 당신이 쓴 바로 그 줄

[combat] [Scoreboard.Award:14] hit for 3

Play 모드에서 보이는 것이 이것이고, 실제 월드에서 보이는 것도 이것입니다. 오는 길에 아무것도 더하지 않습니다. 시각도, 심각도를 말하는 단어도, 색도, 필터도 없습니다.

덜 만든 것이 아니라 일부러 그런 것입니다. 어디서 돌았느냐에 따라 두 가지로 읽히는 줄은 자기 자신과 비교할 수 없고, 비교하는 것이 애초에 넘기는 이유입니다. 시각을 잃는 것도 아닙니다. 클라이언트는 자기 파일에 모든 줄의 시각을 찍고, Console도 자기 시각을 찍습니다.

클라이언트가 둘 이상일 때

멀티플레이어를 시험한다는 것은 한 대의 컴퓨터에서, 하나의 계정으로, 두 개의 클라이언트를 띄운다는 뜻입니다. 표시 이름은 양쪽이 같고, 어느 창에서 나온 줄인지 월드는 알려주지 않습니다.

클라이언트가 묻지 않아도 해결해 줍니다. 클라이언트마다 자기 로그 파일을 씁니다. 그래서 두 번째 클라이언트의 목소리가 들리는 순간부터 Console이 번호를 붙이기 시작합니다.

[client 1] [Scoreboard.Award:14] hit for 3
[client 2] [Scoreboard.Award:14] hit for 5

말하는 클라이언트가 하나뿐인 동안에는 아무 번호도 붙지 않습니다. 언제나 client 1이라고만 읽힐 접두사는 누구에게도 아무것도 알려주지 않으면서 모든 줄에서 그만큼의 폭을 가져갑니다.

번호는 실행 순서가 아니라 먼저 로그를 남긴 순서를 따릅니다. 띄워 놓고 입장 화면에 세워 둔 클라이언트는, 보고 있는 사람에게 client 1이 아닙니다.

이미 Console에 있는 줄은 두 번째 클라이언트가 나타나도 다시 붙여지지 않습니다. 다시 붙이는 것은 불가능하고, 나중에 추측하는 편이 그대로 두는 것보다 나쁜 결과를 낳습니다.

behaviour가 실패했을 때

Udon 월드에서 벌어지는 가장 나쁜 일이자 가장 조용한 일입니다. VM이 예외를 던지고, 클라이언트가 그것을 받아 한 줄 쓰고, 그 behaviour를 세션이 끝날 때까지 꺼 버립니다. 그 외에는 아무 일도 없습니다. 문이 그냥 안 열리게 되고, 세계는 그 주위를 계속 돕니다.

Console은 이렇게 보고합니다.

An Udon behaviour faulted and is disabled for the rest of the session.
System.NullReferenceException: Object reference not set to an instance of an object (program counter 812)

프로그램 카운터는 컴파일된 프로그램 안의 주소이지, 당신 소스의 줄 번호가 아닙니다. 그것을 옮기려면 주소에서 소스로 가는 대응표가 필요한데 Udonite는 아직 그것을 내보내지 않습니다. 그래서 짐작하지 않고 클라이언트가 쓴 그대로 통과시킵니다. 메시지가 짚어 주는 것만으로도 호출 자리를 찾기에 대개 충분하고, 그 주변에 놓아 둔 당신의 Log 줄들이 behaviour가 어디까지 갔는지 알려 줍니다.

그 뒤에 클라이언트가 쓰는 수백 줄짜리 스택 덤프와 힙 덤프는, 그것이 있어야 할 자리인 파일 안에 그대로 둡니다.

문제가 발생했습니다 새로 고침