Skip to main content

VRchat虚拟导播系统V1.0-使用指南(全篇)

VRchat虚拟导播系统V1.0

本系统正在进行更新,本教程可能过时。

概述(What it This)

欢迎使用VRchat虚拟导播系统

本系统全名称为“VRChat Technical Director system(下称“本系统”)”

本系统的开发者为:“ARK-Magellan”唯一认证为QQ:2712509058。

本系统对应的Demo地图为:wrld_fba1d5b1-5596-4316-b623-a5c2535b7641

需要讲解请联系开发者

本系统是一款通用的集成了相机控制与相机切换的集成导播系统。理论上他可以用于输出以下画面

  • 固定位置固定方向《系统1》
  • 固定位置跟踪玩家位置《系统3》
  • 相对玩家静止(位置角度均静止)《系统2》
  • 固定轴跟踪玩家位置(X轴,Y轴,Z轴,可以一次锁定多个轴)《系统四》
  • 自适应玩家高度固定位置跟踪《系统四·同时锁定XZ轴》
  • 半自由模式(一个可以快速调整远程机位的系统)《系统五》
  • 围绕玩家半自由模式(一个可以快速调整并相对跟踪玩家的机位的系统)《系统五》
  • 手持自由模式(人工进入世界后手动调整位置与角度)《系统六》
  • 手持自由跟踪模式(启用Auto后可以自动跟踪玩家位置)《系统六启用AUTO》

以下模式为存在于《系统七·自定义模式》的功能,提供Prefab名称以及默认点位

  • 自适应高度固定玩家位置跟踪(默认点位·0)《系统四特殊用法·无Prefab》
  • 无人机系统(可以操控无人机进行动态直播)(默认点位·1)《无人机系统》
  • 与玩家保持一定距离的跟踪(单位置与玩家静止)(默认点位·2)《固定距离跟踪》
  • 使用动画器作为相机控制方案
    本系统为使用动画器作为相机控制方案的朋友提供了一个动画器参数控制系统,可以允许您 
    • 提前存入多个动画器,但每一次仅能控制一个动画器参数
    • 本系统允许您通过输入动画名称来播放动画
    • 本系统允许您将您的操作同步到地图的所有玩家
    • 本系统提供一个Float值,三个Int值,四个Bool值用于动画器参数控制,其中的Float值的特殊模式如下
    • 自动播放模式:当您按下自动播放按钮时,Float值将会自动增加,您可以通过允许您通过提前设置Auto Time(Float值从0-1所需的时间)来控制增加的速度,可以使用动画器控制台来对所有动画器设置或者为每一个动画器设置单独的Auto Time(在动画器内增加一个Float值,名称为:PlayTime即可)
    • 快速设置模式:不等待同步指令,直接将数值设置到动画器内。
    • 快速同步模式:每次值变化都发送同步申请
      后面篇章会详细说明该部分的使用方式

本系统采用了相机分配与功能实现分离的设计方案,您可以十分轻松的制作更多的功能,并且将其纳入到我们的系统控制中。您只需要让自己的功能实现,我们的系统会在您需要您的脚本的时候将其启动并且将相机与在您指定的物体同步


本系统采用输出/预览分离的设计模式

控制面板中的预览部分的参数不会主动同步,点击确认切换之后参数会同步到所有玩家。
控制面板中的输出相机的参数会主动同步,当您切换输出相机后,其他玩家会立即与您同步。
控制面板中的输出相机的部分是独立的系统,您可以通过复制“输出系统”并更改“CameraM”以及“CameraM2”来为您的系统提供多个输出

本系统使用GANLVTECH老师于Github发布的vrchat screen space camera render texture项目中的着色器作为相机画面输出方案,在此感谢GANLVTECH为游戏做出的卓越贡献。以下为老师的项目地址以及个人主页链接
github.com/ganlvtech/vrchat-screen-space-camera-render-texture
github.com/ganlvtech

本系统还额外提供了一个快速输出切换面板用于监视所有输出画面以及快速切换输出面板。该面板采用分离设计的方式。您可以通过设置来让该单面板或多面板对应相同或不同输出相机系统(后续篇章会讲解设置方法)

本系统采用全自动脚本管理,Udon脚本在您尚未通过相机系统选中之前会持续处于关闭状态,以节省性能。

本系统还设计了自动重传机制,如果地图中有人丢包了,系统会自动尝试一次重新同步。(帮VRC擦屁股)


使用指南(How to Use)

导播系统:主体

本导播系统主体分为三个部分

1:相机预览控制(白色部分)

