Unity | VRTK游戏的基础设计
HTCVIVE与设备连接
-
汇入SteamVR和VRTK
• 注意点选I made a back up/ Go ahead更新
• 对于汇入后报错需要跳转到 line 146: new Texture改为new Texture2D(0,0)
-
新建场景Pro1使用SteamVR/Prefabs/[CameraRig],同时删除主摄影机
-
给[CameraRig]/Controller(Left)/Model和[CameraRig]/Controller(Right)/Model分别添加BoxCollider(isTrigger=True,Size=(0,0,0)))和Rigibody(useGravity=false)
-
場景中加入Cube,添加BoxCollider(isTrigger=T,rigibody(useGravity=F) ,设置Cube.Tag=(new)Object
-
[CameraRig]/Controller(Left)/Model和[CameraRig]/Controller(Right)/Model添加SteamVRController.cs,将Controller(Left)和Controller(Right)拖入Trackobj槽中
实现手柄控制发射子弹功能
- 新建场景Pro2,使用SteamVR/Prefabs/[CameraRig],同时删除主摄影机
- 在[CameraRig]/Controller(Left)/Model或[CameraRig]/Controller(Right)/Model下建立Sphere. 設置Rigibody.UseGravity=F;SphereCollider.IsTrigger=F
- 给[CameraRig]/Controller(Left)/Model或[CameraRig]/Controller(Right)/Model添加SteamVRFire.cs。将Sphere拖入Bullet槽,Controller(Left)或Controller(Right)拖入Trackobj槽。
必备Game Object如下。Directional Light,Floor分别控制打光和场景的“地面”,这里不再作具体说明。

[VRTK_SDKManager]
為VR SDK提供支持。核心是SDKSetups,SDKSetupSwitcher將SDKSetups轉換為便於操作的GUI界面。
[VRTK_Scripts]
设定手柄等控制器与UGUI的交互。
这里只赋予右手把(RightController)交互功能,需要添加的Component如下。

VRTK_Controller Events

details
VRTK_Pointer
Provides a basis of being able to emit a pointer from a specified GameObject.

details
VRTK_Straight Pointer Renderer
A visual pointer representation of a straight beam with an optional cursor at the end.

details
記得更改設置
General Appearance Settings.Tracer Visibility = Always On;
General Appearance Settings.Cursor Visibility = Always On;
VRTK_UI Pointer
Provides the ability to interact with UICanvas elements and the contained Unity UI elements within.

details
記得更改設置
Activation.Activation Mode = Always On;
[Canvas]

- Canvas基礎設置
Canvas.RenderMode = WorldSpace;
- 添加VRTK_UI Canvas
- 綁定Menu.cs控制程式
- Button添加對應的OnClick()事件

[EventSystem]
- 新建保存一个Scene。
- 匯入[VRTK_SDKManager]預知
- 創建Empty Game Object作為Right Controller和Left Controller。
- 添加Canvas及其下的Button。
- 确保有EventSystem生成(若没有从Scene/[SDKSetupManager]/SDKSetupSwitcher/EventSystem 中复制粘贴一个EventSystem到Scene/EventSystem并勾选Inspector的小方框使之有效)。
- 設置Canvas模式為World Space,并添加VRTK_UIPointer元件。
- 编写menu.cs程式,并将之绑定在Canvas上,然后为Button增添Click事件。
- 給Scene/LeftController添加VRTK_Controller Events。
- 給Scene/RighttController添加
- VRTK_Controller Events
- VRTK_UI Pointer:
.ActivationMode = Always On;
- VRTK_Controller UI Pointer Events_Listener Example
- VRTK_Pointer
- VRTK_Straight Pointer Renderer:
.TracerVisibility = Always On;
.CursorVisibility = Always On;
- 在build setting中增添设计的场景并编译
- 运行(调整button位置)。
加入VRTK的遊戲製作:模擬水果忍者
在Menu场景的基础上修改:

[VRTK_Scripts]不变,需要修改[VRTK_SDKManager],把游戏结构加入到其中,即可:

修改Canvas
- 删除Button元件
- 去掉VRTK_UIPointer元件和menu.cs(用不上了)
- 设置Canvas模式為Screen Space (Camera)
- 在Canvas下添加三个Text,分别管理Score,Time和GAME OVER文字显示
- 将Canvas拖至[VRTK_SDKManager]/SDKSetups/SteamVR/[CameraRig]/Camera(head)下

设置Controller
- 制作左右手的武器(从asset找或用cube替代皆可)
- 分别添加带Trigger的Box Collider和不带Gravity的Rigibody
- 将武器分别拖至[VRTK_SDKManager]/SDKSetups/SteamVR/[CameraRig]/Controller(Left)和[VRTK_SDKManager]/SDKSetups/SteamVR/[CameraRig]/Controller(Right)下

制作游戏
- 创建Empty Object命名为GM,并赋其GM.cs
- 将Canvas中的Text拖至GM设定中的对应槽中,随便设置一个游戏时间(30s为例)

- 制作产出位置:新建Empty Object命名为Game拖至Position,在该空物件下再新建空物件若干,分别调节各个空物件位置(空物件所处位置即为产出位置)。

Note:可用Select Icon与其它游戏物件作区分
- 将GamePosition拖至[VRTK_SDKManager]/SDKSetups/SteamVR下
- 指定GM中的产出位置数目,将GamePosition中的空物件拖至生成的对应槽中。

- 制作产出物件之水果:从3D农产品中拖出几种水果,设置Tag=Food;添加带Trigger的Sphere Collider和带Gravity的Rigibody;同时赋其Object.cs;给水果的子物件分别添加不带Trigger的Sphere Collider;完成后将物件制成Prefab保存后从场景中删除。
Note: 水果的各个Collider尤其要注意范围设置适当。
- 制作产出物件之炸弹:从3D Weapon中拖出几种炸弹,设置Tag=NotFood;添加带Trigger的Sphere Collider和带Gravity的Rigibody;同时赋其Object.cs;完成后将物件制成Prefab保存后从场景中删除。
-
指定GM中的产出物件数目,将制作的产出物件预制物拖至生成的对应槽中。

-
完善特效预制:从Prefab中拖出效果预知,分别赋予DestroyObject.cs并指定效果持续时间(假设为2s)后保存修改。
- 添加武器劈砍产出物件的效果:给之前制作的左右手武器赋予HitObject.cs,指定效果槽数为2,Element0放置刀影效果,Element1放置爆炸效果。
测试
- 将任一武器拖至Scene下后运行游戏(Simulator模式下)通过拖动武器检验游戏进行中的水果炸弹生成上抛,武器劈砍,水果切开,炸弹爆炸等效果。
- 暂停游戏后开启SteamVR关闭Simulator后继续进行游戏,观察游戏界面分数与时间的显示,以及游戏结束后“Game Over”字体的显示。
参考设置图片














