VRTK4.0学习(四):创建代理动作和链接动作

前言

有时希望让许多不同的输入动作都具有相同的结果。

虽然可以将所有操作中的相同事件连接起来以具有相同的输出,但是这可能变得麻烦且难以维护。
Boolean Action可被用作代理动作,从添加Unity Button Action组件的场景开始,我们将把动作功能移动到代理动作,然后将按钮按下动作和键盘动作链接到这个新创建的代理动作。这会将我们的输出功能移到统一位置,并允许我们从许多不同的动作中调用它。

第1步

在Unity层次结构中创建一个空物体并将其重命名为FloorToggler,单击Add Component并选择Boolean Action组件。
新创建Boolean Action的动作将定义我们如何切换Floor物体活动状态。
VRTK4.0学习(四):创建代理动作和链接动作

第2步

单击组件中Activated事件参数右下角的+符号,然后将Floor 拖放到显示框中。VRTK4.0学习(四):创建代理动作和链接动作
选择一个Function在Activated事件发出时执行。对于此示例,请选择GameObject -> SetActive(bool)(请确保不要Dynamic bool - SetActive为此示例选择)。
VRTK4.0学习(四):创建代理动作和链接动作

第3步

与步骤2相同,只是要对Boolean Action组件中的Deactivated事件参数进行操作,但请选中该GameObject.SetActive功能下的复选框。
VRTK4.0学习(四):创建代理动作和链接动作

第4步

现在,我们有了一个Boolen Action,它将在Action接收true到时禁用Floor,并在Action接收到false时重新启用Floor。
我们可以连接Unity Button Action的 Value Changed事件,在FloorToggler物体Boolean Action组件上调用Receive方法,并且只要值发生变化,它将把Unity Button Action状态传递给Boolean Action。但是,这样做意味着对于每个输入操作,我们都需要连接它们的Value Changed事件以指向BooleanAction组件上的Receive方法。这又会变得非常麻烦且难以维护,因此我们将使用Zinnia.Action上可用的Sources参数。
该Sources参数允许我们指定其他操作,Boolean Action以监视更改并重新发出在这些源操作上发生的任何事件。
展开Sources参数,然后在Size参数字段中输入所需的其他操作进行监视。在这个例子中,我们想观看其他两个动作(菜单键Unity Button Action和空格键Unity Button Action),所以将这两个动作到Sizes参数字段中。
VRTK4.0学习(四):创建代理动作和链接动作

第5步

将UnityXR.OpenVR.RightController -> MenuButton -> Press[0]物体拖放到FloorToggler物体BooleanAction组件Sources -> Size -> Element 0上的插槽中。
拖放包含Unity Button Action组件Key Code参数设置为Space的游戏对象到Boolean Action组件Sources -> Size -> Element 1的插槽上。
VRTK4.0学习(四):创建代理动作和链接动作

第6步

由于它们的Unity Button Action已链接到FloorToggler物体Boolean Action组件,因此我们现在不再需要对这些组件执行这些动作。因此,让我们从其他Unity Button Action组件中删除事件。
选择UnityXR.OpenVR.RightController -> MenuButton -> Press[0]物体,然后单击Unity Button Action组件Activated事件和Deactivated事件参数右下角的-符号,删除这些事件侦听器。使此Unity Button Action组件除了侦听Menu Button上的按钮按下之外,仅执行其他操作。
VRTK4.0学习(四):创建代理动作和链接动作
让我们对GameObject的Unity Button Action的组件执行相同的操作。VRTK4.0学习(四):创建代理动作和链接动作

结语

现在,场景中有一个已定义的动作,用于控制Floor物体的活动状态,我们还连接了另外两个动作,这些动作用于侦听“菜单按钮”和“空格键”的输入,以执行切换地面状态的输出动作。 。
创建代理操作然后链接其他操作的能力使基于多个不同输入操作来驱动单个输出操作成为可能。
播放Unity场景,您将可以按右控制器上的“菜单”按钮使Floor物体消失,或者您可以按Space键也使Floor 物体消失。

注:本文内容引用自VRTK学院。用于自己学习笔记,文章如有描述不当的地方,也欢迎各位朋友在评论处留言指正,感谢大家支持。