2:相机输出切换(红色部分)

3:相机放置处(蓝色部分)image.png

相机预览控制部分(白色部分)

相机预览:

您可以在这里选择您希望控制的相机系统,本系统中每一个相机都为一个“相机系统”,而该面板提供您实时控制相机系统的方法。相机的输出会实时显示在旁边的平面内

模式选择:

您可以在这里选择“相机模式”默认下相机一共有七个模式,按顺序分别是

固定点位,面向玩家追踪,固定位置追踪,锁轴跟踪,特殊自由模式,手持自由模式,自定义系统。
注意:请不要更改相机系统中的第一层子物体的命名,程序采用了大量的Find以减少Public变量的使用。如果您修改了子个体名称,可能会导致脚本无法正常工作。

相机点位:

相机点位为对应的模式控制系统中控制的相机点位的索引,这个值将会指导子系统应该将相机传送到那个位置并且启动哪个脚本。通过两侧的按钮可以增加和减少数值。最大值为无限,最小值为0。

通过以上三个部分的设置即可让指定的相机切换到指定的位置进行画面输出。在设定完以上部分之后,您可以通过点击确认切换来将参数发送至相机主系统,主系统将会在接受参数并同步给所有人后进行相机切换。

切换追踪:

在本系统中,每一个相机系统的追踪对象都是独立的,本系统为摄像机提供了两个追踪位置:头部(Owner Head)以及中间(Owner Chest)<最低点加上视角球高度的二分之一>

您可以通过切换追踪模块来实现切换追踪目标。该模块分为两个部分·正在追踪目标的名称以及输入面板

您可以在输入面板中输入您需要切换的人的名称,然后点击确认切换那么本次相机切换中脚本将会自动更新新的追踪对象,但是!由于Udon的限制,切换将不一定是实时的,可能会有0-3秒钟的延迟,延迟取决于您以及目标切换对象的网络。若需要切换的对象不存在或者因为网络原因未收到同步信息。那么这次切换将会失败。

为了性能消耗,本系统的“正在追踪目标的名称”的只会在按下确认切换时才会更新,如果您发现名称不对,可以通过重复触发“确认切换”来更新这个名称。

相机缓动:

相机缓动是一个特殊的功能,它允许您在相机旋转时通过插值旋转的方式使得旋转不会过于僵硬。您可以为每一个子系统设置插值(Slarp V 0-1 越大越快)来调整缓动速度。
本功能:黑色为关闭,白色为开启,默认关闭

相机输出切换(红色部分)

与上文的“相机预览”一样,您可以通过下拉列表来选择您希望输出的摄像机,需要注意的是,这部分的值是立即同步的,也就是说:在您切换输出相机的同时,所有人的输出相机都会切换。
您可以通过更改输出系统处的脚本的材质来实现自定义。下一篇会详细讲述这部分。

相机放置处(蓝色部分)

您可以将VRC个人相机放置在里面,来相机的画面会直接覆盖您的VRC的相机。

导播系统:动画器控制器

image.png

本系统提供一个动画控制系统来控制动画器中的参数以及动画播放

需要注意的是,本系统仅提供控制方案,动画器的设置需要您自己去设置。

本系统可以需要您在动画器中写入如下参数才能完美运行,分别是:

PlayTime:本参数用于自定义Float值的自动播放功能的速度,参数的含义为动画从0(开始)到1(结束)所需要的时间。如果您希望直接使用默认值,可以填写参数为0。

Float1:本参数为动画进度的滑条控制的Float值

Int1,Int2,Int3:本参数为下方三个Int所控制参数

Bool1,Bool2,Bool3,Bool4:本参数为下方四个布尔所控制的参数,默认为False

image.png

如果您要使用跳转的方式来使用本控制器,那么请您在您的动画器中创建一个名称为“Defect”的动画节点,动画器跳转动画时,如果需要跳转的目标动画不存在,动画器将会跳转到Defect上面。当您这个动画为非循环动画时,Defect将会充当中转站来刷新您的动画的状态。

实际使用:
选择目标动画器

您需要先在“应用动画器”中选择需要控制的动画器

在选择之后,系统会主动读取该动画器目前的状态,并且覆盖当前的参数,并且将状态同步给所有人。所以如果您希望知道动画器状态,切换动画器就可以了

所以在切换动画器前,请确认自己已经点击参数同步按钮来保存您的设置

参数同步

“参数同步”按钮用于将参数设置到目标的动画器内,同时也会让会让所有用户同时与您的参数进行同步。如果您希望更新您的动画器状态。请按下它。

