如何在VR场景中位移与行走Unity VRTK - SteamVR Unity Toolkit针对VR开发的工具包

Unity3D游戏制作(一)——3D横版场景的角色移动控制 本系列文章由 Amazonzx 编写,欢迎转载,转载请注明出处。 http://blog.youkuaiyun.com/amazonzx/article/details/7824112   开博写Unity的东西也写了好多,但大部分都是翻译,原创很少,接下来的一段日子,我会多写一些原创文章,介绍一些在项目中积累的简单实用的技术。   一、导入场景,并在场景中加入TouchPlane TouchPl 阅读详情
Hello,我是KitStar。

以下文章整理的不对。还请见谅。


如果您碰到什么其他问题的话,欢迎来 我自己的一个 讨论群`559666429`来,大家一起找答案,共同进步


    在使用HTC VIVE StreamVR 开发VR项目的时候,需要使用许多的,比如激光定位,贝塞尔曲线激光指针,位移,触碰,抓取等功能。这时候一个很好的插件就很重要,这里我们使用的是“VRTK - SteamVR Unity Toolkit”。VRTK


   一, 概要

      这个工具包提供了很多Unity3d里的常用VR功能,如下(但并不局限于此):

     · 带有通用别名的控制器按钮事件

      · 控制器世界指针(如激光指针)

      · 玩家传送

      · 用控制器抓取对象

      · 用控制器和对象交互

      这个工具类基本是受到 SteamVR Plugin for Unity3d Github Repo的启发,并基于此。这个工具存在的原因是因为SteamVR plugin含有令人困惑或不完善的代码。

 二, 预制

      可用预制:[CameraRig]直接从SteamVR Unity plugin例子——SteamVR/Extras/SteamVR_TestThrow场景中拿来,因为它包含了控制器上相关模型的子物体(这在SteamVR plugin默认预制SteamVR/Prefabs/[CameraRig].prefab中似乎是缺失的)。

      SteamVR_Unity_Toolkit/Prefabs/[CameraRig]可以被拖到任何场景中,通过VR头盔和包括模型呈现的VR控制器的追踪来提供对VR游戏相机的即时访问。

  三,帧率显示

     这个画布添加一个表示帧率的文本元素到头盔上。使用这个预制必须把它放到场景中,然后头盔的相机需要被添加到画布上。

   · 选择场景中的FremesPerSecondCanvas对象

   · 找到Canvas组件

   · 设置Render Camera参数为 [CameraRig]预制里的Camera(eye)


     预制上有很多可以被设置的参数。展开层级视图中的FramesPerSecondCanvas对象,显示子对象FramesPerSecondText并点击显示额外参数,这些参数可以通过FramesPerSecondViewer脚本(可以在SteamVR_Unity_Toolkit/Scripts/Helper/FramesPerSecondViewer找到)来设置。


    可用脚本参数如下:

   · Display FPS:FPS文本可视切换。

   · TargetFPS:认为可接受的帧率,被用来作为改变FPS文本颜色的基准。

   · Font Size:FPS显示字体尺寸。

   · Position:FPS 文本在头盔视野的位置。

   · Good Color:当处在目标FPS的合理范围之内的FPS文本颜色。

   · WarnColor:当FPS降到低于目标FPS合理范围的FPS文本颜色。

   · Bad Color:当FPS处在相对目标FPS为不合理水平时FPS文本的颜色。


SFramesPerSecondCanvas 预制的例子可以在达到SteamVR_Unity_Toolkit/Examples/018_CameraRig_FramesPerSecondCounter场景中找到,在头盔视野中间显示了帧率。按下扳机键(trigger)生成一个新的小球,按下触摸版(touchpad)生成10个新的小球。通过最终当很多小球出现的时FPS将下降来演示这个预设。


 四, 脚本(VRTK_ControllerActions)

   这个目录包含了所有添加到Unity的VR功能的工具脚本。

   当前可用脚本有:控制器行为脚本提供了处理常见控制器行为的帮助方法。如下可用公共方法:  


    · IsControllerVisible(): 如果控制器模型是可见的返回真,否则返回假。

    · ToggleControllerModel(bool on):根据所给布尔值状态设置控制器模型的可见性。如果传入true,控制器模型就被显示出来,如果传入false,控制器就被隐藏了。

    · TriggerHapticPulse(int duration, ushort strength):启动控制器开始震动,根据给定的持续计时(第一个参数)和震动强度(第二个strength参数)。最大强度可以是3999,超过就限制为3999。


   VRTK_ControllerActions脚本的例子在SteamVR_Unity_Toolkit/Examples/016_Controller_HapticRumble场景中,展现了隐藏控制器和让控制器在给定强度下震动给定时长的能力。


 五:控制器事件(VRTK_ControllerEvents)

   控制器事件脚本被添加到 [CameraRig]预制里的控制器对象上,为控制器上的每个按钮按下提供事件监听(除了系统菜单按钮,因为这个按钮不能被重载,只能总是由Steam使用)。

   当一个控制器按钮被按下,脚本发出一个事件表明按钮被按下了,这使得其他脚本去监听这个事件而不需要实现任何控制器逻辑。脚本也有一个公共的布尔类型的按下状态变量,允许被其他脚本查询按钮是否被按下。当一个控制器按钮被释放,脚本也发送一个事件表示按钮被释放了。控制器触摸板有两个状态,既可以用户只把手指放到压力传感板上来触摸,也可以用户在板上按下去直到发出声响来点击。控制器事件脚本同时分别处理触摸板触摸和点击事件。

   控制器上有两个按钮轴:


 · 触摸板触摸位置,位置的x和y值基于触摸板当前被触摸位置。

  · 扳机按钮,有个基于扳机键被按下去程度的x值。


  当触摸板的轴或者扳机键的轴值改变时,会有两个额外的事件发出,这可以被用来确定两个轴的变化来进行精确控制,如用触摸板来移动角色,或者知道扳机键被按下程度。

  触摸板的轴由变量TouchpadAxis 记录,在所有控制器事件的脚本中更新。

  扳机键的轴由变量buttonPressure 记录,在所有控制事件脚本中更新。

  任何其他按钮按压只记录一个为1或者0按钮压力,因为所有其他按钮都是数字量(要么就是点击要么就没有),但扳机是一个可以记录不同按钮压力的模拟量。

  轴值变化的精确度可以由脚本中的axisFidelity 参数来决定,默认值为1。

  值只要超过2就可能会产生灵敏过度的结果。

  事件发出的有效载体信息包含:


· controllerIndex:所使用控制器的索引。

· buttonPressure:0到1的浮点数,表示按钮按下的所施加的压力值。

· touchpadAxis: 一个表示触摸板触摸位置的Vector2类型变量。

· touchpadAngle:一个表示触摸板触摸位置的转动位置的浮点数,0是顶部,180是底部,其他角度随之对应。


   当控制器被按下时也会有通用动作的别名事件被发出。这些动作别名可以被映射到想要的控制器按钮上。

   这些别名是:


· Toggle Pointer:打开关闭镭射棒

· Toggle Grab:抓取游戏对象

· Toggle Use:使用对象

· Toggle Menu:打开一个游戏内菜单


    每个上面的别名都可以通过在脚本参数窗口的下拉栏里选择映射其使用到喜好的控制器按钮上。

    当所设置的映射按钮被按下时将发出一个实际按钮事件以及一个额外别名开启的事件。

    当按钮释放的时候就发出一个实际按钮事件以及一个额外的别名关闭的事件。

    监听这些别名事件而不是实际的按钮事件意味着可以很轻易的自定义控制器按钮到它们应该执行的行为上。VRTK_ControllerEvents脚本的例子可以在SteamVR_Unity_Toolkit/Examples/002_Controller_Events场景中看到,事件怎样被使用和监听的代码例子可以参见SteamVR_Unity_Toolkit/Examples/Resources/Scripts/VRTK_ControllerEvents_ListenerExample.cs脚本。



