VRTK4.0 利用手柄姿态进行穿越飞行
2022-05-09 本文已影响0人
雨落随风
在本文,笔者将教大家如何在 VRTK 4.0 中实现利用手柄姿态进行穿越飞行的功能。
穿越飞行:VR 视野沿着手柄指向的方向运动,有在VR 世界中体验穿越机的感觉。
前言:
可以预见,凡是看过的人必然会大呼:“标题党,这他喵跟 VRTK 4.0 有毛关系,这不有手就会啊!”
诚然,看过都说会,没看过的都在百度。
往往越奶妈级的插件,越是容易造成思维定势:总在插件给定的范围中找方案,难以思想出圈。闲话少述,下面直接开干。
解决方案:
跳出 VRTK 提供的各种 Axes 驱动器,自己写自己的,再回过头来一瞅,就问你简不简单就是了!
代码
using UnityEngine;
using Zinnia.Action;
public class ControllerDirectionMover : MonoBehaviour
{
[SerializeField] Transform target,controllerAlias; //驱动的目标、手柄
[SerializeField] BooleanAction triggerAction;
[SerializeField] float minSpeed=5,maxSpeed=20,duration=5f; //最小速度、最大速度、加速时长
float accelerate_time,current_speed,scale; //已加速时长,当前速度、当前配置下的增量速率
bool canmove = false;
void Start()
{
triggerAction.Activated.AddListener(OnTriggerActived);
triggerAction.Deactivated.AddListener(v => canmove = false);
}
private void OnTriggerActived(bool arg0)
{
canmove = true;
accelerate_time = 0;
current_speed = minSpeed;
scale = (maxSpeed - minSpeed) / duration;
}
void Update()
{
if (canmove)
{
if (accelerate_time<duration)
{
accelerate_time += Time.deltaTime;
current_speed = minSpeed + scale * accelerate_time;
}
target.Translate(controllerAlias.forward*current_speed*Time.deltaTime, Space.Self);
}
}
}
实现功能:
- 按下手柄 Trigger 进入穿越模式
- 可配置速度、加速
配置:
- 大前提, VRTK4.0 的环境得自主搭建OK.
- 场景中应该存在
CameraRigs.TrackedAlias
、CameraRigs.UnityXR
、Input.UnityInputManager.OpenVR.LeftController
(本例使用左手柄) - 任意空游戏对象挂载上述脚本。
-
按图示指定驱动的对象以及用以控制方向的手柄:
ControllerDirectionMover
动画演示:
fly.gif写到最后:
实现较为简易,未加入防止模型穿透的功能,有需要请自行添加:可以加上一个 Trackers.PseudoBody
看有没有合适的事件能够翻转 move 状态哈。
版权所有,转载请注明出处