受VRC限制,刚刚加入的玩家的参数不会同步,您需要手动切换应用动画器或点击参数同步才会让新加入的玩家与您的参数同步。

跳转播放指定动画

您可以通过输入动画名称然后点击跳转播放来实现播放,不过需要注意的是。在您播放之前请先按下参数同步以同步您设置的动画名称。如果不按下参数同步就点击播放跳转的话最小的结果是只有您播放了动画,最大的情况可能是别人会播放不正确的动画。为避免这一点,请一定要先按下参数同步,再按下播放跳转。

参数设置

Float值

Float值参数由一个Slider进行控制,您可以通过滑动Slider来控制这个参数。
在Slider的右边,有一个名为“自动播放”的按钮,这个按钮允许这个Slider按照一定的速度调整增加Float值。这个自动播放基于时间,不会因为帧率而影响速度。您可以通过更改默认设置或者在动画器中添加PlayTime(Float)来为这个动画器自定义速度。(该值的意义为-Float从0-1所需要的时间,亦为动画从头到尾的时间)

Float还有两个特殊的模式,分别是快速设置和快速同步。

启用快速设置:你的操作将会将会实时设置动画器里,注意,这个过程是不同步的。只有您按下“参数同步”时,其他人才会同步到您的操作。

启用快速同步:您的操作将会将会实时设置动画器里,并且您的操作会同步到所有人。注意:因为VRC的缘故,这个同步可能不是流畅的。如果您希望流程的移动,请使用自动播放而不是通过快速同步模式。

Sync模式自带一个插值,因为VRC的同步频率极低,需要使用插值的方式来稳定。插值的值可以在动画器控制器中调整,名称为SlarpV。
快速同步并不可靠,因为Udon不可靠,所以请慎用!


Int值
Int值的设置方法十分简单,左边按钮是减少,右边按钮是增加。如果在您操作之后,位于按钮中间的值改变了,就代表操作成功。请注意您的操作只有在点击参数同步后才会设置进动画器内

Bool值
Bool值的设置也十分简单,按下按钮之后,您发现按钮的颜色变化了,那就代表操作成功了。颜色的意义为:白色为True 黑色为False

当你发现按下按钮没有反应时,不用怀疑,VRC把脚本炸了。Int值以及Bool值的更新都依赖于动画控制器脚本本身,如果脚本因为一些原因崩溃了,那么您的操作就会失效。这种原因一般会是因为您选择了一个不存在的动画器,VRCUdon系统失效,VRCUdon失去同步,VRC爆炸了.jpg

 

导播系统:输出快速切换面板

image.png

输出快速切换面板可以让您实时看到所有的相机系统输出的画面,并且快速切换输出相机。

在快速输出面板的下方有一个按钮,按下之后会快速的将输出系统的相机切换到您选择的相机。

导播系统:快速保存系统

3a851623ed55dd853ab226b81a8224b3.png

快速保存系统允许您临时保存某一个相机系统目前的设置,包括:相机系统,模式,点位,追踪者,相机缓动状态。

通过点击快速应用可以将保存的设置重新应用到相机系统中,并且同时,您的控制台也会恢复成您设置的信息。

如果您不确定某一相机系统是否有保存到数据,可以点击检查信息来确定。系统会将数据输出到下方的文字面板中显示。

除了正常的快速保存和应用,面板在下方还提供了将整个面板的数据导出为Json的功能。您可以通过点击Save来导出目前面板中保存了的参数数据。并且在下一次进入地图的时候输入到面板里。点击Load之后,面板会直接提取数据并且发送到所有的相机系统之中,一次性更改所有的相机系统。

注意:导入的信息并不会重新写入到面板中。Json导入仅作为快速触发存在。不影响本身的数据存储。

具体Debug信息请见末尾。

导播系统:玩家名称速写系统

39975741d8b7cd2ef133cc1647167d4b.png

众所周知,VRC的文字输入并不十分好用,但是本系统的切换追踪是基于Display名称检索来完成的追踪对象切换。为了解决追踪对象名称输入的难题。我们制作了玩家名称速写系统来解决这个问题。

通过点击左上角的刷新列表,系统会自动检索所有玩家,并且自动生成ID以及按钮,如图所示。您可以通过点击按钮的方式快速选择。左边的数字表示您选择的第几位玩家作为跟踪对象。点击立即写入后,玩家名称会自动写入到控制台的切换追踪的输入面板中。接下来只需要按下确认切换即可完成追踪对象转移。

导播系统:预设系统

94baf2b64f87f1eb5f86968b8e42adf2.png