六,简单激光指针(VRTK_ SimplePointer)


    简单指针(Simple Pointer)脚本从控制器尾部发出一个有色光束来模拟激光束。这在场景中指向对象很有用,它能判断所指向的对象以及对象距控制器发出光束位置的距离。

    激光束默认按下控制器的抓握键(Grip)来激活。

    因为所侦听的事件是AliasPointer别名事件,所以这个指针开关按钮可以通过在 VRTK_ControllerEvents脚本参数里来改变 pointerToggleButton来选择设置。

    简单指针脚本(VRTK_ SimplePointer)添加到[CameraRig] 预制里的控制器对象上,同时添加需要VRTK_ControllerEvents脚本来监听启用和禁用光束的控制器按钮事件。

    下面是可用脚本参数:

     ∙ Enable Teleport(启用传送):如果勾选了,在目标设置事件中的teleport标志位就设为true,所以传送脚本就知道是否要行动到新的目标。如果这个选项没有勾选的话,控制器光束启动但是不会触发位移。 

      ∙ Point Hit Color(指针碰撞颜色):当光束和一个有效目标碰撞的颜色。每个控制器可以有不同的颜色设置。      

      ∙ Pointer Miss Color(指针无碰撞颜色):当光束没有命中有效目标时的颜色。每个控制器可以有不同的颜色设置。

     ∙ Show Play Area Cursor(显示游玩区光标):如果这个启动,游玩区界限就会在光束指针的顶端显示出来,颜色和当前指针颜色相同。

     ∙ Play Area Cursor Dimensions(游玩去光标尺寸):决定游玩区光标和碰撞的尺寸。如果值为零,PlayArea Cursor 的尺寸将根据Play Area空间进行校正。

     ∙ Handle Play Area Cursor Collisions(处理游玩区光标碰撞):如果勾选,当游玩区光标和其他物体发生碰撞时,指针颜色就会变成Pointer Miss Color的颜色且WorldPointerDestinationSet 事件将不会被触发,这将防止传送到游玩区会发生碰撞的区域。

     ∙ Beam Always On(光束总是开启):如果这个勾选,光束指针总是可见,但是设置目标点事件仍然只会在所指定按钮松开时发出。

     ∙ Pointer Thickness(指针光束厚度):光束长宽也可以在脚本里设置以及能够开关显示在光柱最后的球形光柱顶端(表示光标)。

     ∙ Pointer Length(指针光束长度):在停止前光束投射的距离。

     ∙ Show Pointer Tip(显示指针顶端):切换是否光标显示在光束指针的尾部。

   

     简单指针对象扩展自VRTK_WorldPointer 抽象类并因此发出相同的事件和有效数据。

     

     VRTK_SimplePointer脚本的例子可以在SteamVR_Unity_Toolkit/Examples/003_Controller_SimplePointer场景中看到并且事件用法和监听的脚本例子可以看SteamVR_Unity_Toolkit/Examples/Resources/Scripts/VRTK_ControllerPointerEvents_ListenerExample.cs脚本。


   七,贝塞尔曲线激光指针(VRTK_BezierPointer)


    贝塞尔指针从控制器末端发出一个曲线(由游戏对象组构而成)到(任何高度的)地面上一点。

    这比简单激光指针要有用的多,因为终点能够弯曲到玩家看不见的对象顶部,所以就可以传送到各种高度的对象上。

    激光束默认按控制器上的抓握键Grip来激活。事件侦听AliasPointer别名事件,所以Pointer Toggle button可以通过在VRTK_ControllerEvents 脚本中改变Pointer Toggle button来进行选择设置。

    贝塞尔指针脚本被添加到[CameraRig]预制里的控制器对象上,控制器对象同时需要添加VRTK_ControllerEvents脚本用来监听控制器按钮开关光束的事件。

    可用脚本参数如下:

      ∙ Enable Teleport(启用传送):如果勾选了,在目标设置事件中的teleport标志位就设为true,所以传送脚本就知道是否要行动到新的目标。如果这个选项没有勾选的话,控制器光束启动但是不会触发位移。         

 

      ∙ Point Hit Color(指针碰撞颜色):当光束和一个有效目标碰撞的颜色。每个控制器可以有不同的颜色设置。

     ∙ Pointer Miss Color(指针无碰撞颜色):当光束没有命中有效目标时的颜色。每个控制器可以有不同的颜色设置。

      ∙ Show Play Area Cursor(显示游玩区光标):如果这个启动,游玩区界限就会在光束指针的顶端显示出来,颜色和当前指针颜色相同。

      ∙ Play Area Cursor Dimensions(游玩去光标尺寸):决定游玩区光标和碰撞的尺寸。如果值为零,PlayArea Cursor 的尺寸将根据Play Area空间进行校正。

      ∙ Handle Play Area Cursor Collisions(处理游玩区光标碰撞):如果勾选,当游玩区光标和其他物体发生碰撞时,指针颜色就会变成Pointer Miss Color的颜色且WorldPointerDestinationSet 事件将不会被触发,这将防止传送到游玩区会发生碰撞的区域。

      ∙ Beam Always On(光束总是开启):如果这个勾选,光束指针总是可见,但是设置目标点事件仍然只会在所指定按钮松开时发出。

      ∙ Activate Delay(激活间隔):能够再次激活指针光束的延迟时间秒数。用来防止持续传送。   

 

     ∙ Pointer Length(指针光束长度):在停止前光束投射的距离。

      ∙ Pointer Density(指针密度):贝塞尔曲线光束渲染的物体个数。这里数值太高将很可能会因为大量渲染对象来对游戏性能有负面影响。

      ∙ Show Pointer Cursor(显示指针光标):在光束终点位置的地面显示光标。用来看光束终点位置的高度很有用,它可以通过切换这个来关闭。

      ∙ Pointer Cursor Radius(指针光标半径):地面指针光标的尺寸,这个值也会影响贝塞尔曲线光束里的对象的尺寸。半径越大,对象尺寸越大。

      ∙ Beam Curve Offset(光束曲线偏移): 投射光束时应用的高度偏移量,就算在光束径直指向时也能产生一个光滑的曲线。

      ∙ Custom Pointer Tracer(自定义指针轨迹): 可以在这里设置一个自定义的游戏对象用来代替光束轨迹的默认球体。自定义游戏对象将和控制器的旋转想匹配。

     ∙ Custom Pointer Cursor(自定义指针光标):  可以在这里设置一个自定义的游戏对象用来代替指针光标的默认平柱体。


      贝塞尔指针对象扩展自VRTK_WorldPointer 抽象类并因此发出相同的事件和有效数据。

      VRTK_BezierPointer脚本的例子参见SteamVR_Unity_Toolkit/Examples/009_Controller_BezierPointer场景,它被连同Height Adjust Teleporter脚本一起使用,来显示怎样可以不需要看到对象的顶部就能使用曲线指针来传送到不同高度的对象上。

      另一个例子可以参见SteamVR_Unity_Toolkit/Examples/012_Controller_PointerWithAreaCollision场景,这里演示了一个开启了游玩区光标和碰撞检测的贝塞尔指针怎样被用来穿过游戏区域,但是不允许传送到墙壁或者其他对象的区域而导致游玩区让玩家穿进墙壁。

      贝塞尔曲线生成的代码是另一个脚本,位置在SteamVR_Unity_Toolkit/Scripts/Helper/CurveGenerator.cs。



   八,基础传送器(VRTK_BasicTeleport)

     

    基础传送器更新[CameraRig]在游戏世界中的x和z位置到由WorldPointerDestinationSet事件设置定位的世界指针顶端的位置。

    y位置从不改变,所以基础传送器不能用来上下移动游戏对象而只能水平移动。

    基础传送器脚本被添加到[CameraRig] 预制下面并需要一个实现了WorldPointer 的脚本添加到另一个游戏对象上(如VRTK_SimplePointer添加到控制器对象上)。

    可用脚本参数如下:

    ∙ Blink Transition Speed(眨眼淡入淡出速度):可以在基础传送脚本中改变眨眼渐变速度来提供一个自定义的传送体验。速度设置为0意味着没有渐变眨眼特效呈现。渐变通过 SteamVR Unity 插件脚本里的SteamVR_Fade.cs脚本实现。

     ∙ Distance Blink Delay(距离眨眼延时): 范围从0到32,这个值决定了基于被传送距离的眨眼过渡保持黑屏的时长。值为0时,任何传送距离都不会延长传送的眨眼过渡,值为32时,就算距离初始点很近的被传送距离都会延长传送的眨眼过渡。这可以被用来模拟用户传送更远的距离花费更长时间。值为16对用户来说就刚好。     


    ∙ Headset Position Compensation(头盔位置补偿): 如果勾选,传送坐标将会式游玩区内头盔的位置。如果没有勾选,传送坐标将总是游玩区中间的位置,就算头盔位置不在游玩区中间也式如此。

     ∙ Ignore Target With Tag Or Class(忽略带有标签或脚本的目标): 一个指定对象标签或者对象上添加的脚本名字的字符串,通知传送器这种目标点应该被忽略,所以用户就不能传送到这些位置上。同时也确保指针颜色被设为丢失目标点颜色。


     VRTK_BasicTeleport 脚本的例子可以参见SteamVR_Unity_Toolkit/Examples/004_CameraRig_BasicTeleport场景。这个场景使用控制器上的VRTK_SimplePointer 脚本在按下grip按钮时初始化一个激光指针,松开Grip按钮时激光指针失效,然后玩家传送到激光指针顶端位置。



    九,可调节高度的传送器(VRTK_HeightAdjustTeleport)

    

    高度调整传送器继承自基础传送器,它允许根据传送位置是否在其他对象顶部来让[CameraRig]改变y位置。

    和基础传送器一样,高度调整传送器被添加到[CameraRig]预制并需要一个可用的世界指针。

    可用脚本参数如下:

    · Blink Transition Speed(眨眼淡入淡出速度):可以在基础传送脚本中改变眨眼渐变速度来提供一个自定义的传送体验。速度设置为0意味着没有渐变眨眼特效呈现。渐变通过 SteamVR Unity 插件脚本里的SteamVR_Fade.cs脚本实现。

   · Distance Blink Delay(距离眨眼延时): 范围从0到32,这个值决定了基于被传送距离的眨眼过渡保持黑屏的时长。值为0时,任何传送距离都不会延长传送的眨眼过渡,值为32时,就算距离初始点很近的被传送距离都会延长传送的眨眼过渡。这可以被用来模拟用户传送更远的距离花费更长时间。值为16对用户来说就刚好。

   · Headset Position Compensation(头盔位置补偿): 如果勾选,传送坐标将会式游玩区内头盔的位置。如果没有勾选,传送坐标将总是游玩区中间的位置,就算头盔位置不在游玩区中间也式如此。

   · Ignore Target With Tag Or Class(忽略带有标签或脚本的目标) : 一个指定对象标签或者对象上添加的脚本名字的字符串,通知传送器这种目标点应该被忽略,所以用户就不能传送到这些位置上。同时也确保指针颜色被设为丢失目标点颜色。

    · Play Space Falling(游玩区坠落):检查是否玩家是否走出对象,即所在游玩区的位置不在对象上,然后就会自动传送到最近的地面上。

   

     反过来说Play Space Falling 选项是在玩家头盔在一个对象上方时会自动传送到一个对象的顶部,这一点在模拟爬梯子时很有用,不需要使用指针光束定位。如果这个选项关闭,玩家就能在他们所站在的对象的同样y高度的空中行走(也就是有一部分游玩区在对象外部)。


   VRTK_HeightAdjustTeleport 脚本的例子参见SteamVR_Unity_Toolkit/Examples/007_CameraRig_HeightAdjustTeleport场景。场景有许多不同高度对象,玩家可在来回走或者使用激光束爬到它们顶部。

   另一个例子参见SteamVR_Unity_Toolkit/Examples/010_CameraRig_TerrainTeleporting场景,展示了玩家也能够在地形碰撞器上传送。

   还有个例子SteamVR_Unity_Toolkit/Examples/020_CameraRig_MeshTeleporting场景中,显示玩家在网格碰撞器上传送。



 十,头盔碰撞淡出(VRTK_HeadsetCollisionFade)


    头盔碰撞淡出的目的是为了检测用户的VR头盔何时碰撞到其他游戏对象并淡出屏幕到一个单色。

    这是为了处理玩家把头放进一个游戏对象里看到对象内部的裁剪,这不是我们所期望的。

    之所以这么做,是因为如果玩家把头放到不该放的地方就会淡出到一个颜色(如黑色),这就让玩家意识到他们做错了什么,然后可能自然的就会后退。如果头盔正在碰撞,那么传送行为就被禁用来防止穿插穿墙的作弊。

   使用Unity 5.3及之前版本,头盔碰撞淡出脚本添加到[CameraRig] 预制的Camera(head)对象上。

   使用Unity 5.4及之后版本,头盔碰撞淡出脚本添加到[CameraRig] 预制下的Camera (head)里的Camera(eye)对象上。

   可用脚本参数如下:

   · Blink Transition Speed(眨眼淡入淡出速度):碰撞时淡入淡出速度。

   · Fade Color(淡出颜色):头盔碰撞时淡出颜色。发出事件如下:

   · HeadsetCollisionDetect: 当用户头盔碰到其他游戏对象时发出。

  · HeadsetCollisionEnded:当用户头盔停止碰撞游戏对象时发出。发出事件的有效载体内容包括:

   · collider: 头盔所碰撞的游戏对象的碰撞器。

   · currentTransform: 当前头盔碰撞淡入淡出脚本所添加到的对象(相机)的Transform。


    VRTK_HeadsetCollisionFade 脚本例子参见SteamVR_Unity_Toolkit/Examples/011_Camera_HeadSetCollisionFading场景。场景在游玩区周围有可碰撞的墙壁,如果玩家把头放进墙壁,头盔就将渐变成黑色。


  十一,玩家呈现(VRTK_PlayerPresence)


    VR用户在游戏呈现中有身体这一概念,它通过在用户站立在游玩区中的位置添加碰撞和刚体来实现。

    身体的碰撞和刚体将防止用户能狗穿过墙壁或者和其他可碰撞对象穿插。

    碰撞体的高度由用户头盔所在高度决定,如果用户下蹲,碰撞体同样收缩,这意味着可能在低的空间去下蹲和爬行通过。

    可用脚本参数如下:


   · Headset Y Offset(头盔y偏移):为用户创建的盒型碰撞体的高度由用户头盔位置设置。如果需要碰撞体小一点来让游玩区和头盔之间留有空间的话,这个值将降低生成的盒型碰撞体的高度。

   · Ignore Grabbed Collisions(忽略抓取碰撞):如果勾选,任何被控制器抓取的物品都不会和游玩区的盒碰撞体及刚体发生碰撞。这在用户需要抓取和挥动对象时是很有用的,因为如果碰撞体激活,这些抓取的东西就会被游玩区的碰撞体弹开。


     VRTK_PlayerPresence 脚本例子可参见SteamVR_Unity_Toolkit/Examples/017_CameraRig_TouchpadWalking场景。场景有很多墙体和斜坡,用户可以用触摸板来四处行走,但是不能穿过这些对象,因为它们是可碰撞的并且刚体物理将不允许发生穿叉。


  十二,触摸板移动 (VRTK_TouchpadWalking)


   通过手指在触摸板上滑动来实现用这个脚本让游玩区在游戏世界中能够移动。

   TouchpadWalking脚本用在[CameraRig]预制上,并且在用户位置添加一个刚体和盒型碰撞来防止他们穿过其他带碰撞的游戏对象。

   如果Headset Collision Fade脚本已经被添加到相机预制上,如果用户试着和一个对象发生碰撞,那么他的位置就会被重置为最近的正常的位置。

   这可能发生在用户穿过需要躬身的区域中途站了起来和顶部发生了碰撞。与其允许用户这样做而引起碰撞问题,倒不如直接移动回到一个正常的位置。这确实破坏了沉浸感,但用户正在做的事情也是不自然的。

   可用脚本参数如下:

   · Left Controller:如果勾选,左控制器的触摸板就能移动游玩区。在运行时可以被切换。

    · Right Controller:如果勾选,右控制器的触摸板就能移动游玩区。在运行时可以被切换。

    · Max Walk Speed:当触摸板被触摸到轴的极限时游玩区所能达到的最大移动速度。触摸板距离中心越近的位置被触摸,移动速度就越慢。

   · Deceleration(减速度):当用户不再触摸到触摸板时游玩区从减速到完全停止的速度。这种减速度效果可以减缓可能遭受的移动恶心。


    VRTK_TouchpadWalking 脚本的例子参见SteamVR_Unity_Toolkit/Examples/017_CameraRig_TouchpadWalking场景。场景中有很多墙壁和梯子,用户可以用触摸板来移动。还有个区域只有用户蹲下才能穿过。在俯身区域挺起身体将导致用户闪回他们最近的正常位置。

  

  十三,VRTK_RoomExtender(游玩区空间扩展)


     这个脚本允许游玩区跟随玩家移动。

     CameraRig 只在达到定义的圈的边缘才会移动。目的是为了创造一个虚拟的更大的游玩区。

     测试这个脚本的demo场景为028_CameraRig_RoomExtender。把脚本添加到CameraRig来使用。

     可用脚本参数如下:

      · Additional Movement Multiplier(额外移动乘数): 圈边缘的移动放大因数。0就是不移动CameraRig。值越高模拟的游玩区域就越大,但是也可能就越不令人舒适。

     · Head Zone Radius(头部空间半径):游玩区不会发生移动的圆圈尺寸,一切都正常的。如果值太低,在蹲下时就会感到不舒服。

      · Debug Transform(调试Transform): 这个transform让玩家周围的CameraRig不移动圆圈显示出来。在demo场景里就是一个在地板上的柱体。记得关闭碰撞。



  十四,可交互对象(VRTK_InteractableObject)


   可交互对象脚本被添加到需要用(如控制器)来交互的任何游戏对象上。

   可用脚本参数如下

  Touch Interactions  触摸交互

      ∙ Highlight On Touch:如果勾选,这个对象在控制器触摸它时就会高亮。

     ∙ Touch Highlight Color:对象被触摸时高亮的颜色。颜色可以被任何全局的设置颜色来覆写(例如InteractTouch 脚本)。

      ∙ Rumble On Touch:控制器触碰对象时触发振动反馈,x表明时长,y表明震动强度。(x和y将来会被自定义编辑器代替)。

   Grab Interactions 抓握交互

      ∙ Is Grabbale:决定对象是否能被抓握。

     ∙ Is Droppable:决定对象在被控制器抓握后能否被放下。如果没有勾选,一旦用控制器按钮拾起了物品就不能放下了。但是如果抓握的机制是关节(Fixed_Joint)的话,当对象受力足够大之后关节断开,物品也就被放下了。所以最好使用控制器子物体的抓握机制(Child_Of_Controller)来防止这种情况。

     ∙ Hold Button To Grab:如果勾选,控制器就需要持续按住设置为抓握的按钮来保持抓握状态。如果没有勾选,抓握的按钮切换抓握行为通过按下一次抓取,再按一次释放。

      ∙ On Grab Collision Delay:当对象被第一次抓取时延迟碰撞的作用的时间量。这在防止游戏对象被抓取时卡到另外一个物体时很有用。

      ∙ Grab Snap Type(抓取对齐方式):这个设置了当对象被抓取时的对齐方式    

          o Sinmple_Snap:把抓取的对象的中心位置放到控制器的附加点上(默认是控制器的tip)     o Rotation_Snap :调整抓取的对象到一个指定旋转,由Vector3 类型的Snap To Rotation变量提供。             o Precision_Snap :没有把对象的位置对齐到控制器,而是用控制器触摸对象时的点来拾起对象(就像真实生活中用手拿起东西一样)。    

          o Handle_Snap: 允许一个空的GameObject作为可交互对象的子物体来用作参考对齐点。抓取时,空GameObject的旋转和位置用来定位抓取的可交互物体到控制器。

    ∙ Snap To Rotation:表示欧拉角的Vector3变量,决定在对齐时相对于控制器的对象的旋转。在拾取枪或剑的时候很有用,对控制器的相对旋转对便于使用是很重要的。

    ∙ Snap To Position:一个Vector3变量,决定对象对齐控制器时的相对位置。

    ∙ Snap Hanlde:一个由空游戏对象提供的Transform,它必须是被抓取物品的子物体并用作一个被拾取物品相对于进行抓取的控制器的旋转和位置的定位点。

    ∙ Rumble On Grab:控制器抓取对象时触发振动反馈,x表明时长,y表明震动强度。(x和y将来会被自定义编辑器代替)。


  Grab Mechanics 抓握机制


    ∙ Grab Attach Type:这决定了抓取的物品在被抓取时怎样被添加到控制器上。   

       o Fixed Joint(固定关节):用一个固定的关节把对象附加到控制器上,意味着附加对象以完全1:1的方式追踪控制器的位置和旋转。     

        o Spring Joint(弹性关节):用一个弹性关节把对象添加到控制器上,意味着物体和控制器之间有一些弹性,弹力驱动物体。在想要牵引一个物体而不是直接把物体对齐到控制器上是很有效的。就感觉物体有运动阻力一般。    o Track Object (追踪对象):不是通过关节来把对象附加到控制器上,而是确保对象追踪控制器的方向,这适用于铰链式关节。    

       o Child Of Controller (控制器子物体):简单地让对象成为抓取控制器的子物体,所以自然地追踪了控制器运动位置。

    ∙ Detach Threshold(分离阈值):当对象从被抓取的控制器分离时的力值。如果控制器试着施加一个高于这个阈值的力到对象上(从另一个对象上拉它或者推它到另一个对象),然后保持对象到抓取控制器的关节就将断开并且对象将不能再被抓起了。这在Tracked Object抓取机制下也有效,只是这个 值确定断开抓取钱控制器可以离对象多远。

    ∙ Spring Joint Strength(弹簧关节力):弹簧力保持对象到控制器。小数值将意味着弹簧很松并且对象需要一个更大的力去移动,大数值就意味着弹簧很紧,小点的力就可以移动它。

   ∙ Spring Joint Damper(弹簧关节阻尼):弹簧的阻尼量在使用弹簧关节抓取机制下有效。在移动被关节的交互对象时,值越高震动效果越小。

    ∙ Throw Muliplier(投掷倍数):值用来乘以给定对象被扔出时的速度值。这还可以被用来连同Interact Grab脚本的Throw Multiplier来让对象被扔的比平常更远(或者输入的值小于1就扔的很近)。


  Use Interactions 使用交互


    ∙ Is Usable(是否可用):决定对象是否可以被使用∙ Hold  Button To Use:如果勾选,控制器上的使用(use)按钮需要被持续按下来保持使用。如果没有勾选,use按钮用一次按钮按下来启动使用和再一次按下来停止使用。

   ∙ Pointer Avtivates Use Action:如果勾选,当一个世界光束指针(由控制器投射)碰到了交互对象,如果对象的Hold Button To Use没有勾选的话,当指针在对象上的时候就会运行对象的StartUsing方法,指针移开失效就会运行StopUsing方法。这个选项在被勾选以后,为了防止在用一个指针来使用对象时发生不必要的传送,就不会抛出目标点设置( Destination Set )事件。

    ∙ Rumble On Use:控制器触碰对象时触发振动反馈,x表明时长,y表明震动强度。(x和y将来会被自定义编辑器代替)。

    

    下面的事件是被发送的:

∙ InteractableObjectTouched:当另一个对象碰到当前对象时发出事件。

∙ InteractableObjectUntouched: 当其他对象停止触碰当前对象时发出事件。

∙ InteractableObjectGrabbed:当其他对象(如控制器)抓握当前对象时发出事件。∙ InteractableObjectUngrabbed:当其他对象停止抓握当前对象时发出事件。

∙ InteractableObjectUsed:当其他对象(控制器)使用当前对象时发出事件。

∙ InteractableObjectUnused:当其他对象停止使用当前对象时发出事件。


   发出的事件有效信息载体包涵:∙ interactingObject:初始化交互的对象(如控制器)。

   脚本基本是提供一个简单的机制来区分游戏世界中的对象是否能被抓取或者使用,最好是把这个脚本看做是一个基类来派生出功能更丰富的脚本。


VRTK_InteractableObject 的例子可以看SteamVR_unity_Toolkit/Examples/005_Controller_BasicObjectGrabbing.场景。这个场景还在控制器上使用了VRTK_InteractTouch和VRTK_InteractGrab 脚本,来展示一个交互对象怎样被抓取和对齐到控制器以及在游戏世界中扔出。

   另外一个例子在场景SteamVR_Unity_Toolkit/Examples/013_Controller_UsingAndGrabbingMultipleObjects。这个场景展示了更多对象,可以被按住按钮抓取或者切换按钮点击来抓取的对象,还有对象通过切换它们的Using 状态来展示多种物品可同时被开启。


  十五,触摸交互对象(VRTK_InteractTouch)


    触摸交互脚本被添加到[CameraRig] 预制里的控制器对象上。

    可用参数如下:

    ∙ Hide Controller On Touch: 当有效触碰发生时隐藏控制器模型

    ∙ Hide Controller Delay:触摸隐藏控制器之前的等待秒数。

    ∙ Global Touch Highlight Color: 如果交互对象被触碰就能高亮显示,没有设置本地颜色的话就使用全局颜色。

    发出事件如下:

∙ ControllerTouchInteractableObject:当有效对象被碰到时发出

∙ ControllerUntouchInteractableObject: 当一个有效对象不再被触碰时发出发出事件有效载体信息包含:∙ controllerIndex(控制器序号):正在交互的控制器的序号

∙ Target(目标): 控制器正在交互的对象的GameObject


VRTK_InteractTouch 的例子参见SteamVR_Unity_Toolkit/Examples/005_Controller_BasicObjectGrabbing场景。场景演示了添加了 VRTK_InteractableObject 脚本的对象被控制器触碰时能够高亮显示交互对象的能力。


十六,抓取交互对象(VRTK_InteractGrab)


    交互抓取脚本被添加到[CameraRig] 预制里的控制器对象上,并且需要添加VRTK_ControllerEvents脚本用来监听抓取和释放交互游戏对象的控制器按钮事件。

    它监听AliasGrabOn和AliasGrabOff 事件来确定对象合适应该被抓取和释放。

    控制器对象也需要添加VRTK_InteractTouch 脚本用来确定何时一个可交互对象被触摸到。

    只有有效的被触摸对象才能被抓取。如果控制器触碰到一个包含VRTK_InteractableObject脚本并且isGrabbable 标志位设置为真的游戏对象,该对象就可以被抓取。

    如果有效可交互对象是可抓取的,按下控制器上所设置的抓取按钮(默认是Trigger按钮)将抓取和对齐对象到控制器上,并且直到抓取按钮松开才会被释放。

    当控制器抓取按钮松开时,如果可交互对象是可抓取的,它将会被按一定速率沿着控制器松开时的方向进行推动,这就模拟了对象投掷。可交互对象需要碰撞体用来激活触发和一个刚体用来拾取它们并在游戏世界中四处移动它们。

    可用脚本参数如下:


    ∙ Controller Attach Point:控制器模型上用来吸附抓取的对象的刚体点(默认为tip)    

    ∙ Hide Controller On Grab:当有效抓取发生时隐藏控制器模型。

   ∙ Hide Controller Delay:在抓取时隐藏控制器之前的等待时间秒数。

    ∙ Grab Precognition(预先抓取): 在抓取按钮按下时和控制器正在抓取某个东西时之间时间量。例如,如果一个对象下落过快,因为人的反应时间可能很难及时按下抓取按钮来抓住对象。这个值越高意味着抓取键可以越提前在控制器碰到对象以及碰撞发生前按下,如果抓取键仍然被按下(如果抓取对象需要持续按键抓取的话),则抓取动作就会成功。

    ∙ Throw Multiplier(投掷乘数):用来乘以对象被扔出时速度的量。在放大 CameraRig 来模拟能够把物体扔的更远时是很有用的。

    ∙ Create Rigid Body When Not Touching:如果勾选,当抓取按钮按下时,如果控制器没有碰到一个可交互的对象,那么添加到控制器上的刚体就允许控制器去推动周围其他的刚体对象。



