SteamVR学习(三)V1.2.3

UI开发

步骤

1.新建Canvas

做某个物体的提示的时候,最好将Canvas设置为目标物体的子物体

2.Render Mode修改成World Space

将屏幕坐标系修改成世界坐标系

3.修改缩放

修改到0.005的倍数为适中大小,修改缩放时最好修改Canvas的Scale,保持其他物体缩放一致

4.修改Dynamic Pixel Per Unit

调高分辨率,使Canvas上的元素变清晰

5.添加相关元素

Interaction System中的UI交互

1.按钮点击一般基于Colider,一般放置Box Colider,发生碰撞实现按钮功能

2.UIElement类:在InteractionSystem中实现UI交互,必须挂载此脚本以标记为可交互的UI

3.按钮一般事件为OnHandClick,手柄点击Trigger键激活

4.ControllerButtonHint类用来调用一系列静态方法实现按钮高亮、文字提示等

5.新建一个GameObject挂脚本,把GameObject拖到UIElement中的On Hand Click中,就可以选择方法函数,脚本中的方法函数需要为public

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Valve.VR.InteractionSystem;

public class TEST : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    //显示提示
    public void ShowHints(Hand hand)
    {
        ControllerButtonHints.ShowButtonHint(hand, Valve.VR.EVRButtonId.k_EButton_Grip);
        ControllerButtonHints.ShowTextHint(hand, Valve.VR.EVRButtonId.k_EButton_Grip, "test");
    }

    //隐藏提示
    public void HideHints(Hand hand)
    {
        ControllerButtonHints.HideButtonHint(hand, Valve.VR.EVRButtonId.k_EButton_Grip);
        ControllerButtonHints.HideAllButtonHints(hand);
    }
}
VRTK

配置步骤:

1.新建一个GameObject命名[VRTK],添加VRTK_SDK Manager组件

2.在组件中的System SDK中选择应用的模块,目前选择SteamVR,下方指定连接的物体,可以自动置入

3.生成两个GameObject作为[VRTK]的子物体,对这两个游戏物体进行设置,首先添加VRTK_Controller Events,这是所有交互的基础可以配置按键,添加VRTK_Pointer和VRTK_Stright Pointer Renderer(或Bezier渲染),在前者中的Pointer Render中指定指针的渲染器

4.最后在VRTK_SDK Manager组件挂载左右手柄的游戏物体

VRTK实现瞬移

1.配置VRTK,瞬移需要碰撞体,添加colider组件

2.在[VRTK]下新建游戏物体PlayArea添加VRTK_Basic Teleport组件(不适应高度);VRTK_Height Adjust Teleport(可以适应高度瞬移),组件中Blink Transition Speed为瞬移时闪屏的时间,Distance Blink Delay为闪屏的延时,同时可以选择layer,使用Bezier渲染时,勾选Cursor Match Target Rotation,与目标旋转角度一致解决指针末尾与物体表面保持一致;VRTK_Dash Teleport可以展现快速瞬移的过程,并且自带高度适应

3.限定瞬移区域的方式:在组件Target List Policy上挂载VRTK_Policy List脚本,选择通过类型选择多个标签的游戏物体,Ignore—Tag—size;其他还有Nav Mesh List Distance

4.Prefab中的DestinationPoint是指针指向后松开就瞬移,上面含有脚本VRTK_Destination Point,属性Snap To Point是相机跟随瞬移

5.自定义瞬移指针:Custom Cursor定义指针与游戏物体交界处的样式,Custom Tracer定义构成曲线的元素,Tracer Desity定义元素密度,Cursor Radius定义光标半径

VRTK与物体交互

1.有Touch、Grab、Use三种,将VRTK_Interactable Object脚本添加到交互物体上,必须勾选Is Grabbable或Is Usable才可以使用其他功能,在手柄的游戏物体上添加VRTK_InteractGrab脚本,同时有VRTK_Controller Events、VRTK_Controller Action、VRTK_Interact Touch

2.功能介绍:Touch Highlight Color定义悬停时高亮的颜色;Allowed Touch Controller设置响应哪个手柄;Hold Button To Grab勾选设置不松开手柄时物体跟随手柄移动;Stay Grabbed On Teleport勾选时设置瞬移时可以grab物体;Valid Drop可以设置在任何地方可以扔出或者在指定位置放下;Secondary Grab Action Script设置有关二级抓取,比如双手抓取、双手拖拉缩放等;在Interaction—GrabAttachMechanics中还有其他关于抓取的脚本