介于导播系统本身的“下拉面板”+数字+输入文本+开关的方案依然复杂,在某些需要快速反应的环境下还是避免不了缓慢。但是制作成按钮又会导致点位受限,无法自由的设计导播方案。我们提供了一个预设系统作为导播系统控制台的补充。

预设系统分为5个部分:导入面板,预设选择面板,导出面板,预设信息面板,预设操作面板。

每一个预设中会保存以下信息:

预设名称,模式,点位,追踪者,相机缓动状态,备注

与快速保存系统不同的是,预设系统写入信息读取的是控制台上的信息而非相机系统中保存的信息,请注意

导入面板

导入面板允许你导入Json来恢复面板信息,通过将Json输入到左上角的输入框中,点击导入预设,既可完成预设的载入。如果Json没有损坏,系统将会重新生成按钮,恢复到保存时的状态。

默认下,预设的名称与预设在系统中的位置相关。您可以在外部文本编辑器中改变预设的名称以及备注。具体效果如标题所示。

导出面板

导出面板允许你导出预设数据为Json以方便您下一次进入地图时恢复预设数据。点击导出预设既可将预设数据转换为Json并且输出到下方的输入框中。您可以通过复制来保存在电脑本地。

预设选择面板

预设系统中保存的预设会显示在预设选择面板中。通过点击预设按钮即可加载保存在预设中的信息。他们都会被显示在右侧的系统信息栏里面。

第一个预设是保留预设,用于新建预设以准备写入预设数据。如果你需要建立新的预设,请点击预设“New Defect Build”来新建。

预设信息面板

预设信息面板负责显示预设名称,索引,以及系统反馈。除了预设信息会显示以外,所有的操作信息都会显示在系统信息面板上,您可以通过阅读系统信息面板上的信息来确定系统目前的状态。

点击右上角的应用预设即可将预设写入到面板中,需要注意的是:

应用预设会直接通过模拟操作的方式将信息写入面板并且直接切换,目标即为目前面板控制的相机系统。

预设操作面板

预设操作面吧负责对预设进行创建更新以及删除。

写入预设

点击“写入预设”会从控制面板中获取参数并且写入预设中

如果目标预设已存在的预设,那么将会覆盖目标并保留其名称以及备注。

切换追踪的追踪对象名称需要在输入框中点击发送或者点击过确认切换才可以正确被识别到。

如果目标预设为“New Defect Build”,则会额外重新生成一个名称为自身索引的预设。

删除预设

点击删除预设可以删除指定的预设,需要注意的是,预设“New Defect Build”不会被删除。

Debug列表中会出现的信息请看文字末尾。

预设系统:特殊拓展

在特殊拓展的预设系统中,系统的上方以及右边增设了两个可以隐藏的面板,分别是相机预览的设置面板以及输出相机和预览相机的画面展示,效果如下

08a4d074d1c9f1a5ca436790cbeec1c8.png特殊拓展与普通面板不同,它分为主面板以及副面板,在您需要多个面板时,只需要修改主面版的DropDown下拉选项中的选项,即可完成所有副面板的设置。


导播系统:目前实现的功能的指南

系统本身提供了两个点位用于追踪玩家位置,分别是

OWNER Head:玩家头部

OWNER Chest:玩家中心(玩家视角球到玩家最低点的一半)

系统一:固定点位(无)

该系统无控制脚本,仅作为固定相机点位使用

系统二:垂直于玩家的跟随位置跟踪(Tracking rotation)

该系统的控制脚本用于直接跟踪玩家,让相机相对玩家静止。

该脚本有三个Public分别为OwnerTracking,Round,UnX,意义为

OwnderTracking:追踪玩家的位置(使用OWNER Head或OWNER Chest)

Round:是否同步旋转?

UnX:是否无视玩家上下旋转

系统三:固定位置跟踪(LookAt)

该脚本的控制脚本用于跟踪玩家位置(旋转跟踪)

脚本有四个Public分别为NotTracking,UNX,UNY,UNZ,意义为

NotTracking:启用锁轴模式

UNX:锁定X轴

UNY:锁定Y轴

UNZ:锁定Z轴

系统四:固定(世界)平面跟踪(Fixed plane tracking)

该脚本的控制脚本用于物体跟踪玩家位置(移动旋转跟踪)

脚本有四个Public分别为X,Y,Z,OWNERTracking意义为

OWNERTracking:跟踪玩家位置

X:锁定X轴

Y:锁定Y轴

Z:锁定Z轴

系统五:半自由(Relative position conversion)