发出事件如下:

∙ ControllerGrabInteractableObject: 当有效对象被抓取时发出

∙ ControllerUngrabInteractableObject: 当有效对象从抓取到放开时发出


发出事件有效载体信息包含:

∙ controllerIndex: 正在交互的控制器序号

∙ target: 控制器正在交互的对象的GameObject


   VRTK_InteractGrab的例子可以参见SteamVR_Unity_Toolkit/Examples/005_Controller/BasicObjectGrabbing场景。场景演示了抓取挂有VRTK_InteractableObject 脚本的可交互对象。对象可拾起可抛出。


更复杂一点的例子可以参见场景SteamVR_Unity_Toolkit/Examples/013_Controller_UsingAndGrabbingMultipleObjects ,这里演示了每个控制器都能单独抓取和使用对象并且对象也可以被同时切换它们的使用状态。SteamVR_Unity_Toolkit/Examples/014_Controller_SnappingObjectsOnGrab场景演示了不同的对齐抓取的对象到控制器上的机制。


   十七,使用可交互对象(VRTK_InteractUse)


    交互使用脚本被添加到[CameraRig] 预制里的控制器对象上,并且需要添加VRTK_ControllerEvents脚本用来监听使用和停止使用交互游戏对象的控制器按钮事件。

    它监听AliasUseOn 和AliasUseOff 事件来确定对象合适应该被使用和停止使用。

    控制器对象也需要添加VRTK_InteractTouch脚本来决定何时可交互对象被触碰。

    只有有效的触碰对象才能被使用。如果控制器触碰到一个包含VRTK_InteractableObject 脚本且isUsable标志位设置为真,这个对象就能被使用。

    可用脚本参数如下:

      ∙ Hide Controller On Use:当有效使用动作开始时隐藏控制器模型

      ∙ Hide Controller Delay:在使用之前,隐藏控制器的等待时间秒数


发出事件如下:

