AR/VR/MRunity

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);
        }
    }
}

实现功能:

  1. 按下手柄 Trigger 进入穿越模式
  2. 可配置速度、加速

配置:

  1. 大前提, VRTK4.0 的环境得自主搭建OK.
  2. 场景中应该存在 CameraRigs.TrackedAliasCameraRigs.UnityXRInput.UnityInputManager.OpenVR.LeftController(本例使用左手柄)
  3. 任意空游戏对象挂载上述脚本。
  4. 按图示指定驱动的对象以及用以控制方向的手柄:


    ControllerDirectionMover

动画演示:

fly.gif

写到最后:

实现较为简易,未加入防止模型穿透的功能,有需要请自行添加:可以加上一个 Trackers.PseudoBody 看有没有合适的事件能够翻转 move 状态哈。

版权所有,转载请注明出处

上一篇 下一篇

猜你喜欢

热点阅读