该脚本拥有两个中心点,控制端的小球距离中心点的距离会以X倍表现被控端的物体上。可通过额外挂载脚本·实现被控端的相对中心转移

脚本有五个Public分别为Camer,OWNERTracking,multiple,AUTORound,HaveOtherUdon,OtherUdon意义为

Camer:被控端的物体

OWNERTracking:跟踪玩家位置

Multiple:倍数

AUTORound:是否自动跟踪玩家

HaveOtherUdon:是否有额外挂载Udon。

OtherUdon:额外的Udon脚本

系统六:手持自由(Open)

该系统用于允许玩家手持物体进行拍摄。脚本用于启动显示屏以及自动旋转跟踪。
脚本有三个Public分别为Plane,AUTO,OWNERTracking意义为

Plane:屏幕

Auto:自动旋转跟踪

OWNERTracking:跟踪位置

系统七:自定义()

该系统下有多个脚本分别实现不同功能,是所有杂七杂八的功能的集合。

相机点位零:自适应高度固定位置跟踪

系统四的脚本锁定X轴以及Z轴即可

相机点位一:无人机系统

PC:WASD移动,无人机旋转会与控制者的头部旋转同步,按下QE旋转可以额外椅子来获得360度旋转,按下Shift可以加速(Udon概率无效)

VR:左手遥感移动,按下任意持握键无人机会跟随VR玩家的右手柄,右遥感可控制椅子旋转

无人机:可以拿起来像是手持自由使用,但是请不要在有人飞行控制的情况下拿去,这会让他失去对无人机的控制权。

相机点位二:与玩家保持一定距离的跟踪

与玩家保持一定距离,通过设置Distance即可,Tracking:玩家跟踪位置,相机会跟踪设定的玩家跟踪位置

相机点位三:动画器方案

动画器方案示例,脚本仅用于开关动画器


设置指南(How to Set)

本篇将会知道您如何定制这个系统,如果您只需要使用而不用设置,您可以停下来了。

第0部分:系统构成

本部分会向您展示所有的系统架构以及您可以自定义的东西

本系统由多个模块组成,每一个模块都有他们的脚本以及可以自定义的位置。

1:相机系统

本脚本为整个相机模块的最上层,主要负责数据转发以及追踪者设置。同时它可以允许您简单快速的设置相机使用的Render Texture。如果您的系统中有其他的物体需要同步切换Render Texture,可以将这个物体设置进Public变量“Material”里面

您可以自定义的参数

Render TEX(Render Texture) :该系统使用的Render Texture

Material(Mesh Renderer):需要与本系统相机使用同一张Render Texture的物体

ModName(String):子系统的名称

2:Owner Head/Owner Chest

本脚本为玩家跟踪脚本,这两个脚本会分别跟踪玩家的头部以及中间。您的新写的模式如果需要跟踪玩家,请在对应的系统引用这两个物体作为跟踪目标。这样就可以让跟踪目标跟随系统。

无您可以自定义的参数

3:相机子系统

位于相机系统的下面,一般以系统N:XXX命名。本系统依靠该脚本来实现相机点位管理与相机点位脚本管理与相机点位跟踪。您新写的脚本只需要专注于实现效果。相机子系统会帮助您将相机同步您设定的物体旋转与移动。

您可以自定义的参数

Targets(GameObject):需要相机同步的物体

SystemUdon(GameObject):控制Targets的物体的Udon脚本。如果您的Targets没有物体控制着,没事,放空就行。

Slarp V(Float):开启相机缓动时指导缓动速度的,约接近1缓动效果约弱。

注意:顺序十分重要,请注意不要弄错顺序了。Targets和控制他的SystemUdon在数组中的位置需要是一样的。

4:相机点位

相机点位指的是设置在相机子系统中,收到相机子系统管理的脚本以及点位。相机子系统会在您选择了点位时打开对应点位的脚本,以及开始将相机同步指定的物体旋转与移动。在您切换相机点位时,相机子系统会关闭脚本以及指定的物体,以节省性能。

您可以自定义的参数

您可以自定义全部的东西,包括自定义脚本,自定义点位。

5:控制台

控制台是导播与导播系统交互的输入系统,该脚本会将导播的设置收集并且发送到相机系统进行下一步处理。

该系统中部右侧有一个预览窗口,您可以通过该窗口看到目前输出系统输出的画面。

系统的脚本为“发送控制信号”您可以通过设置变量“System”来增加受这个系统控制的相机系统。同时系统会收集所有被控制的相机系统的Render Texture并存放于“CameraRender”中。如果您需要获取这个,请在Start延迟一帧后使用GetProgramVariable("CameraRender")的方式获取。