∙ ControllerUseInteractableObject: 当一个有效对象开始被使用时发出∙ ControllerUnuseInteractableObject: 当一个有效对象停止被使用时发出


发出的事件的有效载体信息包含:

∙ controllerIndex: 正在交互的控制器序号

∙ target: 控制器正在交互的对象的GameObject


例子参见SteamVR_Unity_Toolkit/Examples/006_Controller_UsingADoor场景,模拟打开一扇门和关上。地上也有一个立方体可以被抓取来展示可交互对象怎么被使用或者抓取


另一个例子可参见SteamVR_Unity_Toolkit/Examples/008_Controller_UsingAGrabbedObject场景,它展示了对象可以用一个按钮抓取并用另一个按钮使用。


   十八,自动抓取可交互对象(VRTK_ObjectAutoGrab)


   通过把VRTK_ObjectAutoGrab脚本加到控制器上并指定应该默认抓取的对象,来让特定控制器能自动抓取可交互对象。

   自动抓取对象脚本添加到[CameraRig] 预制里的控制器对象上,控制器对象还需要添加VRTK_InteractGrab 脚本。

   可用脚本参数如下:

    ∙ Object To Grab(抓取的对象):在游戏开始时被控制器抓取的游戏对象(在场景或者预制里)。

    ∙ Clone Grabbed Object(复制被抓取对象):如果勾选,Object To Grab(抓取的对象)将被复制到一个新对象并添加到控制器上,而被复制的对象留在场景里。这在两个控制器都需要抓取同样的对象时是需要的,因为单个对象不能被不同的控制器同时抓取。如果被抓取的对象是一个预制就也需要被复制,因为它需要存在于场景中被抓取。



   例子参见SteamVR_Unity_Toolkit/Examples/026_Controller_ForceHoldObject场景。这里每个控制器自动抓取了一把剑,同时为了防止剑被扔掉,剑被永久的添加到用户的控制器上

#基于VR环境下的手指识别键盘输入# VR场景搭建和移动漫游(一) 基本结束了输入阶段的调试之后,开始搭建VR场景。VR的基本配置在前文当中已经提到过了,导入SteamVR和VRTK的文件包之后,将可用的场景素材放入Unity文件中。先将[Camera Rig]/[status]/[SteamVR]三个文件拖入场景中。其中[Camera rig]是比较重要的一个文件。它代表着VR中的头戴式设备和两个手柄。基本配置完成之后,来进行VR场景模型的搭建。模型素材来自于网... 阅读详情

相关推荐

【VR】(二)Unity3d开发 VR使用手柄圆盘控制 人物移动(抛物线瞬移)

用抛物线的点实现HTC Vive瞬移系统 这个是针对HTC Vive和引擎简单易用的瞬移系统。这个系统是模仿Valve的Vive游戏“The Lab”而作,即玩家可以穿过比游戏区域大的VR环境。下图可以看到对于系统的演示: 提供的这个系统解决了以下问题: 1 计算可导航空间:我们显然不希望玩家可以传送出边界,或者在不透明物体内部。为了解决这个问题,这个系统使用了Unity生成

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 6534

限制VR头盔位移

这个代码是禁止VR头盔跟随我们移动而发生位移,适合用过过山车游戏等的限制位置移动的项目。但是VR头盔可以旋转

LCHUIHUI的博客 1058

VRInputField:精简版本的Unity InputField,消除了移动通用键盘弹出窗口,可在VR场景中免费使用

VRInputField 精简版本的Unity InputField,消除了移动通用键盘弹出窗口,可在VR场景中免费使用。

VR开发(一)——SteamVR实现摇杆移动

基础配置到此请参考:Unity SteamVR 开发教程:用摇杆/触摸板控制人物持续移动(2.x 以上版本)-优快云博客感谢大佬的分享

lyhizjj的博客 1374

Bioinformatics2021 | FraGAT+:基于分子原始片段的多尺度图注意力机制的分子性质预测模型

Bioinformatics2021 | FraGAT:基于分子原始片段的多尺度图注意力机制的分子性质预测模型

justBeHerHero 1999

RK3576开发板ROS2部署实战:从Buildroot配置到Hello World Demo

本文详细介绍了在RK3576开发板上部署ROS2的完整实战流程。从Buildroot工程配置、集成ROS2依赖,到搭建Docker交叉编译环境、处理编译难题,最终完成系统镜像打包并在板端成功运行Talker-Listener Demo。该指南旨在帮助开发者深入理解嵌入式机器人系统的构建链,实现从底层到应用的完全掌控。

mac99的博客 1149

Unity Steam_VR开发工具插件---VRTK 自带案例分析

DEMO 1  查询硬件手柄头显 在VRTK插件 的第一个demo   001_CameraRig_VR_PlayArea 案例   这个demo 显示的功能:  按下任一手柄上的按键,便载入下一个场景   找到demo场景中##Scene Changer## 游戏物体,打开附加的scene changer脚本 里面有两个核心的类,以及几个重要的API

本庸 1万+

Mac本地大模型实战指南:Ollama+Metal+Apple Silicon深度优化

大语言模型(LLM)本地化部署正成为开发者关键技术能力,其核心在于推理效率、硬件适配与成本控制。Apple Silicon凭借统一内存架构(UMA)和Neural Engine,为本地LLM运行提供了独特优势;Metal加速则显著提升GPU计算吞吐,使Gemma 4、Qwen 3.5等模型在M系列Mac上实现低延迟、高精度、离线可用的工程落地。相比云端API,本地方案规避了token计费、网络依赖与数据外泄风险,特别适用于企业文档处理、实时语音分析、私有知识库检索等强隐私、低时延场景。本文聚焦Mac平台,系

weixin_33443333的博客 351

VRTK4.0 学习Day4

VRTK中升级到URP或HDRP中指针射线丢失

qqgk192的博客 687

WPF 上位机可视化天花板:HandyControl 搭建 SCADA 系统

HandyControl 凭借「丰富的工业级控件、灵活的主题定制、优异的性能」,成为 WPF 开发 SCADA 系统的首选 UI 库。本文搭建的 SCADA 系统涵盖实时监控、设备控制、报警管理、趋势分析四大核心功能,通过 HandyControl 实现了工业级可视化效果,开发效率提升 60% 以上。控件开箱即用:无需自定义仪表盘、趋势图、指示灯等 SCADA 核心控件;可视化效果专业:工业风主题、动态颜色切换、清晰的状态呈现,契合工业场景需求;

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1126

