ViveInputUtility-瞬移(3)

本章介绍如何使用VIU让玩家在场景内瞬移,以及设置瞬移参数。

1、前期准备
新建场景02-Teleport,删除默认相机,新建原点空节点Player,将需要的模块拖入Player节点内,
这里将曲线和直线模块都拖入其中,为了方便讲解,在默认情况下,无论是曲线还是直线,都可以进行瞬移操作,但实际开发过程中,我们一般使用左手曲线瞬移,右手直线进行物体、UI的交互。
在这里插入图片描述
2、搭建瞬移区域与不可移动障碍物
在原点新建一个Plane,在游戏对象上挂在Teleportable组件,各位同学可以自由发挥,在场景内添加墙、阶梯等障碍物,就像这样,可以给地面或者障碍物上自己喜欢的颜色材质
在这里插入图片描述
运行之后,按下左右手手柄触摸板,会出现抛物线,松开触摸板后玩家会进行瞬移操作,黑色地面可瞬移,阶梯、墙面由于没有挂载Teleportable组件无法瞬移。

3、Teleportable的巧妙用处
在上述讲解中,我们把地面挂载Teleportable组件就可以让地面瞬移,那如果地面上有个楼梯,是不是楼梯也需要挂载一遍组件?答案是可以,不过想实现多个瞬移区域,不止这一种方法,下面介绍Teleportable组件的两个妙用
(1)子物体只要有碰撞器,即可瞬移
我们可以把阶梯直接挂载到Plane下面作为子物体,再体验一次,会发现阶梯此时也是可以瞬移的,此方法可以对场景中所有需要瞬移的区域进行整合,不需要多次挂载。
(2)可以作为单个传送点,触发瞬移到改点后执行逻辑,比如:瞬移到平台上,大门打开等功能。

4、Teleportable组件详解
在这里插入图片描述
(1)Player与Pivot是与Player和相机自动绑定的,这两个参数无需任何设置。
(2)Fade Duration:延迟瞬移到目标点,瞬移动作触发后,延迟x秒瞬移到目标点
(3)Primay Teleport Button:第一顺位瞬移按钮,这里可以设置瞬移的第一顺位按钮,会优先检测,一般情况下无需设置。
(4)Secondary Teleport Button:第二顺位瞬移按钮,优先级低于第一顺位检测,这里默认使用触摸板,一般无需设置,若有特殊需求,可自行设置按钮。
(5)Triggered Type:触发类型,默认为按钮抬起,可设置按钮抬起、按下、点击
(6)Rotate To Hit Object Front:瞬移后玩家朝向目标点的正前方
(7)Teleport To Hit Object Pivot:只瞬移到目标点的轴心坐标
(8)Use Steam VR Fade:使用SteamVR 瞬移渐变方式

5、知识拓展
以上对于Teleportable参数的基本参数讲解已经结束,下面着重介绍作为传送点的逻辑触发怎么回事,通过上面的截图,可以看到Teleportable组件有OnBeforeTeleport和OnAfterTeleport两个事件,下面直接编写带来来验证效果。
编写Demo2_TeleportPoint脚本,将咱们之前做好的阶梯命名为Stairs,同时挂载Teleportable与Demo2_TeleportPoint脚本
在这里插入图片描述

using HTC.UnityPlugin.Vive;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Demo2_TeleportPoint : MonoBehaviour
{
    private Teleportable teleportable;      //瞬移组件

    private void Awake()
    {
        teleportable = GetComponent<Teleportable>();
    }

    private void Start()
    {
        teleportable.OnBeforeTeleport += Teleportable_OnBeforeTeleport;
        teleportable.OnAfterTeleport += Teleportable_OnAfterTeleport;
    }

    private void Teleportable_OnBeforeTeleport(Teleportable src, UnityEngine.EventSystems.RaycastResult hitResult, float delay)
    {
        Debug.Log($"到达目标点之前:{transform.name}");
    }

    private void Teleportable_OnAfterTeleport(Teleportable src, UnityEngine.EventSystems.RaycastResult hitResult, float delay)
    {
        Debug.Log($"到达目标点之后:{transform.name}");
    }
}

运行测试,瞬移到阶梯上时,会同时触发到达目标点前/后两个事件,我们一般用OnAfterTeleport就够了。

5、设置只通过左手曲线瞬移
曲线和直线模块多有左手和右手,想要取消单手的射线很简单,只需要将单手中ViveRoleSetter中的ViveRole设置为Invalid,该单手射线就会失效,可以通过以上设置,让左手只显示曲线,右手只显示直线。
在这里插入图片描述
此时会发现,无论是左手曲线还是右手之前,按下触摸板,玩家都会瞬移,接下来就要关闭右手瞬移功能,如下图:找到EventRaycaster游戏对象,在ViveRaycaster组件中,将MouseButtonRight设为None,这里默认为Pad,也就是触摸板会触发瞬移,再次运行,左手触摸板按下瞬移,右手直线触摸板按下后没有瞬移功能了。
在这里插入图片描述
6、设置瞬移距离
顾名思义,可以通过设置来修改瞬移路线的长短。
在这里插入图片描述
通过调整Projectile Generator中的Velocity参数,默认为1.5,数值越大,瞬移距离越长。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

StubbrnStar

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值