您可以自定义的参数

System(GameObject):被该面板控制的相机控制系统

您需要额外设置的东西

相机预览选择下的DropDown(下拉列表):您需要保证他的Options不小于System中的数量,否则您会无法选择控制大于Options数量的相机控制系统

6:输出系统

该脚本位于控制台下,是一个半独立的系统,它可以独立将材质设置为您选择的系统的Render Texture。输出系统的存在使得本系统的输出和预览控制部分分离。您可以在输出不变的情况下,去调整其他相机系统的参数,直到您认为需要切换输出。

同时该系统右侧也有一个预览窗口,您可以通过预览窗口看到目前输出系统输出的画面。

您可以自定义的参数

CameraM(Material):需要输出的材质

CameraM2(Material):需要输出的材质

该系统的预设中CameraM为用于地图场景的平面材质。使用Unit/Texture着色器。

该系统的预设中CameraM2为用于摄像机的特殊材质。使用Unit/ScreenSpaceUnlitShader着色器。

除非您需要增加输出系统,否则我不建议您更改,您可以直接使用CameraM对应的材质用于地图制作。

您需要额外设置的东西

“输出相机选择”下的DropDown(下拉列表):您需要保证他的Options不小于System中的数量,否则您会无法选择大于Options数量的相机控制系统的输出作为本输出系统的输出对象。

7:动画器控制系统

动画器控制系统允许您在世界中实时设置动画器参数并且尽可能的同步。具体的使用方式前文已经写出,本处不再叙述。

本系统提供了一个Float,三个Int以及四个Bool值

您可以自定义的参数

Animators:需要控制的动画器

AutoTime:默认的自动播放的速度(为float从0-1所需要的时间,float值)

您需要额外设置的东西

设置Canvas-输入-应用动画器选择的DropDown

在动画器中的命名如下:

Float1:本参数为动画进度的滑条控制的Float值

Int1,Int2,Int3:本参数为下方三个Int所控制参数

Bool1,Bool2,Bool3,Bool4:本参数为下方四个布尔所控制的参数,默认为False

在系统的下方有一个黑色部分,这部分会实时显示一些Debug文字来让您实时掌握动画器控制系统的允许状态。


8:输出快速切换面板

快速切换面板允许您快速切换画面,并可以通过点击按钮来触发快速切换画面。

输出快速切换面板拥有两个脚本,Retransmission以及BottonIndex

Retransmission负责从它目标的输出系统处获取需要的Render Texture并且将他们按照数组顺序设置到面板中。在BottonIndex传输参数时,他会作为中转脚本将参数设置到“输出系统”中

您可以自定义的参数

OutPutSystem:目标的输出系统的Udon脚本

DisPlay:输出屏幕

BottonIndex负责为每一个按钮增加一个数值,您可以通过设置这个来设置引用该脚本的按钮按下后会触发的“输出目标”

您可以自定义的参数

DisplayIndex:需要切换到的相机系统的索引值

Retransmission:选择哪个脚本作为中转脚本

如果您需要多个输出系统,那么相对的您也需要多个中转脚本来准确传输切换。

第一部分:增加摄像机点位

1:打开相机系统

2:点击对应子系统

3:子系统下的物体即为点位(点位可以不在子系统下,但是为了方便管理建议您放置在子系统下。)

每个点位都必定会有一个GameObject,我们称之为相机目标(Targets)。子系统会在对应点位被触发时将摄像机同步相机目标的位置与旋转。

每个点位还可以有一个UdonBehaviour用于控制Targets的旋转或者移动,系统会在对应点位被触发时启用该脚本,并且在关闭点位时关闭该脚本。该脚本中写入OnEnable事件以及OnDisable事件来响应子系统的控制

4:将Targets的GameObject以及 UdonBehaviour 的GameObject设置到子系统下Targets数组以及SystemUdon数组中。即可完成点位的增加

第二部分:更改子系统名称

在相机系统ControlCenter的ModName中直接修改即可,注意:只能是七个,多了没有,少了报错。

第三部分:增加相机系统

比较通用的方式是直接复制一个相机系统,然后将它的ControlCenter所在的物体写入到控制台中的控制信号发射的“发送控制信号”脚本中的System数组中,该数组的位置就是调用他的输出的索引。

第四部分:增加输出相机

您只需要复制整个输出系统,然后替换其中的CameraM以及CameraM2即可。

需要注意的是,如果您希望能将新输出系统接入到快速输出面板的话,您需要多复制一个Retransmission作为中转

