参考

视频播放器、它的部件和编辑器设置 API 的每个成员,以及各自附带的规则。

更新于 2026-10-22

一切都在 Udonite.Video 里;编辑器 API 是 Udonite.Video.Editor.VideoSetup。

VideoPlayer

和 VRChat 的 AVPro 或 Unity 视频播放器放在同一个 GameObject 上,因为 VRChat 只把视频事件发给那个物体上的行为。

检查器

字段
player 负责播放的 VRChat 视频播放器
avPro player 是 AVPro 时打开
capture 仅 AVPro:由 Create Video Player 设置
target 仅 Unity 播放器:由 Create Video Player 设置
speakers 音量和静音所设置的 AudioSource
playlist 队列为空时播放。可选
autoplay 实例开启时开始播放列表
startLocked 以锁定状态开启实例
moderators 任何时候都能控制播放器、更改锁定的显示名称
tolerance 客户端允许的偏差秒数,超过就跳回。默认 1
startVolume 每位玩家改动之前的音量,0 到 1

命令

会改变视频的命令都会先检查锁定。被拒绝的调用什么也不改变,并在 Status 中显示四秒提示。

成员
PlayUrl(VRCUrl) 立即播放一个链接,保留队列
Enqueue(VRCUrl) 把链接加入队列,没有在播放时直接播放。最多 20 项
PlayEntry(int) 播放播放列表中的一项
PlayFromQueue(int) 立即播放队列中的一项,并把它移出队列
Play() 继续播放;没有在播放时,开始队列或播放列表的下一项
Pause() 为所有人暂停。直播不能暂停
TogglePause() 播放中时 Pause,否则 Play
Seek(float) 跳到视频的某个比例位置,0 到 1
SeekTo(float) 跳到以秒为单位的位置
Skip() 播放队列或播放列表的下一项,没有则停止
Stop() 为所有人停止,保留队列
Reload() 只在本客户端重新加载链接,并跳回房间的位置
SetLooping(bool) 为所有人循环当前视频
SetLocked(bool) 锁定或解锁。只有实例所有者、主机和管理员可以
RemoveFromQueue(int) 从队列中移除一项
ClearQueue() 清空队列
SetVolume(float) 这位玩家自己的音量,0 到 1
SetMuted(bool) 这位玩家自己的静音

状态

成员
int Revision 除时间外,界面要显示的内容每次变化时都会变动
int State Idle、Loading、Playing、Paused 或 Failed,是 VideoPlayer 上的常量
bool IsIdle、IsLoading、IsPlaying、IsPaused、HasFailed 同样的信息,逐个给出
bool HasVideo 已设置链接,无论是否已经开始播放
bool IsLive 正在播放没有尽头的流,不能暂停或跳转
bool CanSeek 正在播放或已暂停,且不是直播
bool Showing 屏幕上有画面
string Title 播放列表的标题,或粘贴链接的简短标签
string AddedBy 添加当前视频的人,播放列表的视频为空
string Url 当前链接
string Status 一条提示、一个问题,或 Loading、Playing、Live、Paused、Nothing playing
string Problem 上一次加载失败的原因,保留到下一次加载
float Position 本客户端上的播放位置(秒)
float Duration 时长(秒),直播时为 0
float Progress 播放位置除以时长,0 到 1
bool Looping、bool Locked 同步的设置
float Volume、bool Muted 这位玩家自己的声音
int QueueCount 等待中的项数
string QueueTitle(int)、string QueueAddedBy(int) 其中一项
string NextTitle 接下来播放什么,来自队列或未打乱的播放列表
int PlaylistEntry 正在播放的播放列表项,或 NoEntry
string OwnerName 此刻拥有播放器的人
bool CanControl、bool CanModerate 本地玩家能做什么
bool MayControl(VRCPlayerApi)、bool MayModerate(VRCPlayerApi) 同样的判断,可用于任何人
Texture Picture 当前帧,供你自己的屏幕使用

VideoScreen

可以放在任何材质使用 Udonite/Video/Screen 的渲染器上。它按 aspect(表面宽度除以高度)为视频加黑边。一个播放器可以显示在任意多块屏幕上。

VideoPlaylist

字段
urls 链接,按顺序
titles 每个链接的标题。为空时显示链接本身
shuffle 随机挑选下一项,不会选正在播放的那一项
repeat 最后一项之后从头开始。默认打开

部件

每个部件都有 player,并继承自 VideoPart。

部件 字段
VideoButton command、button、icon、activeSprite、inactiveSprite、activeColor、inactiveColor。Run() 可从代码运行命令
VideoLabel field、text(TextMeshPro)、legacyText、prefix、emptyText
VideoSlider mode(Seek 或 Volume)、slider
VideoLinkField field、enterPlaysNow
VideoShowWhen condition、invert、targets、spinner、spinSpeed
VideoQueueRow index、content、title、detail、detailPrefix、playButton、removeButton

VideoPart 本身有子类必须实现的 Refresh(),以及可以重写的 Tick() 和 Connect()。Connect 在播放器就绪时运行一次,早于第一次 Refresh。

播放器处理链接文本时用到的普通函数,你自己的代码也能用。

成员
float StartSeconds(string) 链接用 t= 或 start= 要求的开始时间,没有则为 0
string YouTubeId(string) 任何形式的 YouTube 链接中的视频 ID,没有则为空
string Label(string) 显示粘贴链接时使用的简短标签

编辑器

菜单项和检查器上的按钮都只是 VideoSetup 的包装,所以编辑器脚本或代理不用点击也能做同样的事。每个调用都返回它创建的东西,而 Add 类调用在已存在时直接返回现有的,不会再建第二个。

成员
CreatePlayer(Vector3, Quaternion, VideoBackend) 一整套播放器。只播放直链文件时用 VideoBackend.Unity
AddScreen(VideoPlayer, Renderer) 在任意渲染器上再加一块屏幕
AddControls(VideoPlayer)、AddOverlay(VideoPlayer) 给缺少它们的播放器加上默认面板,或屏幕的状态层
AddPlaylist(VideoPlayer, bool autoplay) 为播放器加一个播放列表
AddToPlaylist(VideoPlaylist, string link, string title) 添加一项
FetchTitles(VideoPlaylist) 从 YouTube 补全 YouTube 条目缺少的标题
SetModerators(VideoPlayer, string[], bool startLocked) 任何时候都能控制它的人
ConnectAudioLink(VideoPlayer) 把场景里的 AudioLink 接到扬声器上
Apply() 编译所有 Udonite 行为,让脚本设置的值进入 Udon 程序

菜单路径是 VideoMenu.Create,可用于 EditorApplication.ExecuteMenuItem。

出了点问题 重新加载