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,数值越大,瞬移距离越长。

猜你喜欢

转载自blog.csdn.net/weixin_38484443/article/details/127320101