然后将您需要的按钮下的Retransmission设置为您的中转脚本,BottonIndex设置为对应输出系统的索引值即可

第四部分:增加“输出相机”

您只需要复制整个输出系统,然后替换其中的CameraM以及CameraM2即可。

需要注意的是,如果您希望能将新输出系统接入到快速输出面板的话,您需要多复制一个Retransmission作为中转

然后将您需要的按钮下的Retransmission设置为您的中转脚本,BottonIndex设置为对应输出系统的索引值即可

第五部分:调整相机缓动速度

您只需要打开子系统设置Slarp V即可,缓动的实现原理时通过一个Slarp来将旋转设置为目前角度到目标角度的一个中间值。

第六部分:增加自定义效果的脚本并纳入管理

7b8be418eb07dd87f2383eace12e6a45.png

相机系统会自动关闭脚本以及追踪对象,您可以在脚本中增加Enable以及Disable来相应相机系统的启动。

一般情况下,我建议您将脚本的控制对象设置为您脚本下的一个空物体,这样最方便系统进行管理。

就如上文所述,子系统一共有两个数组,

Targets:追踪对象——在选中这个点位时,相机会持续的,与该位置产生位移以及旋转上的同步。同时,您的追踪对象在该数组的位置(索引)即为相机点位的序号。

System Udon:控制脚本——即为控制Target的旋转/移动的脚本。一般来说,如果您纳入了System Udon的控制下,Udon代码会在您选中他的控制对象是启用该脚本,不过需要注意的是,它在数组位置需要与他的控制对象在Targets数组中的位置保持一致,否则会出现无法正常触发的情况。

请保持Targets以及SystemUdon数组中没有空对象,即每一个数组位置都应该有物体挂载在上面。为了节约性能,系统只对超出数组索引的部分制作了检测,没有对数组内对象做检测。如果您设置了空位置,有概率会导致系统崩溃。

第七部分:设置动画器控制器

您只要将您需要设置的动画控制器放置到动画器控制台的Animators数组中,然后设置Canvas-输入-应用动画器选择的DropDown:您需要保证他的Options不小于System中的数量,否则您会无法选择大于Options数量的相机控制系统的输出作为本输出系统的输出对象。

在动画器中的命名如下:

Float1:本参数为动画进度的滑条控制的Float值

Int1,Int2,Int3:本参数为下方三个Int所控制参数

Bool1,Bool2,Bool3,Bool4:本参数为下方四个布尔所控制的参数,默认为False

 


动画器控制器Debug表

Safe SYNC parameter Is Start,Your value Set Successful:带丢包检测的安全同步已经开始运行,您的参数已经设置到了动画器

Wait Other Player Return Info:等待其他玩家回复准备接收数据

Safe SYNC Sending data:安全同步系统正在发送数据

Oh,Your SYNC is Error,System will be ReSync:安全同步失败,系统将会尝试重新正常同步一次。

SomeBody SYNC is Error,System will be ReSync:有人安全同步失败了,系统将会尝试重新同步

Other Player SYNC Successful:其他玩家已经同步成功了

Player SYNC Successful:本地玩家同步成功

Animator Changer Successful:切换动画器成功

Next play Anime is XXX:下一次点击“播放跳转”的时候会播放的动画时是XXX

XXX Is Start Play (If is exist):XXX动画开始播放(如果这个动画是存在的)

AutoPlay IS Start:自动播放已经开始

AutoPlay IS Stop:自动播放已经结束

Becareful:Fast Set Mod Is Open:快速设置模式已经开启

Fast Set Mod Is OFF:快速设置模式已经关闭

Becareful:Fast SYNC Mod Is Open:快速同步模式已经开启

Becareful:Fast SYNC Mod Is OFF :快速同步模式已经关闭

快速保存系统Debug表

 "Save Succssful<br>System Camera = XX
            + "<br>Camera Mod = XX
            + "<br>Target = X
            + "<br>Next Tracking Player =  X
            + "<br>Slarp is  X

保存成功,保存信息为XXXX

 ""Check Succssful<br>System = XX
            + "<br>Camera Mod = XX
            + "<br>Target = X
            + "<br>Next Tracking Player =  X
            + "<br>Slarp is  X

检查成功,储存的信息为XXXX

 ""Set Succssful<br>System Camera = XX "
            + "<br>Camera Mod = XX
            + "<br>Target = X
            + "<br>Next Tracking Player =  X
            + "<br>Slarp is  X

设置成功,设置的信息为XXXX