如何绘制电气绝缘图(GB9706.1-2007和GB9706.1-2020差异)

是用来描述要考虑设备的绝缘状况和它们的值 ,从而便于和相关部门交流和沟通,如权威机构和检测实验室等。本文为绝缘图的实例, 包括所有相关的绝缘路径以及介电强度,爬电距离和电气间隙的值。

学海无涯的专栏 1万+

Unity新手干货之移动篇(四)steamVR移动

开篇介绍。

2201_75516689的博客 2071

ROS2 CANopen 使用教程

第一步是定义一个结构,用于保存有关接头和相关 CANopen 数据的信息。该结构是 CANopen 网络的基础,可确保存储所有相关数据并在需要时进行访问。

机器人控制与仿真应用 3690

Unity SteamVR利用案例实现人物位移

Unity SteamVR三步实现位移 一.地面移动 导入SteamVR 找到从Projict面板找到Assets-->SteamVR-->InteractionSystem-->Core-->Prefabs-->Player预制体,找到预制体Player 后添加到Hierarchy面板,该预制体主要用于射线功能的实现。 3.Assets-->SteamVR-->InteractionSystem-->Telepot-->Prefabs--&.

qq_36361484的博客 5756

AI上推荐 之 协同过滤

㐇

Miracle8070 1万+

Vue3 - 详解播放m3u8视频流+HLS拉流推流完整方案,vue3如何播放m3u8格式文件实时视频播放教程(流媒体播放、直播视频流、实时摄像头监控视频流对接、后端服务器切片分片传输视频流边下边播)

vue3组件播放m3u8格式视频,实现hls流媒体监控摄像头实时播放,vue3播放m3u8视频流格式,实时直播画面视频流播放,摄像头监控画面推流,hls.js,Vue Video.js播放m3u8视频流格式,实现hls流媒体监控摄像头实时播放,vue中使用video.js播放m3u8格式的视频,m3u8格式视频,通过HLS协议播放m3u8格式视频,黑屏不显示怎么办,视频非常卡加载缓慢,拉流报错,推流报错,播放失败,播放监控m3u8视频流格式,苹果ios播放,vue3中使用video标签播放MP4,西瓜视频插

🏆 前端领域优质创作者 5936

unity SteamVR TauchPad前后左右移动

可以参考VRTK示例场景017_CameraRig_TouchpadWalking

zhf934991950的博客 1641

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

【VRTK4.0运动专题】手柄控制物体移动和旋转

但由于AxesToAngle把轴数据转化为的角度,似乎是浮点数,不能直接用,需先借助“FloatToVector3”的DoTransform方法转成Vector3三维向量形式的角度数据,然后“FloatToVector3”脚本再去调用TransformEularAngleMutator脚本的DoSetProperty方法,从而实现AxesToAngle间接调用DoSetProperty方法的目的。预设体将两轴转化为位置向量或角度后,调用运动脚本的方法,对指定的物体进行移动或旋转。

weixin_42935398的博客 945

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【Unity VR开发】结合VRTK4.0:自身移动(滑动)

【Unity VR开发】结合VRTK4.0:自身移动(滑动)

LiKe11807的博客 1645

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

【Unity】虚拟现实 VRTK插件使用教程(六)VR UI (UGUI和VRTK的事件处理机制)

文章目录UI2D UI UI UI通常按类别分为三种,即2D UI、3D UI、模型UI。 2D UI:2D UI固定在屏幕上,不会跟着角色移动而移动。 3D UI:3D UI放在场景世界中,当相机移动到UI前面才能看到。 模型UI: 2D UI 要使用2D UI就要先创建一个画布Canvas,画布的渲染类型通常可以设置为: Screen Space - Overlay(2D) Screen Space - Camera(2D) World Space(3D) 在VR游戏中,如果想要2D UI,

一个普普通通的游戏开发者 7829

Unity+SteamVR开发——交互

一、前言 本文使用两个工具为Unity2018.4.26和SteamVR2.6.1,SteamVR2.6.1相比之前的版本有了很大的改变,其中在交互上有了很大的提升,SteamVR2.6.1上给出的案例中提供了抛射物体、线性驱动、环形驱动以及复杂的射箭操作等。尽管给出了诸多的交互案例,但是在实际开发中依然会有新的交互情况出现,在SteamVR2.6.1中没有详细的使用说明下,本文首先大概介绍其各种交互案例,然后详细的介绍其交互的核心组件如Interactable和Hand等,最后结合我使用的...

Just do IT 1万+

unity3D鼠标点击场景人物行走以及NGUI穿透问题

Unity3d 实现鼠标左键点击地形让角色移动到指定地点: if (Input.GetMouseButtonDown(0)) {     RaycastHit hit;     Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);     if (Physics.Raycast(ray, out hit) && ...

ww_xin的博客 668

Unity3D-VR人物瞬移、脚丫旋转判定、高光、开关灯、门、电视

using UnityEngine; using System.Collections; using System;public class Player : MonoBehaviour { public static Player instance;//静态公有字段 public Transform _rightHand;//右手位置 public SteamVR_Track

The Blog Of ShiJian 2226

【Unity3D日常开发】(三)实现角色移动行走之官方Demo移动代码分析

官方自带的资源包首先是下载地址5.0.0f4版本的官方自带资源包 http://pan.baidu.com/s/1o8Ujrxo 2017斑斑的官方自带资源包 http://pan.baidu.com/s/1ge3cUdX 有的就不用下载了,如果没有的话下载下载 ,放在 xx\Editor路径下面,重新打开Unity3d就有了导入 Assets->Standard Assets ->

优快云博客专家,Unity3D高级软件工程师,《Unity 3D从入门到实战》作者。 2万+

VRTK_InteractableObject脚本属性详解

Disable when Idle:勾选上后运行,默认VRTK_InteractableObject脚本是UnEnable状态,只有当手柄或者射线与其进行交互的时候,脚本才会变成Enable状态。(为了防止当前物体和其他物体进行交互) IsGrabbable:是否能够被抓取。 Hold Button To Grab:如果选中此项,则需要持续按住控制器上的抓取按钮以继续抓取。如果取消选中此选项,则抓取按钮会切换抓取操作,只需按一下按钮即可抓取,再按一下钮即可释放。 StayGrabbedOnT..

qq_37461425的博客 1806
上一篇: 链接数据库的方法
下一篇: Unity UGUI 中butto 的transition 的Animation 怎么用?
李本心明
博客等级 码龄10年 1837粉丝 83原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值