최근 수정 시각 : 2024-10-11 16:47:57

Udon



파일:나무위키+유도.png  
은(는) 여기로 연결됩니다.
일본 요리에 대한 내용은 우동 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
참고하십시오.

파일:UdonLogoAlpha_gray.png
1. 개요2. 특징
2.1. 인터페이스 종류
2.1.1. Udon Graph2.1.2. UdonSharp2.1.3. CyanTrigger
2.2. C#과의 차이

1. 개요

2020년 VRChat Inc.에서 가상현실 플랫폼 VRChat 전용 월드 개발을 상정하여 만들어진 비주얼 프로그래밍 언어. 어원은 먹는 그 우동이다.[1] VRChat SDK에 포함된 개발 도구이기 때문에 SDK 라이센스를 따르며, VRChat 플랫폼 내부에서만 영리적 사용이 가능하고 그 이외의 플랫폼에서는 사용이 불가능하다.

2024년 3월 1일부로 Udon 2의 클로즈 베타 및 데이터 저장 기능의 추가가 예정에 있음을 발표하였다.[2] Udon 2에서는 기본적인 성능 개선부터 리스트, 사용자 정의 클래스, 정적 변수의 사용 가능 등 기존 Udon에서는 불가능했던 C# 기반의 더 많은 기능을 지원할 예정이라고 한다.

2024년 10월부로 이전에 예고했던 데이터 저장 기능이 Persistence 라는 이름으로 오픈 베타에 추가되었다. 이 기능을 사용함으로써 유저별로 월드 설정을 비롯한 각종 데이터를 VRChat 서버에 저장할 수 있게 된다.[3] #

2. 특징

유니티 엔진으로 컨텐츠를 제작하는 가상현실 플랫폼 VRChat에서의 사용을 전제로 만들어진 언어이기 때문에, 어느 정도 차이는 있지만 기본 구조가 유니티 엔진 스크립트 언어인 C#과 유사하다. C#으로 작성한 스크립트를 Udon으로 번역 가능한 컴파일러 UdonSharp가 공식적으로 제공된다.

본래 2018년 초까지는 VRChat용 컨텐츠에도 C# 스크립트 언어가 사용 가능하였으나 이는 치명적인 보안 이슈를 일으켰고, 결국 스크립트 사용은 금지되었다. 이후 제공된 SDK 2.0은 트리거 기반의 극히 초보적인 기능만을 제공하였기에 개발 자유도가 매우 제한적이였다. 이로 인해 VRChat Inc.에서는 20년 4월, C#을 베이스로 하며 보안 이슈에서 자유로운 자체 내부 스크립트 언어를 개발하여 배포하게 된다.

이렇게 최초로 배포하게 된 Udon 인터페이스가 바로 Udon Graph이며, 이는 코드 블럭을 생성하고 해당 블럭들을 줄로 이어 구현하는 비주얼 스크립팅의 모습을 띈다. 이러한 특성상 프로그래밍에 익숙지 않은 사람도 간단한 기능 선에서는 비교적 쉽게 구현이 가능하나, 조금만 복잡해져도 한눈에 보기 어려워지며 기존 C#에 익숙한 제작자들에게는 오히려 더 불편하다는 느낌을 주는 경우가 많았다.

이에 따라 Merlin이라는 유저가 이 불편함을 해소하기 위해 써드파티 컴파일러인 UdonSharp를 제작하였고, 21년 12월자로 해당 유저가 VRChat 팀에 합류하게 되며 해당 프로젝트 또한 VRChat 공식으로 편입되었다.[4] 23년 10월부터는 월드 제작용 SDK 사용시 Udon Graph와 함께 기본으로 내장되어 있으므로 편한 방법을 골라 사용하면 된다.

2.1. 인터페이스 종류

2.1.1. Udon Graph

Udon Node Graph
파일:UdonLogoAlpha_gray.png
<colbgcolor=#004444><colcolor=#fff> 제작 VRChat
공식 문서 #
파일:UdonGraphExample.png
Udon Graph로 거울 토글을 구현한 그래프
코드 블럭(노드)을 줄(누들)로 이어 구현하는 VRChat의 기본 제공 인터페이스이다.
탭으로 전체 서치, 스페이스 바로 퀵서치, 누들 드랍[5]으로 연관 노드 서치가 가능하며, B+좌클릭으로 Branch[6]를 생성하는 등 간단한 단축키를 지원한다.
자세한 사용 방법은 공식 문서를 참조.

2.1.2. UdonSharp

UdonSharp (U#)
파일:UdonSharpLogo.png
<colbgcolor=#004444><colcolor=#fff> 제작 Merlin VRChat
공식 문서 #
#!syntax csharp
// Cube.cs (클래스명과 파일명이 반드시 일치해야함.)
using UdonSharp;
using UnityEditor.PackageManager;
using UnityEngine;
using VRC.SDKBase;
using VRC.Udon;

public class Cube : UdonSharpBehaviour
{
    public GameObject mirror;

    public override void Interact()
    {
        mirror.SetActive(!mirror.activeInHierarchy);
    }
}
UdonSharp로 거울 토글을 구현한 코드
C#과 유사하게 기능구현이 가능한 VRChat의 기본 제공 컴파일러이다. U#이라고도 불린다.
상술하였듯이 본래는 유저가 제작한 써드파티 컴파일러였으나 22년도 부로 편입되어 공식화되었다.

2.1.3. CyanTrigger

CyanTrigger
파일:UdonCyanTriggerLogo.png
<colbgcolor=#004444><colcolor=#fff> 제작 CyanLaser[7]
사이트 파일:GitHub 아이콘.svg 파일:GitHub 아이콘 화이트.svg
공식 문서 #
<nopad> 파일:UdonCyanTriggerExample.png
CyanTrigger로 거울 토글을 구현한 컴포넌트
SDK 2.0 시절의 트리거 시스템과 유사하게 기능구현이 가능한 써드파티 컴파일러이다.
CyanLaser에서 제작하였으며, 트리거 방식이지만 Udon 기능구현상의 제한은 없다.

2.2. C#과의 차이

  • List, Stack, Queue를 비롯한 C# 표준 자료구조를 사용할 수 없음. 자료구조를 사용하고 싶다면 직접 구현해야 한다.( #1, #2)
  • 변수 자료형 일부가 추상화되어 있어 GetType() 사용에 오류가 발생할 수 있음.

[1] 실제로 Udon 출시 당시 SDK의 스플래시 스크린 이미지가 그릇에 담긴 우동이었으며, 노드 블럭을 잇는 줄 또한 면발을 뜻하는 누들로 부른다. [2] 영상, 개발자 노트 [3] ToN, Idle Home 등을 비롯한 기존의 게임 월드에서는 저장 기능의 필요시 월드 내에서 세이브 코드를 발급받아 사용자가 따로 저장해두었다가, 추후에 재접속시 직접 코드를 입력하여 데이터를 로드하는 방식을 사용했지만, 해당 기능을 이용한다면 이런 번거로운 과정이 필요없어진다. [4] 여담이지만 해당 유저는 Udon 2의 공개를 앞두고, 24년 3월자로 갑작스런 해고 통지를 받았다고 한다. 동시기의 인력 감축 소식과 더불어, 개발자들 간의 의견 차이로 인한 불화가 원인으로 보인다. #, # [5] 노드 블럭에서 줄을 끌어와 놓는 행동 [6] if문과 같은 역할 [7] 월드용 SDK의 기본 내장 기능중 하나인 ClientSim(구 CyanEmu)의 제작자이기도 하다. 해당 기능은 유니티에서 바로 월드 테스트를 가능하게 해준다.