SteamVR2.0开发指南(Yanlz+Unity+SteamVR+Plugin+OpenVR+InputSystem+Kunckles+VIVE+Oculus+OpenXR+立钻哥哥++ok++)

《SteamVR2.0开发指南》

版本git

做者github

参与者面试

完成日期数据库

备注编程

SteamVR2.0_Guide_V01_1.0json

严立钻设计模式

 

2019.01.23浏览器

 

 

 

 

 

 

 

++++SteamVR2.0开发指南http://www.javashuo.com/article/p-wgdghzsl-er.html网络

++++SteamVR2.2.0开发指南http://www.javashuo.com/article/p-hguaxolf-ew.html数据结构

 

##《SteamVR2.0开发指南》发布说明:

++++“SteamVR2.0开发指南”:是对“SteamVR2.0”的入门指导;(2019年度的重点技术突破点确立为:“SteamVR”

++++“SteamVR2.0开发指南”:定位在熟悉SteamVR框架

++++OpenVR的Github:https://github.com/ValveSoftware/openvr

++++OpenXR官网:https://www.khronos.org/openxr

++++SteamVR的Github:https://github.com/ValveSoftware/steamvr_unity_plugin

 

 

 

##《SteamVR2.0开发指南》目录

#第一篇:网络杂谈

#第二篇:视频杂谈

#第三篇:文档杂谈

#第四篇:项目杂谈

 

 

 

 

 

#第一篇:网络杂谈篇

#第一篇:网络杂谈篇

#第一篇:网络杂谈篇

++++立钻哥哥:“网络杂谈篇”是对SteamVR2.0知识的全网搜索,利用“SteamVR2.0”关键字百度整理

++++A.一、SteamVR2.0插件使用指南

++++A.二、

 

 

 

 

##A.一、SteamVR2.0插件使用指南

##A.一、SteamVR2.0插件使用指南

++A.一、SteamVR2.0插件使用指南

++++立钻哥哥:随着VR生态的日益增加,以及Valve Knuckles控制器的逐渐完善,SteamVR将来可以提供给用户更多的交互方式,好比手指跟踪和力反馈

++++近期,Valve在Unity资源商店中将SteamVR插件更新到了2.0版:

 

 

++概述

++++立钻哥哥:三年前(2015年),SteamVR SDK for Unity插件的第一个版本在Unity资源商店发布,在之后的时间里,VR生态发生了不少变化,比较显著的是出现了不少不一样类型的控制器,以下图:

++++随着愈来愈多的VR设备推出,控制器类型逐渐趋向于碎片化;每当有新的控制器发布,都会给开发者带来一些额外的工做量:游戏项目须要修改交互代码以适配新的设备
++++从开发层面上来看,不一样的控制器具备不一样的键值映射,因此,当现有VR应用程序移植到另一个VR平台的时候,须要针对目标平台进行交互适配;鉴于此,Valve为Unity开发者推出了SteamVR Unity Plugin2.0(简称SteamVR2.0),可以使开发者在编程中专一于用户的动做,而不是具体的控制器按键

 

 

++重要更新:Input System

++++立钻哥哥:SteamVR2.0的重要更新是加入了[Input System]

++++推出[Input System]的目的,是为了更加符合OpenXR标准,以及配合即将正式推出的Knuckles控制器

++++目前多数主流VR平台均加入了OpenXR开放标准:

 

++++[Input System]与以前处理用户输入有显著的不一样,使用[SteamVR Input System],开发人员能够在应用程序以外定义默认的动做并与按键进行绑定,而不须要将输入视为某一特定设备的特定按键;这样新的设备能够快速适配应用程序,无需更改代码

++++好比:当开发者检测玩家是否抓取某个物体的时候,不是检测Vive等控制器的Trigger键或Oculus Touch控制器的Grip键是否被按下,而是检测预约义的“Grab”动做是否为True便可;(做为开发者,能够在SteamVR中为Grab动做设置默认按键和阈值,当程序运行时,也可修改这些数值以知足玩家的我的偏好);基于这种机制,不光可以解决控制器碎片化的问题,也能够快速适配将来发布的设备

 

++动做(Actions)

++++立钻哥哥:[Input System]的核心概念是动做(Action),基于动做的输入系统对于游戏引擎来讲更有意义,Unreal一直在沿用这种方案,而Unity目前在开发中的输入系统也将遵循这一原则

++++开发中须要放弃以前关于“按下某个按键发生什么事情”的思想,取而代之的是使用“作出某个动做发生什么事情”的思想

++++SteamVR2.0将动做抽象为如下6种类型:BooleanSingleVector2Vector3PoseSkeleton等类型

++++[Boolean]类型的动做表明只有两种状态的动做:TrueFalse,好比抓取(Grab)动做,只有抓取或未抓取两种状态,不存在中间状态;(在Unity中对应类为:SteamVR_Action_Boolean

++++[Single]类型的动做可以返回0~1之间的数值,好比Trigger键按下到松开的过程;(在Unity中对应类为:SteamVR_Action_Single

++++[Vector2]类型动做可以返回二维数,好比Touchpad上的触摸或手柄摇杆;使用这样的数值可以控制物体在四个方向的运动,典型的应用是使用Touchpad控制无人机或小车的运动;(在Unity中对应类为:SteamVR_Action_Vector2

++++[Vector3]类型的动做可以返回三维数值;(在Unity中对应类为SteamVR_Action_Vector3)

++++[Pose]类型的动做表示三维空间中的位置和旋转,通常用于跟踪VR控制器;(在Unity中对应类为SteamVR_Action_Pose;

++++[Skeleton]类型的动做可以获取用户在持握手柄控制器时的手指关节数据,经过返回数据,结合手部渲染模型,可以更加真实的呈现手部在虚拟世界的姿态,虽然不及像Leap Motion等设备获取手指输入那样精确,可是足以得到良好的沉浸感;(在Unity中对应类为:SteamVR_Action_Skeleton

 

 

++SteamVR2.0目录结构

++++立钻哥哥:首先来利用Xmind看一下目录结构:

 

 

++SteamVR2.0更新说明

++++A.1.一、概述

++++A.1.二、重要更新:[Input System]

++++A.1.三、动做(Actions)

++++A.1.四、动做集(Action Sets)

++++A.1.五、SteamVR Input窗口

++++A.1.六、测试动做

++++A.1.七、动做绑定

++++A.1.八、在代码中使用动做

++++A.1.九、[Interaction System]的变化

++++A.1.十、VRTK是否可以继续结合SteamVR2.0使用

 

 

 

 

 

###A.1.一、概述

###A.1.一、概述

++A.1.一、概述

++++立钻哥哥:随着愈来愈多的VR设备推出,控制器类型逐渐趋向于碎片化;每当有新的控制器发布,都会给开发者带来一些额外的工做量:游戏项目须要修改交互代码以适配新的设备
++++从开发层面上来看,不一样的控制器具备不一样的键值映射,因此,当现有VR应用程序移植到另一个VR平台的时候,须要针对目标平台进行交互适配;鉴于此,ValveUnity开发者推出了SteamVR Unity Plugin2.0(简称SteamVR2.0),可以使开发者在编程中专一于用户的动做,而不是具体的控制器按键

++++SteamVR2.0开发指南http://www.javashuo.com/article/p-wgdghzsl-er.html

++++SteamVR2.2.0开发指南http://www.javashuo.com/article/p-hguaxolf-ew.html

 

 

 

 

###A.1.二、重要更新:[Input System]

###A.1.二、重要更新:[Input System]

++A.1.二、重要更新:[Input System]

++++立钻哥哥:SteamVR2.0的重要更新是加入了[Input System]

++++推出[Input System]的目的,是为了更加符合OpenXR标准,以及配合即将正式推出的Knuckles控制器

++++目前多数主流VR平台均加入了OpenXR开放标准:

++++[Input System]与以前处理用户输入有显著的不一样,使用[SteamVR Input System],开发人员能够在应用程序以外定义默认的动做并与按键进行绑定,而不须要将输入视为某一特定设备的特定按键;这样新的设备能够快速适配应用程序,无需更改代码

++++好比:当开发者检测玩家是否抓取某个物体的时候,不是检测Vive等控制器的Trigger键或Oculus Touch控制器的Grip键是否被按下,而是检测预约义的“Grab”动做是否为True便可;(做为开发者,能够在SteamVR中为Grab动做设置默认按键和阈值,当程序运行时,也可修改这些数值以知足玩家的我的偏好);基于这种机制,不光可以解决控制器碎片化的问题,也能够快速适配将来发布的设备

 

 

 

 

 

###A.1.三、动做(Actions)

###A.1.三、动做(Actions)

++A.1.三、动做(Actions)

++++A.1.3.一、骨骼输入

++++A.1.3.二、振动输出

++++立钻哥哥:[Input System]的核心概念是动做(Action),基于动做的输入系统对于游戏引擎来讲更有意义,Unreal一直在沿用这种方案,而Unity目前在开发中的输入系统也将遵循这一原则

++++开发中须要放弃以前关于“按下某个按键发生什么事情”的思想,取而代之的是使用“作出某个动做发生什么事情”的思想

++++SteamVR2.0将动做抽象为如下6种类型:BooleanSingleVector2Vector3PoseSkeleton等类型

++++[Boolean]类型的动做表明只有两种状态的动做:TrueFalse,好比抓取(Grab)动做,只有抓取或未抓取两种状态,不存在中间状态;(在Unity中对应类为:SteamVR_Action_Boolean

++++[Single]类型的动做可以返回0~1之间的数值,好比Trigger键按下到松开的过程;(在Unity中对应类为:SteamVR_Action_Single

++++[Vector2]类型动做可以返回二维数,好比Touchpad上的触摸或手柄摇杆;使用这样的数值可以控制物体在四个方向的运动,典型的应用是使用Touchpad控制无人机或小车的运动;(在Unity中对应类为:SteamVR_Action_Vector2

++++[Vector3]类型的动做可以返回三维数值;(在Unity中对应类为SteamVR_Action_Vector3)

++++[Pose]类型的动做表示三维空间中的位置和旋转,通常用于跟踪VR控制器;(在Unity中对应类为SteamVR_Action_Pose;

++++[Skeleton]类型的动做可以获取用户在持握手柄控制器时的手指关节数据,经过返回数据,结合手部渲染模型,可以更加真实的呈现手部在虚拟世界的姿态,虽然不及像Leap Motion等设备获取手指输入那样精确,可是足以得到良好的沉浸感;(在Unity中对应类为:SteamVR_Action_Skeleton

 

 

 

 

++A.1.3.一、骨骼输入

++++立钻哥哥:对于骨骼输入,Knuckles控制器为SteamVR体验带来了手指跟踪功能,可以估算用户手指的位置,而后将数据传递给驱动程序,驱动程序将其对应解析到手部模型的31块骨骼上,从而给用户带来更好的沉浸式体验

++++该功能并非Knuckles所独有,SteamVR还可以为HTC ViveOculus Touch这样的设备提供手指状态估算,好比判断手部是否打开,手指是否放置在Touchpad上

++++同时Valve公司还将与Microsoft展开合做,以增长对Windows MR控制器的支持

++++默认状况下,运行[Interaction System]示例场景中可以同时看到手部和控制器模型,此外,还有一个辅助组件[SteamVR_Behaviour_Skeleton],以下图所示

 

 

++SteamVR/Input/SteamVR_Action_Skeleton.cs

++++立钻哥哥:\Assets\SteamVR\Input\SteamVR_Action_Skeleton.cs

using UnityEngine;

using System.Collections;

using System;

using System.Runtime.InteropServices;

using System.Collections.Generic;

 

namespace Valve.VR{

     //Skeleton Actions are our best approximation of where your hands are while holding vr controllers and pressing buttons. We give you 31 bones to help you animate hand models. For more information check out this blog past:https://steamcommunity.com/games/250820/announcements/detail/1690421280625220068

 (立钻哥哥:当你手持vr控制器并按下按钮时,骨架动做是你的手的最佳近似值。咱们给你31块骨头来帮助你制做手的动画模型。想了解更多信息,请访问这个博客:https://steamcommunity.com/games/250820/announcements/detail/1690421280625220068

    public class SteamVR_Action_Skeleton : SteamVR_Action_Pose{

        public const int numBones = 31;

 

        [NonSerialized]

        protected List<Vector3[]> bonePositions = new List<Vector3[]>();

 

        [NonSerialized]

        protected List<Quaternion[]> boneRotations = new List<Quaternion[]>();

 

        [NonSerialized]

        protected List<Vector3[]> lastBonePositions = new List<Vector3[]>();

 

        [NonSerialized]

        protected List<Quaternion[]> lastBoneRotations = new List<Quaternion[]>();

 

        [NonSerialized]

        protected Dictionary<SteamVR_Input_Sources, EVRSkeletalMotionRange> rangeOfMotion = new Dictionary<SteamVR_Input_Sources, EVRSKeletalMotionRange>(new SteamVR_Input_Sources_Comparer());

 

        [NonSerialized]

        protected VRBoneTransform_t tempBoneTransforms = new VRBoneTransform_t[numBones];

    

        [NonSerialized]

        protected InputSkeletalActionData_t tempSkeletorActionData = new InputSkeletalActionData_t();

 

        [NonSerialized]

        protected uint skeletonActionData_size = 0;

 

        [NonSerialized]

        protected Dictionary<SteamVR_Input_Sources, EVRSkelealTransformSpace> skeletalTransformSpace = new Dictionary<SteamVR_Input_Sources, EVRSkeletalTransformSpace>(new SteamVR_Input_Sources_Comparer());

 

            public override void Initialize(){}

            protected override void InitializeDictionaries(SteamVR_Input_Sources source){}

            public override void UpdateValue(SteamVR_Input_Sources inputSource){}

            public override void UpdateValue(SteamVR_Input_Sources inputSource, bool skipStateAndEventUpdates){}

 

            public Vector3[] GetBonePositions(SteamVR_Input_Sources inputSource){}

            public Quaternion[] GetBoneRotations(SteamVR_Input_Sources inputSource){}

            public Vector3[] GetLastBonePositions(SteamVR_Input_Sources inputSource){}

            public Quaternion[] GetLastBoneRotations(SteamVR_Input_Sources inputSource){}

 

            //Set the range of the motion of the bones in this skeleton. Options are With Controller as if your hand is holding your VR controller. Or Without Controller as if your hand is empty.(立钻哥哥:设定骨骼运动的范围。选项是“With Controller”,就像你的手握着VR控制器同样。或者“没有控制器”,就好像你的手是空的。

            public void SetRangeOfMotion(SteamVR_Input_Sources inputSource, EVRSkeletalMotionRange range){}

 

            //Sets the space that youll get bone data back in. Options are relative to the Model, relative to the Parent bone, and Additive.(立钻哥哥:设置你会获得骨头数据的空间。选项是相对于模型、相对于父骨骼和附加的。

            public void SetSkeletalTransformSpace(SteamVR_Input_Sources inputSource, EVRSkeletalTransformSpace space){}

    

    }    //立钻哥哥:public class SteamVR_Action_Skeleton:SteamVR_Action_Pose{}

 

    //The change in range of the motion of the bones in the skeleton. Options are With Controller as if your hand is holding your VR controller. Or Without Controller as if your hand is empty.(立钻哥哥:骨骼运动范围的变化。选项是“With Controller”,就像你的手握着VR控制器同样。或者“没有控制器”,就好像你的手是空的。

    public enum SkeletalMotionRangeChange{

        None = -1,

        WithController = 0,

        WithoutController = 1,

    }    //立钻哥哥:public enum SkeletalMotionRangeChange{}

 

}    //立钻哥哥:namespace Valve.VR{}

 

 

 

++A.1.3.二、振动输出

++++立钻哥哥:目前还有一种输出动做:振动,用于触发VR控制器上的触觉反馈,调用方法以下:

SteamVR_Input._default.outActions.Haptic.Execute(float secondsFromNow, float durationSeconds, float frequency, float amplitude, SteamVR_Input_Sources inputSource);

 

++SteamVR/Input/SteamVR_Action_Out.cs

++++立钻哥哥:\Assets\SteamVR\Input\SteamVR_Action_Out.cs

using UnityEngine;

using System.Collections;

using System;

using Valve.VR;

using System.Runtime.InteropServices;

 

namespace Valve.VR{

    //There is currently only one output type action - vibration. But there may be more in the future.(立钻哥哥:目前只有一种输出类型的动做-振动。但将来可能会有更多。

    public abstract class SteamVR_Action_Out : SteamVR_Action{

    }    //立钻哥哥:public abstract class SteamVR_Action_Out:SteamVR_Action{}

}    //立钻哥哥:namespace Valve.VR{}

 

 

 

 

 

###A.1.四、动做集(Action Sets)

###A.1.四、动做集(Action Sets)

++A.1.四、动做集(Action Sets)

++++立钻哥哥:动做经过动做集进行逻辑上的分组,以方便进行组织和管理,在Unity中对应的类为SteamVR_ActionSet

++++在不一样的场景或应用程序之间能够切换使用不一样的动做集,好比,应用程序中有一个场景是在地球上拾取并投掷物体,而另外一个场景则是在太空中飞行,那么这两个场景可使用不一样的动做集

++++同时,当针对新设备进行交互适配时,开发者只需对动做进行配置,而没必要修改项目代码;(好比,使用Vive控制器时,定义了一个Fire动做,当须要支持Rift Touch时,只需经过配置Touch控制器上符合Fire动做的键值便可)

++++SteamVR插件默认包含了三套动做集:defaultplatformerbuggy,开发者也能够在[SteamVR Input]窗口中自行添加或删除动做集

++++使用组件[SteamVR_ActivateActionSetOnLoad]能够在场景中自动激活和停用指定的动做集;对应激活和停用的方法是在Start()OnDestroy()中实现

 

++SteamVR/Input/SteamVR_ActivateActionSetOnLoad.cs

++++立钻哥哥:\Assets\SteamVR\Input\SteamVR_ActivateActionSetOnLoad.cs

using UnityEngine;

using System.Collections;

 

namespace Valve.VR{

    //Automatically activates an action set on Start() and deactivates the set on OnDestroy(). Optionally deactivating all other sets as well.(立钻哥哥:自动激活Start()和OnDestroy()上的设置。也能够选择停用全部其余设置。

    public class SteamVR_ActivateActionSetOnLoad : MonoBehaviour{

        [SteamVR_DefaultActionSet(default)]

        public SteamVR_ActionSet actionSet;

 

        public bool disableAllOtherActionSets = false;

        public bool activateOnStart = ture;

        public bool deactivateOnDestroy = true;

 

        private void Start(){}

        private void OnDestroy(){}

 

    }    //立钻哥哥:public class SteamVR_ActivateSetOnLoad:MonoBehaviour{}

}    //立钻哥哥:namespace Valve.VR{}

 

++图解SteamVR Input(Actions)

++++立钻哥哥:好吧,咱们图解一下Input中相关Actions对话框:

 

 

 

 

 

 

###A.1.五、SteamVR Input窗口

###A.1.五、SteamVR Input窗口

++A.1.五、SteamVR Input窗口

++++立钻哥哥:Unity编辑器中,使用【Window->SteamVR Input】命令,打开【SteamVR Input】窗口

++++SteamVR2.0中,使用【SteamVR Input】窗口做为入口,对全部动做进行管理

++++初次导入SteamVR2.0并运行程序时,会弹出一个对话框,提示没有[actions.json]文件,并询问是否要使用默认值

 

++++若是选择【No】,那么后果很严重(至少对于一堆报错,是有些受不了的,一切才开始,怎么就貌似已经结束呢?)

 

++++那咱们就先选择【Yes】(避开那些暂时未知的雷),会将默认的[actions.json]文件以及一些常见的控制器相关绑定文件复制到当前项目的根目录下

 

++生成并使用action等动做类型

++++立钻哥哥:这些文件( [actions.json]、[binding_rift.json]、[binding_vive.json]等)将在程序运行时被载入进来,并在程序最终构建时被复制到与可执行文件同级的目录下;复制完成后,SteamVR Input窗口将读取文件信息并展现其包含的动做集合以及动做集合下的全部动做

++++Actions栏的右下角,能够点击加减号(+、-)按钮添加或删除动做;每一个动做具备名称(Name)、类型(Type)、本地化字符串(localization strings)等字段;类型对应动做类型;本地化字符串是面向用户进行绑定的动做名称,开发者能够经过SteamVR API直接访问动做以及动做集

 

++++当点击【Save and Generate】按钮后,SteamVR插件将为动做以及动做集生成可编程访问的对象类,将它们放置在项目的[SteamVR_Input/]目录下

 

++代码中使用动做集

++++立钻哥哥:在项目代码中,使用[SteamVR_Input]类能够静态引用每一个动做和动做集,在每一个动做集中,能够找到其包含的动做的引用;

//立钻哥哥:当检测到任意控制器发出default动做集中包含的Teleport动做时,执行Teleport()函数

void Update(){

if(SteamVR_Input._default.inActions.Teleport.GetStateUp(SteamVR_Input_Sources.Any)){

    Teleport();

    }

}

 

 

 

 

 

###A.1.六、测试动做

###A.1.六、测试动做

++A.1.六、测试动做

++++立钻哥哥:选择【Window -> [SteamVR Input Live View]】命令,便可打开一个测试输入窗口

++++运行程序,此时该窗口将实时展现全部动做集合的状态;当一个动做的值发生变化时,对应右侧会突出显示绿色,而后逐渐消失:

 

 

 

 

###A.1.七、动做绑定

###A.1.七、动做绑定

++A.1.七、动做绑定

++++立钻哥哥:建立动做之后,须要将动做进行默认绑定

++++打开VR控制器,保持SteamVR客户端开启,在[SteamVR Input]窗口中,点击[Open binding UI]按钮,此时将使用操做系统默认的网页浏览器打开SteamVR动做绑定页面

 

++动做的绑定编辑

++++立钻哥哥:在“SteamVR动做绑定页面”,选择须要绑定的控制器,点击【Edit】按钮,进入绑定编辑页面(相似游戏的手柄设置);这样,对开发者来讲,控制器也像对游戏玩家那样变得友好了

 

++++在动做编辑页面中,点击每一个按钮旁边的加号(+)按钮,弹出窗口会询问将此按键绑定为哪一种模式:

 

++动做设定

++++立钻哥哥:一般状况下,Single类型的动做能够设置为“TRIGGER”,Boolean类型的动做能够设置为“BUTTON”;设定之后,在按键左下角点击编辑按钮,在显示为“None”的位置指定相应的动做:

 

++++全部动做绑定完毕,点击页面底部的“Replace Default Binding”按钮,会将绑定设置保存到配置文件当中;在程序运行时,不管是开发者仍是游戏玩家,均可以再次修改绑定配置,而且可以反映到游戏当中

 

++“Mirror Mode”复选框

++++立钻哥哥:默认状况下,每一个控制器上相同的按键绑定相同的动做,若是想为每一个控制器设置不一样的动做,好比,左手控制器按下“TouchPadJoyStick)”实现传送,而右手控制器按下“TouchPad(JoyStick)”使用指针选择物体,那么在这种状况下,能够取消勾选页面中的“Mirror Mode复选框”,而后分别为每一个控制器指定不一样的动做

 

++“Input Debugger按钮”

++++立钻哥哥:在绑定编辑界面中也能够进行动做测试,点击“Input Debugger”按钮进入测试页面,在此页面中,将实时显示各动做的状态、动做绑定的按键、控制器的实时数据等信息

 

 

 

 

###A.1.八、在代码中使用动做

###A.1.八、在代码中使用动做

++A.1.八、在代码中使用动做

++++立钻哥哥:咱们以“/actions/platformer”动做集下的“Move”动做为例,演示如何获取动做状态

 

++一、添加组件,启用“platformer”动做集

++++立钻哥哥:打开SteamVR示例场景“Simple Sample”,好吧,咱们“Ctrl+D”复制一个,重命名为:“立钻哥哥的测试场景(Simple Sample)”,只是演示,不修改原来工程构成,这也是一个习惯吧:注意备份保留原有信息

++++选择游戏对象[CameraRig],为其挂载“SteamVR_ActivateActionSetOnLoad”组件,并指定启用“platformer动做集

 

++++\Assets\SteamVR\Input\SteamVR_ActivateActionSetOnLoad.cs

using UnityEngine;

using System.Collections;

 

namespace Valve.VR{

    //Automatically activates an action set on Start() and deactivates the set on OnDestroy(). Optionally deactivating all other sets as well.(立钻哥哥:自动激活Start()和OnDestroy()上的操做集。还能够选择停用全部其余集。

    public class SteamVR_ActivateActionSetOnLoad : MonoBehaviour{

        public SteamVR_ActionSet actionSet = SteamVR_Input.GetActionSet(default);

        public SteamVR_Input_Sources forSources = SteamVR_Input_Sources.Any;

        public bool disableAllOtherActionSets = false;

        public bool activateOnStart = true;

        public bool deactivateOnDestroy = true;

 

        private void Start(){

            if(actionSet != null && activateOnStart){

                //Debug.Log(string.Format(立钻哥哥:[SteamVR] Activating {0} action set., actionSet.fullPath));

                actionSet.Activate(forSources, 0, disableAllOtherActionSets);

             }

        }

 

        private void OnDestroy(){

            if(actionSet != null && deactivateOnDestroy){

                //Debug.Log(string.Format(立钻哥哥:[SteamVR] Deactivating {0} action set., actionSet.fullPath));

                actionSet.Deactivate(forSources);

            }

        }

 

     }    //立钻哥哥:public class SteamVR_ActivateActionSetOnLoad{}

 

}    //立钻哥哥:namespace Valve.VR{}

 

++二、编写YanlzVRGetMyMoveAction.cs

++++立钻哥哥:新建C#脚本,并重命名为YanlzVRGetMyMoveAction.cs

using UnityEngine;

using Valve.VR;

 

//立钻哥哥:监听输出动做集数据

public class YanlzVRGetMyMoveAction : MonoBehaviour{

    void Update(){

        /*注意:SteamVR2.2.0不能使用(SteamVR_Input.platformer了)

        if(SteamVR_Input.platformer.inActions.Move.GetChanged(SteamVR_Input_Sources.Any)){

            Vector2 pos = SteamVR_Input.platformer.inActions.Move.GetAxis(SteamVR_Input_Sources.Any);

            Debug.Log(立钻哥哥:pos: + pos);

        }

        */

 

        //立钻哥哥:SteamVR2.2.0使用GetAction获取动做集

        //SteamVR_Input.GetAction<SteamVR_Action_Vector2>(platformer, Move)

        if(moveAction != null && moveAction.GetChanged(SteamVR_Input_Sources.Any)){

            Vector2 pos = moveAction.GetAxis(SteamVR_Input_Sources.Any);

            Debug.Log(立钻哥哥:pos:  + pos);

        }

    }

 

    //立钻哥哥:SteamVR2.2.0使用GetAction获取动做集

    public SteamVR_Action_Vector2 moveAction = SteamVR_Input.GetAction<SteamVR_Action_Vector2>(platformer, Move);

    public SteamVR_Action_Boolean jumpAction = SteamVR_Input.GetAction<SteamVR_Action_Boolean>(platformer, Jump);

 

}    //立钻哥哥:public class YanlzVRGetMyMoveAction :MonoBehaviour{}

 

++三、运行测试

++++立钻哥哥:将“YanlzVRGetMyMoveAction.cs”脚本挂载到任意游戏对象上,当任意控制器上触摸“TouchPad”时,应该有信息输出的,没有?

 

 

 

 

###A.1.九、[Interaction System]的变化

###A.1.九、[Interaction System]的变化

++A.1.九、[Interaction System]交互系统

++++立钻哥哥:\Assets\SteamVR\InteractionSystem\

++++SteamVR2.0开发指南http://www.javashuo.com/article/p-wgdghzsl-er.html

++++SteamVR2.2.0开发指南http://www.javashuo.com/article/p-hguaxolf-ew.html

 

++[Interaction System]的变化

++++立钻哥哥:示例场景中,加入了一些新的特性;好比,对投掷(Throwing)部分作了扩展,添加了遥控器和遥控车、简易的推进按钮、手榴弹,以及一些关于Hand的示例

++++[Throwing]:Throwing部分,可以实现基于速度估计的交互,相似于另一个VR开发工具“NewtonVR”可以实现的效果:被抓取的物体不会直接穿过固定静止的障碍物,而是跟随Hand沿障碍物边界滑动;全部这些交互相关的参数均可以在Throwable组件中进行设置

++++[Remotes]:有两个简易控制器,提供了一种与物体进行间接交互的演示

++++[Skeleton]:能够经过点击按钮来显示和隐藏控制器模型,以及切换不一样的手部模型

++++[Interaction System]已经支持[Input System]配置的行为进行交互驱动了,能够经过阅读源码进一步学习“Input System”的使用

 

++[Throwable]组件(SteamVR2.2.0

++++立钻哥哥:\Assets\SteamVR\InteractionSystem\Core\Scripts\Throwable.cs

//立钻哥哥:Purpose: Basic throwable object

using UnityEngine;

using UnityEngine.Events;

using System.Collections;

 

namespace Valve.VR.InteractionSystem{

    [RequireComponent(typeof(Interactable))]

    [RequireComponent(typeof(Rigidbody))]

    [RequireComponent(typeof(VelocityEstimator))]

    public class Throwable : MonoBehaviour{

        public Transform attachmentOffset;

        public float catchingSpeedThreshold = -1;

        public float releaseVelocityTimeOffset = -0.011f;

        public float scaleReleaseVelocity = 1.1f;

 

        public UnityEvent onPickUp;

        public UnityEvent onDetachFromHand;

        public UnityEvent<Hand> onHeldUpdate;

 

        protected new Rigidbody rigidbody;

 

        [HideInInspector]

        public Interactable interactable;

 

        protected virtual void Awake(){}

        protected virtual void OnHandHoverBegin(Hand hand){}

        protected virtual void OnHandHoverEnd(Hand hand){}

        protected virtual void HandHoverUpdate(Hand hand){}

        protected virtual void OnAttachedToHand(Hand hand){}

        protected virtual void OnDetachedFromHand(Hand hand){}

        protected virtual void GetReleaseVelocities(Hand hand, out Vector3 velocity, out Vector3 angularVelocity){}

        protected virtual void HandAttachedUpdate(Hand hand){}

        protected virtual IEnumerator LateDetach(Hand hand){}

        protected virtual void OnHandFocusAcquired(Hand hand){}

        protected virtual void OnHandFocusLost(Hand hand){}

    }    //立钻哥哥:public class Throwable:MonoBehaviour{}

 

    public enum ReleaseStyle{

        NoChange,

        GetFromHand,

        ShortEstimation,

        AdvancedEstimation,

    }    //立钻哥哥:public enum ReleaseStyle{}

  

}    //立钻哥哥:namespace Valve.VR.InteractionSystem{}

 

 

 

 

###A.1.十、VRTK是否可以继续结合SteamVR2.0使用

###A.1.十、VRTK是否可以继续结合SteamVR2.0使用

++A.1.十、VRTK是否可以继续结合SteamVR2.0使用

++++立钻哥哥:若是VRTK没有新版更新的话,理论上来讲不能使用VRTKV3.3.0如下版本)结合SteamVR2.0进行开发,除非克隆VRTK源码,自行对其进行修改;(TipsSteamVR版本还不稳定,因此谨慎使用!)

++++SteamVR2.0开发指南http://www.javashuo.com/article/p-wgdghzsl-er.html

++++SteamVR2.2.0开发指南http://www.javashuo.com/article/p-hguaxolf-ew.html

 

++继续使用VRTK的建议

++++立钻哥哥:当前版本VRTK3.3.0如下版本)并不支持SteamVR2.0以上版本

++++使用VRTK的开发者可继续使用SteamVR1.2.3进行开发

++++SteamVR Plugin的过往版本可访问:https://github.com/ValveSoftware/steamvr_unity_plugin/releases

++++SteamVR2.0开发指南http://www.javashuo.com/article/p-wgdghzsl-er.html

++++SteamVR2.2.0开发指南http://www.javashuo.com/article/p-hguaxolf-ew.html

 

 

 

 

 

 

 

##A.二、SteamVR Unity Plugin官方文档

##A.二、SteamVR Unity Plugin官方文档

++A.二、SteamVR Unity Plugin官方文档

++++立钻哥哥:https://valvesoftware.github.io/steamvr_unity_plugin/

++++SteamVR2.0开发指南http://www.javashuo.com/article/p-wgdghzsl-er.html

++++SteamVR2.2.0开发指南http://www.javashuo.com/article/p-hguaxolf-ew.html

 

 

++++SteamVR2.0开发指南http://www.javashuo.com/article/p-wgdghzsl-er.html

++++SteamVR2.2.0开发指南http://www.javashuo.com/article/p-hguaxolf-ew.html

 

 

 

 

++立钻哥哥推荐的拓展学习连接(Link_Url)

立钻哥哥推荐的拓展学习连接(Link_Url)

++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/

++++HTC_VIVE开发基础http://www.javashuo.com/article/p-mhcdmelt-bt.html

++++Oculus杂谈http://www.javashuo.com/article/p-unmgvyjw-ce.html

++++Oculus安装使用http://www.javashuo.com/article/p-ulvvimkb-cr.html

++++SteamVR简介http://www.javashuo.com/article/p-awcwwcaq-ea.html

++++SteamVR脚本功能分析http://www.javashuo.com/article/p-ajqgwdev-ek.html

++++SteamVR2.0开发指南http://www.javashuo.com/article/p-wgdghzsl-er.html

++++SteamVR/Extrashttp://www.javashuo.com/article/p-qrebqbra-he.html

++++SteamVR/Inputhttp://www.javashuo.com/article/p-avbvrjff-ga.html

++++OpenXR简介http://www.javashuo.com/article/p-qgsgcamr-eu.html

++++VRTK杂谈http://www.javashuo.com/article/p-gsryrkjk-eb.html

++++VRTK快速入门(杂谈)http://www.javashuo.com/article/p-bgvfnmia-cm.html

++++VRTK官方示例(目录)http://www.javashuo.com/article/p-dsnjffvq-ea.html

++++VRTK代码结构(目录)http://www.javashuo.com/article/p-wfilzqyd-es.html

++++VRTK(SceneResources)http://www.javashuo.com/article/p-ryptqvzl-hm.html

++++VRTK_ControllerEventshttp://www.javashuo.com/article/p-sciqvywx-hv.html

++++VRTK_InteractTouchhttp://www.javashuo.com/article/p-ggucvtwz-hq.html

++++VR实验:以太网帧的构成http://www.javashuo.com/article/p-fnfhdcgt-bp.html

++++FrameVR示例V0913http://www.javashuo.com/article/p-xnlrngai-cw.html

++++FrameVR示例V1003http://www.javashuo.com/article/p-ztazxpkv-bd.html

++++SwitchMachineV1022http://www.javashuo.com/article/p-tqkoklov-s.html

++++PlaySceneManagerV1022http://www.javashuo.com/article/p-tqkoklov-s.html

++++Unity5.x用户手册http://www.javashuo.com/article/p-ufnzpmga-s.html

++++Unity面试题ABChttp://www.javashuo.com/article/p-mwacxwca-gm.html

++++Unity面试题Dhttp://www.javashuo.com/article/p-wuwcrclr-s.html

++++Unity面试题Ehttp://www.javashuo.com/article/p-hmabbtmc-ba.html

++++Unity面试题Fhttp://www.javashuo.com/article/p-olslkfao-cq.html

++++Cocos2dx面试题http://www.javashuo.com/article/p-daozmsii-cz.html

++++禅道[zentao]http://www.javashuo.com/article/p-rqsvjwtk-cz.html

++++Lua快速入门篇(Xlua拓展):http://www.javashuo.com/article/p-rrszijom-cm.html

++++Lua快速入门篇(XLua教程):http://www.javashuo.com/article/p-pduvmusb-ho.html

++++Lua快速入门篇(基础概述)http://www.javashuo.com/article/p-shernvtt-u.html

++++框架知识点http://www.javashuo.com/article/p-eufbowgf-u.html

++++游戏框架(UI框架夯实篇)http://www.javashuo.com/article/p-cvemoigb-cu.html

++++游戏框架(初探篇)http://www.javashuo.com/article/p-zfpoilbc-hy.html

++++设计模式简单整理http://www.javashuo.com/article/p-rngqugib-hg.html

++++专题:设计模式(精华篇)http://www.javashuo.com/article/p-nbohnaya-hw.html

++++U3D小项目参考https://blog.csdn.net/vrunsoftyanlz/article/details/80141811

++++Unity案例(Vehicle)http://www.javashuo.com/article/p-wxnfscgy-dy.html

++++UML类图http://www.javashuo.com/article/p-sxberuew-bm.html

++++PowerDesigner简介http://www.javashuo.com/article/p-deknpwxv-cu.html

++++Unity知识点0001http://www.javashuo.com/article/p-ryvdxxjr-ep.html

++++Unity知识点0008http://www.javashuo.com/article/p-kxgstxls-gu.html

++++U3D_Shader编程(第一篇:快速入门篇)http://www.javashuo.com/article/p-kyppgrac-gz.html

++++U3D_Shader编程(第二篇:基础夯实篇)http://www.javashuo.com/article/p-qkyowtli-hv.html

++++Unity引擎基础http://www.javashuo.com/article/p-beommoeb-ka.html

++++Unity面向组件开发http://www.javashuo.com/article/p-eigmuvut-dt.html

++++Unity物理系统http://www.javashuo.com/article/p-nqvvciwv-kd.html

++++Unity2D平台开发http://www.javashuo.com/article/p-ycaagdtj-hs.html

++++UGUI基础http://www.javashuo.com/article/p-rukxwckw-mc.html

++++UGUI进阶http://www.javashuo.com/article/p-wcatruhq-gt.html

++++UGUI综合http://www.javashuo.com/article/p-dkccmqii-gg.html

++++Unity动画系统基础http://www.javashuo.com/article/p-mbrdouxy-dq.html

++++Unity动画系统进阶http://www.javashuo.com/article/p-aqaqpbkh-bp.html

++++Navigation导航系统http://www.javashuo.com/article/p-dswwllas-t.html

++++Unity特效渲染http://www.javashuo.com/article/p-ckojjyfj-bp.html

++++Unity数据存储http://www.javashuo.com/article/p-bvlzynso-m.html

++++Unity中Sqlite数据库http://www.javashuo.com/article/p-ejutsbxl-ca.html

++++WWW类和协程http://www.javashuo.com/article/p-dbwmhsav-cy.html

++++Unity网络http://www.javashuo.com/article/p-sqrlntgh-dw.html

++++C#事件http://www.javashuo.com/article/p-zmwruvql-gm.html

++++C#委托http://www.javashuo.com/article/p-uozpymaf-gh.html

++++C#集合http://www.javashuo.com/article/p-sfqfdqsf-ex.html

++++C#泛型http://www.javashuo.com/article/p-xrttqngo-ee.html

++++C#接口http://www.javashuo.com/article/p-vhlfplgv-dm.html

++++C#静态类https://blog.csdn.net/vrunsoftyanlz/article/details/78630979

++++C#中System.String类http://www.javashuo.com/article/p-olslkfao-cq.html

++++C#数据类型http://www.javashuo.com/article/p-hmabbtmc-ba.html

++++Unity3D默认的快捷键http://www.javashuo.com/article/p-wuwcrclr-s.html

++++游戏相关缩写http://www.javashuo.com/article/p-mwacxwca-gm.html

++++UnityAPI.Rigidbody刚体http://www.javashuo.com/article/p-phaztrtw-w.html

++++UnityAPI.Material材质http://www.javashuo.com/article/p-ntyoqcng-q.html

++++UnityAPI.Android安卓http://www.javashuo.com/article/p-fyyfgkck-q.html

++++UnityAPI.AndroidJNI安卓JNIhttp://www.javashuo.com/article/p-kvxjsnzf-w.html

++++UnityAPI.Transform变换http://www.javashuo.com/article/p-bfgrrhxl-cq.html

++++UnityAPI.WheelCollider轮碰撞器http://www.javashuo.com/article/p-smnaoooi-cn.html

++++UnityAPI.Resources资源http://www.javashuo.com/article/p-utqnokva-bu.html

++++JSON数据结构http://www.javashuo.com/article/p-dljbtddn-g.html

++++CocosStudio快速入门http://www.javashuo.com/article/p-qldbaqqa-v.html

++++Unity企业内训(目录)http://www.javashuo.com/article/p-oefbctlf-mn.html

++++Unity企业内训(第1讲)http://www.javashuo.com/article/p-ehlblkrj-mc.html

++++Unity企业内训(第2讲)http://www.javashuo.com/article/p-tiecmlwc-ma.html

++++Unity企业内训(第3讲)http://www.javashuo.com/article/p-mlpucjnv-ma.html

++++Unity企业内训(第4讲)http://www.javashuo.com/article/p-vfalurum-kz.html

++++Unity企业内训(第5讲)http://www.javashuo.com/article/p-ncrckqey-kv.html

++++Unity企业内训(第6讲)http://www.javashuo.com/article/p-gcrucvtb-ku.html

++++插件<Obi Rope>http://www.javashuo.com/article/p-rmhegsmj-kr.html

++++计算机组成原理(教材篇)http://www.javashuo.com/article/p-sejaldpf-kr.html

++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/

--_--VRunSoft:lovezuanzuan--_--