Reading the Json failed, and it is possible that the data has been corrupted:读取Json失败,数据可能已经损坏。

Get Data Successful , Set Start:从Json中恢复数据成功,设置开始

Reading the token failed, and it is possible that the data has been corrupted:读取令牌失败,数据可能已经损坏

Recovery of stored data was successful:快速恢复已经完成

The attempt to export has ended. Here are the results of your attempt:导出结束,导出的结果如下

预设系统Debug表

Saved successfully, he was assigned to index:保存预设成功,他的索引为:

Data Not Find:这个索引对应的数据为空

Reading the token failed, and it is possible that the data has been corrupted:读取令牌失败,数据可能已经损坏

$"Succseeful to Set The {DefectName} to The System 。<br>" +
            $"Data:<br>" +
            $"VoidNameID = {VoidNameID}<br>" +
            $"CameraTarget = {CameraTrackingTarget}<br>" +
            $"DisPlayName = {DisPlayName},<br>" +
            $"Slarp = {Slarp}<br>" +
            $"Info :<br>{Info}";

成功将XXX设置到系统中,他的预设信息为:

Read failed, your Token may be corrupted:读取失败,您的数据可能已损坏

 $" You are now inspecting the data of {DefectName}<br> " +
            $"Data:<br>" +
            $"VoidNameID = {VoidNameID}<br>" +
            $"CameraTarget = {CameraTrackingTarget}<br>" +
            $"DisPlayName = {DisPlayName},<br>" +
            $"Slarp = {Slarp}<br>" +
            $"Info =<br>{Info}";

你正在检查XXX的数据,他的数据如下

The attempt to export has ended. Here are the results of your attempt:您的导出已经结束,他的结果如下

Reading the token failed, and it is possible that the data has been corrupted:读取数据失败,您的数据可能已经损坏

Get Data Successful , Data initialization is complete:获取数据成功,数据初始化已结束。

Initialization succeeds for X presets XXX:初始化了X个预设,分别是A,B,C,D,E……

The new index is ready,The new ID is:新的索引已经准备完成,新的ID为……

Remove Successful:删除成功

开发者的话语

恭喜你看完了全文:

本人诚邀您加入VRchat虚拟导播系统后续开发组中。加入开发者组后您可以获得最新的虚拟导演系统的文件,您可以以以下原因为理由向开发者ARK-Magellan发送申请信息。

1:相机功能制作(相机功能拓展)

2:相机系统拓展(系统功能拓展)

3:系统应用测试(做地图)

4:系统美术设计

希望加入后续开发组的请准备您自己的作品作为参考资料,地图作者请附上您的地图ID以及您希望将系统用于什么地方。

后续开发组内生产的任何公开资产归资产制作者所有,其他玩家仅拥有使用权。详情请咨询资产制作者。

本系统主体所有权为ARK-Magellan,所有以正当途径获取到副本的玩家拥有以下权利

”使用、复制、修改、商用场景使用“等不损害开发者利益的权益

您不可以做以下事情

”二次配布,二次销售“

“任何直接损害开发者利益的事情”

如果您符合以下情形中的一种,那么您可以在通知作者的情况下,允许合作者您共同使用一份工程文件副本。(请见下文)

非盈利性社团活动:您可以将已经与预先安装本系统的工程文件分享给该社团的实际地图制作者用于地图制作而不违反协议,但是您需要提前与开发者联系。根据社团规模,制作者可以会提出类似于“悬挂海报”的请求。如果您同意,那么您以及您的社团将会加入鸣谢名单之中。

共同制作地图:如果您正在与多人合作进行开发,并且需要将工程文件进行共享,这是允许的,只要您是以一个地图工程的方式进行有限范围分发,在告知原作者的情况下您就不属于违反用户条例。根据工程规模,制作者可以会提出类似于“悬挂海报”的请求。如果您同意,那么您以及您的社团将会加入鸣谢名单之中。如果您希望制作者帮助您进行项目的部署,请您联系制作者。

盈利性地图制作:如果您需要卖出您的工程文件给第三方,请向对方明确说明禁止”二次配布以及二次销售“。以本方式获得副本的玩家如果需要用于直接盈利性使用,则要求其购买文件本体。以本方式获得副本的人如果有任何再次配布(包括文件,工程,以及任何与本系统相关的程序/美术资产)将会被认为严重侵权。

需要注意的是,合作者仅拥有使用权,并且在地图项目公开的同时立即失去使用权。

其他制作者以及开发组内讨论特别准许的情形。


本协议最终解释权归后续开发组以及开发者ARK-Magellan所有。