参考
视频播放器、它的部件和编辑器设置 API 的每个成员,以及各自附带的规则。
一切都在 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。
VideoLinks
播放器处理链接文本时用到的普通函数,你自己的代码也能用。
| 成员 | |
|---|---|
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。