진단 코드
모든 UDN 거부 코드와, 무엇이 그것을 일으키며 대신 무엇을 써야 하는지.
모든 거부에는 고정된 UDN 코드가 붙습니다. 순수한 C# 오류는 C# 컴파일러 본래의 CS 코드를 그대로 유지합니다. Udonite는 첫 거부에서 멈추지 않고 계속 진행하므로, 한 번 컴파일하면 그 behaviour의 모든 문제가 한꺼번에 나옵니다.
| 코드 | 뜻 | 어떻게 할지 |
|---|---|---|
| UDN0002 | 지원하지 않는 구문. Udonite가 아직 컴파일하지 못합니다. | 다른 방식으로 바꾸거나, 해당 줄과 함께 이슈를 남겨 주세요. "아직"인 거부는 점차 풀립니다. |
| UDN0003 | 지원하지 않는 형식. Udon에 대응하는 표현이 없는 형식입니다. | 지원되는 형식을 쓰세요. 배열은 원소 형식이 지원될 때만 지원됩니다. |
| UDN0004 | 지원하지 않는 프로그램 구조. 클래스 전체를 하나의 Udon 프로그램으로 만들 수 없습니다(예: Udon이 담을 수 없는 기반 형식). | 메시지의 안내를 따르세요. |
| UDN0005 | Udon extern이 없습니다. 호출한 Unity 또는 .NET 멤버를 Udon이 등록하지 않습니다. | Udon이 노출하는 멤버를 사용하세요. 등록되어 있다고 생각된다면 메시지에 있는 시그니처를 함께 적어 이슈를 남겨 주세요. |
| UDN0006 | 루트 기반 형식을 확인할 수 없습니다. 컴파일러가 볼 수 없는 것을 상속하고 있습니다. | 기반 클래스가 컴파일되는지, 참조된 어셈블리에 있는지 확인하세요. |
| UDN0007 | 잘못된 제외 항목. 제외 파일의 한 줄을 읽을 수 없습니다. | ProjectSettings/의 해당 줄을 고치거나 지우세요. |
| UDN0008 | 제외된 코드에 도달했습니다. 컴파일되는 behaviour가 제외한 스크립트를 호출합니다. | 제외를 해제하거나 그 호출을 없애세요. |
| UDN0009 | 제외가 불완전합니다. 필요한 범위의 일부만 덮고 있습니다. | 폴더 전체 또는 스크립트 전체를 제외하세요. |
| UDN0010 | 이벤트 시그니처 불일치. 재정의한 이벤트의 매개변수가 다릅니다. | UdoniteBehaviour의 시그니처에 맞추세요. |
| UDN0011 | Udon에 대응하는 것이 없습니다. Udon에서 결코 실행할 수 없습니다. | 메시지가 제안하는 방식으로 다시 쓰세요. |
| UDN0012 | 델리게이트를 거치는 재귀. 직접 재귀와 상호 재귀는 컴파일되지만, 델리게이트 호출을 지나는 순환에는 값을 대피시킬 호출 대상이 정해져 있지 않습니다. | 순환 안에서는 메서드를 직접 호출하거나, 반복문으로 바꾸세요. |
| UDN0013 | 힙 초과. Udon이 허용하는 것보다 많은 변수가 필요합니다. | behaviour를 나누거나 큰 상수 배열을 줄이세요. |
UDN0002와 UDN0011은 일부러 다른 코드입니다. 하나는 "아직", 다른 하나는 "결코"라는 뜻입니다. 어느 쪽인지 알면 기다릴지 고쳐 쓸지 판단할 수 있습니다.
거부 메시지 읽는 법
Door.cs(14,9): error UDN0005: Udonite does not support 'System.IO.File.ReadAllText'. It looked for the Udon extern 'SystemIOFile.__ReadAllText__SystemString__SystemString', and Udon does not register one under that name. Udon exposes a fixed set of methods rather than all of .NET, so a member that compiles in ordinary C# is not always callable from a world.
파일 이름과 위치는 바로 그 식을 가리키며, 메시지에는 Udonite가 찾은 extern 시그니처가 들어 있습니다. 그 시그니처를 Udon이 실제로 등록하고 있다면 이 줄을 그대로 이슈에 붙여 주세요. 지원을 추가하는 데 필요한 정보가 모두 담깁니다. Udon이 등록하지 않는다면 어떤 버전의 Udonite로도 그 멤버에 도달할 수 없으므로, 코드를 다른 방식으로 작성해야 합니다.