Skip to main content

新Udon教程 001 :什么是Udon

大家好,欢迎来到新Udon教程。

你一定发现了这个教程叫做新Udon教程而非UdonGraph/Sharp教程

没错:本篇不注重于介绍Graph或者Sharp的操作方法或者是实现方法,而是直接聚焦于Udon本身。

在本篇文章中你会看到:

1:Udon的核心组成,基础工作流搭建

2:对概念的详细解释,但是不会存在太多实战内容

3:

·

·

·

本教程有几个前提:

  • 如果你只是想要简单的做个开关或者是白名单,没有后续的需求,那么我建议你不需要学习本章节
  • UdonShrap和Graph相比的好处远远大于不便之处(是的,只有不便,但是没有坏处),如果可以请在实战时选择Sharp


新Udon教程:什么是Udon

 

首先是官方概念:Udon是Vrchat制作的,Udon Behaviour可以加载的编程格式,Udon本质上是汇编的一种,UdonGraph和Sharp是他的编译器,我们通过编译器写出逻辑后,编译器会将其转译为Udon码,然后再进行使用。

 

UdonGraph采用节点图进行编程,是Udon核心理念的直接体现,但是其十分难用。

 

UdonSharp采用传统的代码编程方式,允许你像是编写C#一样编写Udon,这在复杂场景下拥有极高的易用性,可用性以及可靠性。理论上在性能上可能会略逊于Graph但是——你无法达到理论——在大部分场景下他们的性能差距是可以忽略的。

 

你需要知道的:

1:UdonGraph的Udon汇编码直接保存在其文件当中,而Sharp则会保存至另一个文件中,你可以对直接文件直接进行汇编操作——就像汇编工程师一样。

 

2:VRChat不认你的UdonGraph或者Sharp——他只认Udon码,所以当请你在进行任何的实际测试前确保其已经通过了编译阶段——不然你的更改不会体现在游戏中。

 

关于UdonGraph你需要知道的

 

1:UdonGraph编译器并不完全可靠——已经有多次表明这个编译器会在组件数大于某个值之后出现编译错误,缺失,失败等情况。这个是一个已知的缺陷,也是我为什么推荐你使用Sharp。

 

2:UdonGraph的编译是实时的且不涉及文件创建——你可以不进入Unity编译即可完成Udon码的编译,这在轻量级脚本中可以极大的加快速度,但是这个轻量级基本等于开门关门等极度轻量的场景——其他场景请务必使用Sharp。

 

关于UdonSharp你需要知道的

 

1:UdonSharp很好用

 

2:其他的请看关于 UdonSharp 你不得不知道的 {... | VRCD 文档库这个文章,UdonSharp并不是Udon的直接体现,所以其会拥有更多的需要注意的事项。你不需要完全记住这个文章中的内容,但是你应该至少看过几遍以形成简单印象。

 

那么让我们继续下一章节……

 

新Udon教程:Udon核心理念

 

Udon一共有三个重要的核心,分别是:变量-组件(方法)-事件

 

什么是变量:

 

1: 变量代表一个有名字的、具有特定属性的一个存储单元;

2: 变量用来存放数据,也就是存放变量的值; 

3: 变量的值可以改变;

4: 变量有特定的类型,类型决定了存储单元的大小和变量值的范围;

 

变量的本质 

 

从本质上看,变量代表了一段可操作的内存,也可以认为变量是内存的符号化表示。当程序中需要使用内存时,可以定义某种类型的变量。此时编译器根据变量的数据类型分配一定大小的内存空间。程序就可以通过变量名来访问对应的内存了。

 

在Udon视角下,这个概念有以下修正:

 

在内存中,Udon的变量并非已经分化的特定形式,而是统一的Udon变量形式,只有在实际使用的时候才会解包转化为对应形式。

 

也就是说:在内存中所有的Udon变量的符号都为Udon变量,只有使用的时候才会转化为普通的如Int,Float,String的形式

 

在大部分时候你都不需要注意这个,因为除非你使用了SetProgramVariable或者类似的方法,但是你需要知道。

 

什么是组件(方法):

 

一、组件的基本概念与作用

 

在Unity中,组件是一切功能实现的基础。组件提供了一种实现游戏对象行为和特性的高度模块化的方式。 它们可以被视为可以塑造游戏对象行为的构造块。比如,Animator组件控制动画播放,Collider组件处理物理碰撞等。

 

二、组件与GAMEOBJECT的关系

 

每个游戏对象都是一个容器,可以附加多个组件以定义其行为。这种设计理念使得游戏对象可以通过添加和删除组件来动态调整其功能,增强了游戏对象的灵活性及扩展性。组件和GameObject的紧密结合形成了Unity强大的灵活性。

 

三、如何通过脚本操作组件

 

掌握通过脚本操作组件是进行VRChatWorld编程的关键。通过使用Udon,VRChat开发者可以在运行时创建、修改或删除组件,这些操作是实现动态和响应式游戏行为的基石。

 

四、组件间的通讯机制

 

为了实现不同组件间的数据共享和行为触发,Unity提供了多种通讯机制。这包括直接引用、消息广播和事件等机制。

 

什么是事件:

 

事件是Udon脚本指定的,用于触发一系列Udon行动或逻辑的入口。

 

可以触发事件的方法有很多种,包括但不限于:

输入事件:如玩家移动,转换视角

玩家行为:点击按钮,打开开关,掉入虚空

脚本触发:通过调用SendCustomEvent方法触发事件

等等

 

事件允许内部调用也允许外部调用(取决于修饰符public/private)是触发执行Udon脚本方法的唯一方式。

 

总结:组件、事件、方法、变量

 

组件:组件是事件、方法、变量的集合体,在场景中每一个组件都是独立的个体,是我们进行编程操作的对象。组件是操作的对象

 

方法:一段被起了名字、可以反复调用的代码块;它用来完成一件(或一类)具体的小任务。方法内可以写任意条语句:判断、循环、调用别的 API、访问组件……总之是真正能“跑”的逻辑。方法是组件的逻辑

 

事件:事件是所有Udon方法的触发方法,当有任何外部或者内部通过事件系统引用其并且向其发送事件调用时,Udon事件会检查其是否存在对应名称的方法,并且激活这个方法。事件是方法的入口

 

变量:变量是组件与组件之间差异的根本,是数据的存储区域。