3.VRTK_Interact Controller Appearance脚本是设置三种交互情况下手柄的显示与消失问题

4.在物体上添加VRTK_Interact Haptics可以实现抓取时手柄振动

5.通过窗口配置的方法,在unity界面上Window—VRTK—Setup Interactable Object可以整体设置有关抓取的设置,不需要手动添加脚本

使用VRTK抓取物体

1.通过给物体上挂载脚本VRTK_Child Of Controller Grab Attach,使抓取的物体成为手柄的子物体,其中Precision Grab属性勾选时对抓取的位置没有需求,不把物体的坐标和手柄保持一致,Right/Left Snap Handle可以分别设置左右手的抓取点,分别新建两个游戏物体提供transform,同时需要控制朝向,设置的旋转角度就是抓取后的增量

2.添加VRTK_Track Object Grab Attach,设置Detach Distance,定义手柄离物体多远时脱离

3.实现开关门时,添加Hinge Joint组件,相当于一个合页效果,绕着轴旋转,设置旋转的Limits角度,自动添加RigidBody,需要将Use Gravaty取消勾选,窗口配置抓取Grab Attach Mechanic

使用VRTK实现攀爬的效果

1.配置VRTK

2.用Cube覆盖到攀爬区域,在窗口进行抓取设置,勾选Is Grabbable、Hold Button To Grab、Grab Attach Mechanic选择Climbable、二级抓取选择默认的Swap Controller、取消勾选rigidbody

3.VRTK下的PlayArea添加VRTK_Player Climb和VRTK_Body Physics脚本,实现物理下落

4.Cube只作为感应区域,去掉Mesh Render组件,不保留外观

5.添加VRTK_Fixed Joint Grab Attach,设置Break Force,碰到障碍物时需要多大的力才能和手柄脱离,这样碰到障碍物时会被阻挡,更符合物理现实

VRTK中手柄的高亮和振动

1.控制器高亮类:VRTK_ControllerHighlighter

2.物体/控制器边缘高亮类:VRTK_OutlineObjectCopyHighlighter

3.控制器振动类:VRTK_ControllerHaptics

配置VRTK

1.新建游戏物体命名VRTK_SDK_MANAGER添加VRTK_SDK Manager脚本

2.在VRTK_SDK_MANAGER下新建游戏物体命名VRTK_SDK_SETUP添加VRTK_SDK Setup脚本,将CameraRig拖进去,Qiuck Select选择SteamVR

3.VRTK_SDK_MANAGER选择Auto Populate

4.新建两个游戏物体命名Left/Right Cotroller作为VRTK_SDK_MANAGER的子物体,挂载VRTK_Controller Events脚本和VRTK_Interact Touch脚本,指定给VRTK_SDK_MANAGER

物体边缘高亮

在交互配置窗口中设置触碰颜色,setup后添加默认程序,添加VRTK_OutlineObjectCopyHighlighter脚本实现边缘高亮,可以修改边缘宽度设置

手柄边缘高亮及透明

为两个手柄添加VRTK_ControllerHighlighter脚本和自己编写的控制高亮和透明的代码脚本,通过VRTK_ControllerHighlighter可以指定手柄高亮部位

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using VRTK;

public class ControllerHighlight : MonoBehaviour
{
    private VRTK_ControllerHighlighter highLighter;//高亮组件
    private VRTK_ControllerEvents events;//手柄发出的事件
    // Start is called before the first frame update
    void Start()
    {
        //获取引用
        highLighter = GetComponent();
        events = GetComponent();
        events.TriggerPressed += Events_TriggerPressed;//事件处理函数
        events.TriggerReleased += Events_TriggerReleased;
    }

    private void Events_TriggerReleased(object sender, ControllerInteractionEventArgs e)
    {
        highLighter.UnhighlightElement(SDK_BaseController.ControllerElements.Trigger);
    }

    private void Events_TriggerPressed(object sender, ControllerInteractionEventArgs e)
    {
        //trigger键按下实现高亮
        highLighter.HighlightElement(SDK_BaseController.ControllerElements.Trigger, Color.yellow);
        //获取手柄,trigger键按下实现透明
        VRTK_ObjectAppearance.SetOpacity(VRTK_DeviceFinder.GetModelAliasController(gameObject), 0.5f);
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    //碰撞时触发事件
    private void OnTriggerStay(Collider other)
    {
        highLighter.HighlightController(Color.yellow);
    }

    //碰撞退出取消高亮
    private void OnTriggerExit(Collider other)
    {
        highLighter.UnhighlightController();
    }
}

你可能感兴趣的:(学习,unity,vr)