给PSVR做开发Part1-设备的输入

有幸接触到了PS4的开发…然而…

我是软粉。

环境

  • 安装合适版本的Unity
  • 安装相应版本的UnitySetup-Playstation-4-Support-for-Editor
  • 下载各类Unity使用的PS4 Plugins(包括PSVR)

以上都可以从scedev的Unity论坛找到。

打开一个项目

  • File-Build Settings-Switch Platform将项目切换到PS4
  • Edit-Project Settings-Player-Virtual Readlity Supported-添加PlayStation VR
  • 导入[PS4 Samples]PlayStationVR.unitypackage

设置头显追踪

  • 设置Main Camera的Target Eye为Both
    至此已经可以实现头显的追踪。

DualShock4/Move Controller等设备的输入

位置追踪

  • 新建空物体-添加TrackedPlayStationDevices组件
    其实更推荐把示例里已经配置好的组件抠出来用。

  • 组件设置
    Trackable Devices : 选择需要追踪的设备类型
    Transform : 追踪物体
    Light Renderer : 发亮部位
    Tracking Type : Absolute 绝对/Relative 相对
    Tracker Usage Type : Default 默认/Optimized For Hmd User 对头显玩家优化

DualShock4的按键

安装了PS4的平台的Editor插件之后(UnitySetup-Playstation-4-Support-for-Editor),在Unity编辑器中会出现Help-Unity Manual PS4Player,就是PS4的文档。里面有具体的DualShcok4的按键输入说明。
DualShock4是兼容Unity自己的Input系统的。

Move控制器的按键

对于Move的按键输入则在文档中没找到,以下是查询论坛后找到的方法:

首先引入PS4的名字空间

1
2
using UnityEngine.PS4;
using UnityEngine.PS4.VR;

然后在Update中编写…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[SerializeField]
bool isSecondaryController;

void Update()
{

int moveIndex = !isSecondaryController ? 0 : 1;
var activeButtons = PS4Input.MoveGetButtons(0, moveIndex);
//扳机
bool triggerHolding = (activeButtons & (int)Buttons.Trigger) != 0;
//叉
bool crossHolding = (activeButtons & (int)Buttons.Cross) != 0;
//圈
bool circleHolding = (activeButtons & (int)Buttons.Circle) != 0;
//三角
bool triangleHolding = (activeButtons & (int)Buttons.Triangle) != 0;
//方块
bool squareHolding = (activeButtons & (int)Buttons.Square) != 0;
//...
}