UdonSharp에서 이전하기

UdonSharp에서 포팅할 때 실제로 바꿔야 하는 것과, 그대로 가져갈 수 있는 것.

업데이트 2026-09-03

대부분의 UdonSharp 스크립트는 이미 평범한 C#입니다. 포팅에서 바뀌는 것은 보통 기반 클래스와 몇 개의 어트리뷰트 이름뿐입니다.

기계적으로 바뀌는 부분

UdonSharp Udonite
using UdonSharp; using Udonite.Package.Runtime;
: UdonSharpBehaviour : UdoniteBehaviour
[UdonBehaviourSyncMode(BehaviourSyncMode.Manual)] 이름도 열거형도 동일
[UdonSynced], [UdonSynced(UdonSyncMode.Linear)] 그대로
[FieldChangeCallback(nameof(Prop))] 그대로
void Start(), void Update(), void Interact() public override void Start()
RequestSerialization() this.RequestSerialization()
SendCustomNetworkEvent(target, "Name") this.SendCustomNetworkEvent(target, nameof(Name))
SendCustomEventDelayedSeconds("Name", 1f) this.SendCustomEventDelayedSeconds(nameof(Name), 1f)
VRCInstantiate(prefab) Instantiate(prefab)
[RecursiveMethod] 사용할 수 없습니다. 재귀는 거부됩니다

이벤트는 UdoniteBehaviour에서 virtual이므로, Unity나 VRChat 이벤트 메서드에는 public override가 필요합니다. 시그니처가 맞지 않으면 컴파일러가 알려 줍니다(UDN0010).

편해지는 것

UdonSharp에서 피해 다니는 데 익숙해진 제약들은 대부분 해당되지 않습니다. 제네릭, 인터페이스, 레코드, LINQ, async, 코루틴, 딕셔너리, 무엇에 대해서든 쓰는 foreach, switch 식, 패턴 매칭, 형식 지정자를 포함한 문자열 보간, 널 허용 값 형식이 모두 컴파일됩니다. 자세한 내용은 언어 지원을 보세요.

그대로인 것

Udon 자체의 제약은 여전히 Udon의 것입니다. 예외 없음, 변경 가능한 static 없음, 태그 없음, Awake 없음. Udonite는 그런 것들을 UDN0011로 거부하고 대신 무엇을 쓰면 되는지 알려 줍니다. 소유권, 직렬화, 이벤트 규칙은 VRChat의 것이며 달라지지 않습니다.

함께 쓰기

Udonite와 UdonSharp는 같은 프로젝트에 공존할 수 있습니다. Udonite는 UdonSharpBehaviour를 상속하지 않는 클래스만 컴파일하므로, 기존 UdonSharp 스크립트는 그대로 동작하고 하나씩 옮겨 갈 수 있습니다.

Something went wrong. Reload