Unity VR开发结合VRTK4.0:将浮点操作转换为布尔操作
Posted 此生不悔入海贼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity VR开发结合VRTK4.0:将浮点操作转换为布尔操作相关的知识,希望对你有一定的参考价值。
语录:
奈何桥上奈何愁,奈何桥下浣溪流,奈何人人奈何泪,奈何奈何洗春秋。
前言:
有时,您可能希望使用 一个值来激活或停用操作类型。例如,按下控制器上的扳机轴会导致在完全按下扳机时发生操作。
Unity管理器轴操作提供了一种从轴获取变化值数据的方法,但实际上并没有提供一种让我们在该值达到特定值时触发某些内容的方法。这可以通过获取浮点值并在浮点值在我们指定的范围内时将其转换为布尔值来完成。然后,我们可以获取这个布尔值并将其传递到那个值中,用于连接打开或关闭的事件(真/假)。
我们可以使用VRTK提供的数据类型转换器来做到这一点,它允许从一种数据类型转换为另一种数据类型。
内容:
步骤1:
首先,我们先创造以及Cube,坐标轴归零:
步骤2:
先添加一个游戏对象Input.UnityInputManager.Axis1DAction。
GameObject -> Tilia -> Prefabs -> Input -> UnityInputManager -> Actions -> Input.UnityInputManager.Axis1DAction
步骤3:
将游戏对象Input.UnityInputManager.OpenVR.RightController中的RightTrigger_Axis[10]作为触发条件,写入Axis Name 中
步骤4:
新建一个空物体,然后添加组件“Boolean Action”:
步骤5:
将我们前面创建的游戏对象Cube拖放到Boolean Action下面的开始和结束时间中,代表激活时,游戏对象显示,不激活时,游戏对象隐藏
步骤6:
在当前界面继续添加组件“Float To Boolean”,当值在我们定义的范围内时,这个新创建的将把我们的浮点值从触发轴转换为布尔值。
将游戏对象自身拖放到Float To Boolean组件中的事件上面,并且选择BooleanAction->Receive:
我们接下来把Float To Boolean组件上面的Positive Bounds的最小值设置为0.5;
步骤7:
将gameobject游戏对象拖放到Input.UnityInputManager.1DAxisAction的Value Changed事件上,然后选择Float To Boolean->Dotransform:
Unity VR开发结合VRTK4.0:将浮点数从交互器传递到可交互对象
语录:
愿你熬得过万丈孤独,藏得下星辰大海。
前言:
默认情况下,交互器只能将单个布尔操作传递给可交互对象,后者控制可交互对象上的抓取操作。在其他时候,交互器中的其他操作可能希望传递给可交互对象,例如另一个输入按钮按下,甚至是控制器的轴值,例如触发器挤压。
我们可以使用 Interactions.ActionPublisher和
Interactions.ActionReceiver
来促进这种机制。
正文:
步骤一:
首先,我们需要创建基本条件:CameraRigs.TrackedAlias(追踪器)、CameraRigs.UnityXR(头显)、Input.UnityInputManager.OpenVR.RightController(右手控制器)、Input.UnityInputManager.OpenVR.LeftController(左手控制器):
步骤二:
我们需要在CameraRigs.TrackedAlias->Aliases->LeftControllerAlias(RightControllerAlias)下面创建Interactions.Interactor:
步骤三:
我们需要给 Interactions.Interactor指定对应的Grad Action和Velocity Tracker:
步骤四:
我们需要在CameraRigs.TrackedAlias->Aliases->LeftControllerAlias(RightControllerAlias)下面创建Interactions.ActionPublisher:
步骤五:
我们需要给 Interactions.ActionPublisher指定对应的Source Action和Source Interactor:
步骤六:
创建一个Cube作为放置台,再创建一个可抓取的物体:
步骤七:
创建可移动模块然后进行对应属性配置:
步骤八:
创建 Interactions.ActionReceiver,然后将Interactions.Interactable拖放到它的属性上面:
步骤九:
将前面创建的两个Interactions.ActionPublisher拖放到Interactions.ActionReceiver中:
步骤十:
创建一个脚本,允许我们更改可交互游戏对象的不透明度,以测试触发器值是否从控制器传递到可交互对象。
using UnityEngine;
public class OpacityChanger : MonoBehaviour
public GameObject meshToChange;
protected MeshRenderer materialRenderer;
protected void OnEnable()
materialRenderer = meshToChange.GetComponentInChildren<MeshRenderer>();
public void ChangeOpacity(float value)
Color currentColor = materialRenderer.material.color;
currentColor.a = 1f - value;
materialRenderer.material.color = currentColor;
步骤十一:
然后将脚本挂到Interactions.Interactable上面,并把Interactions.Interactable下面的子物体Cube拖放到脚本中:
步骤十二:
找到 Interactions.ActionReceiver 下面的FloatAction物体 ,将Interactions.Interactable拖放到Value Changed下面:
步骤十三:
找到Interactions.Interactable下面的Cube,然后将Cube添加一个材质,并将材质的Rendering Mode 属性改为Transparent:
Play:
运行Unity 场景时,可以用 VR 控制器上的握把按钮抓取立方体,然后按下 VR 控制器上的触发按钮会慢慢改变可交互立方体游戏对象的不透明度。
以上是关于Unity VR开发结合VRTK4.0:将浮点操作转换为布尔操作的主要内容,如果未能解决你的问题,请参考以下文章