一:开发环境搭建。
1:新建unity 3D工程。
2:官网下载SDK。
https://developer-global.pico-interactive.com/
![](https://img-blog.csdnimg.cn/img_convert/4c97b1609861af59066af0b0b2918803.png)
官方推荐用第一个。Pico Unity Integration SDK。
文档:
https://developer-cn.pico-interactive.com/document/unity/chapter-overview/
3:unity导入下载的离线包。
![](https://img-blog.csdnimg.cn/img_convert/e399bb08075a9d9ed646a4f62e431c5c.png)
4:模型下载。
需要翻墙,快一些。
5:到这一步直接运行,有摄像机画面,但不会随头部运动而动。
![](https://img-blog.csdnimg.cn/img_convert/283957ebb24154896b8d6f900e30acaf.png)
真机调试,选择此处。
![](https://img-blog.csdnimg.cn/img_convert/b171871ba4d4aa6a58dc50270b2800b3.png)
到这一步直接运行,头部会跟随运动,无手柄显示,只有一根红线。
![](https://img-blog.csdnimg.cn/img_convert/b305feb0525a641d4cf0c803eba51148.png)
![](https://img-blog.csdnimg.cn/img_convert/9ec5002ad3e32e10a688213624ee97ac.png)
此两处点yes。 go ahead。
![](https://img-blog.csdnimg.cn/img_convert/cf9cad4aea9f4069efd08e17fef8350f.png)
6:到这一步直接运行,手柄会动,但没预制体。
添加手柄跟随运动。
![](https://img-blog.csdnimg.cn/img_convert/3084a50bbac3425ef4e609f309a5e927.png)
![](https://img-blog.csdnimg.cn/img_convert/2908ae4d19ab4d12b97e760291128fed.png)
添加手柄预制体。
![](https://img-blog.csdnimg.cn/img_convert/6f47203405f55702e29292cf3891d4d3.png)
7:将XR Origin高度设置为0,符合人眼角度。
二:实时监控数据工具。
![](https://img-blog.csdnimg.cn/img_convert/02d9b0c1556e0ace96f4818a01eecd5a.png)
直接下载,然后拷贝进PICO监测。
(已有新得办法。)
![](https://img-blog.csdnimg.cn/img_convert/92424db0f96e94f7a9d87a41327ebf2e.png)
三:实时预览工具。Pico和电脑端Unity同画面。
1:将安装包拷贝进Pico安装。
2:运行PC端预览工具。
![](https://img-blog.csdnimg.cn/img_convert/e2f5b041df17f7d5106d9d39b7ac98fa.png)
![](https://img-blog.csdnimg.cn/img_convert/0d9ff92f83f935c2cfd670b8b30d4866.png)
![](https://img-blog.csdnimg.cn/img_convert/45f4ae8ae6e8a6b54acae33d63cd988d.png)
(已有新得办法。)
![](https://img-blog.csdnimg.cn/img_convert/92424db0f96e94f7a9d87a41327ebf2e.png)
四:更改手握激光棒颜色
![](https://img-blog.csdnimg.cn/img_convert/7ca8fb8d1732a6de526cc76bf113f452.png)
![](https://img-blog.csdnimg.cn/img_convert/4f2ce171387e0bd994162b6b29482540.png)
五:传送。
1:地面添加Teleportation。
![](https://img-blog.csdnimg.cn/img_convert/e4f3bff8e7ab0ef53ab71f42b009c97f.png)
2:XR Origin添加Teleportation Provider和Locomotion System(添加后适应地形组件,不容易倒掉),并将自身添加进去。
![](https://img-blog.csdnimg.cn/img_convert/1368f54e1e8a287b008fe61983bb55d5.png)
3:将XR Origin赋值给地面的提供者。
![](https://img-blog.csdnimg.cn/img_convert/14cb22fbea39f043969bc278e9b43d05.png)
4:默认为侧键传送。
六:更改传送确认键。
![](https://img-blog.csdnimg.cn/img_convert/b7e6cbc1ff773b0b63d4c4652171a606.png)
![](https://img-blog.csdnimg.cn/img_convert/8e62ea7ce26773b4fb2d0e1979b51b89.png)
![](https://img-blog.csdnimg.cn/img_convert/8fc9202f1cae231f4a7cbea3d4f5c736.png)
七:锚点传送。
![](https://img-blog.csdnimg.cn/img_convert/902d81b92ce51fb16d8d99d46c1b8abf.png)
一:新建地面。
二:添加锚点组件。
![](https://img-blog.csdnimg.cn/img_convert/71f6d812044288cdff0f87d0d9c7e6f3.png)
三:将头显加入组件。
![](https://img-blog.csdnimg.cn/img_convert/f7a15267c396087797ccbd43819be039.png)
四:更改传送描点位置。
1:在地面下添加正方体。
2:将正方体赋值给锚点位置。
![](https://img-blog.csdnimg.cn/img_convert/7ada7bef00f0be68dc879f5ff2aa7af3.png)
![](https://img-blog.csdnimg.cn/img_convert/acfb4c3ec17be214e14018ae3bf7a889.png)
正方体显示的话,可以将正方体隐藏。
八:左扳手方向键控制物体移动。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR; //引入XR命名空间
public class ControlObject : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
//移动偏移量 定义二维向量。
Vector2 vec2DAxis = Vector2.zero;
//获取左手柄的值,赋值给上面定义的变量。
InputDevices.GetDeviceAtXRNode(XRNode.LeftHand).TryGetFeatureValue(CommonUsages.primary2DAxis,out vec2DAxis);
transform.position = new Vector3(transform.position.x + vec2DAxis.x * Time.deltaTime, transform.position.y,transform.position.z + vec2DAxis.y * Time.deltaTime);
}
}
![](https://img-blog.csdnimg.cn/img_convert/d73a3fd2879353954cdac7bc803cf7f1.png)
放在自身,则为自身移动。
九:物体加入动力学。
添加Rigidbody。
![](https://img-blog.csdnimg.cn/img_convert/be55dbd2eb920bed8f5f340bf1433f1a.png)
十:检测按键。
![](https://img-blog.csdnimg.cn/img_convert/785c2ddf719341f72639ce5b603ca7a6.png)
using System.Collections;
using System.Collections.Generic;
using UnityEditor.TextCore.Text;
using UnityEngine;
using UnityEngine.XR; //引入XR命名空间
public class ControlObject : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
//移动偏移量
Vector2 vec2DAxis = Vector2.zero;
//不同按键
bool isGrip = false; //握手按键(中指)
bool isTrigger = false; //扳手按键(食指)
bool isMenu = false; //菜单按键
bool isPrimaryButton = false; //手柄主键
bool isSecondaryButton = false; //手柄副键
InputDevices.GetDeviceAtXRNode(XRNode.LeftHand).TryGetFeatureValue(CommonUsages.primary2DAxis,out vec2DAxis);
transform.position = new Vector3(transform.position.x + vec2DAxis.x * Time.deltaTime, transform.position.y,transform.position.z + vec2DAxis.y * Time.deltaTime);
InputDevices.GetDeviceAtXRNode(XRNode.RightHand).TryGetFeatureValue(CommonUsages.gripButton, out isGrip);
if(isGrip)
{
this.gameObject.GetComponent<MeshRenderer>().material.color = Color.green;
}
InputDevices.GetDeviceAtXRNode(XRNode.RightHand).TryGetFeatureValue(CommonUsages.triggerButton, out isTrigger);
if (isTrigger)
{
this.gameObject.GetComponent<MeshRenderer>().material.color = Color.red;
}
InputDevices.GetDeviceAtXRNode(XRNode.RightHand).TryGetFeatureValue(CommonUsages.menuButton, out isMenu);
if (isMenu)
{
this.gameObject.GetComponent<MeshRenderer>().material.color = Color.yellow;
}
InputDevices.GetDeviceAtXRNode(XRNode.RightHand).TryGetFeatureValue(CommonUsages.primaryButton, out isPrimaryButton);
if (isPrimaryButton)
{
this.gameObject.GetComponent<MeshRenderer>().material.color = Color.blue;
}
InputDevices.GetDeviceAtXRNode(XRNode.RightHand).TryGetFeatureValue(CommonUsages.secondaryButton, out isPrimaryButton);
if (isSecondaryButton)
{
this.gameObject.GetComponent<MeshRenderer>().material.color = Color.white;
}
}
}
十一:VR版UI界面
1:添加XR组件,UI Canvas。别的和UI一样。
![](https://img-blog.csdnimg.cn/img_convert/962b5f75127d7b6c33a87b73d6a26758.png)
2:添加组件后,要保证Width和Height足够大,而去缩小Scale。不然会糊。
![](https://img-blog.csdnimg.cn/img_convert/d02abf051ce452d2c77d5047ccc836ab.png)
**Pico UE开发打包。
1:
打包教程:
https://www.bilibili.com/video/BV1bg411p7mT/?vd_source=dd4795916fd6c08bb59ae5fea830857f
**十一:PICO预览UE工程
1:安装SteamVR。
2:安装pico游戏串流助手
![](https://img-blog.csdnimg.cn/img_convert/c46ddbb50aa4c6a19d6b1e44c714ba58.png)
![](https://img-blog.csdnimg.cn/img_convert/f92f2c5e2683f62c716493e1217b38f4.png)
![](https://img-blog.csdnimg.cn/img_convert/f178e87bd0430c06879d9dd0d96c4a18.png)
![](https://img-blog.csdnimg.cn/img_convert/41536f0c1ffb17c671a0a09e93355e00.png)
pico端游戏串流助手是自带的。
3:pico端启动游戏串流助手,连接
4:UE安装steamVR插件,运行。
教程
一:【杨同学 PICO 应用开发】用 PICO 实现类似于贝壳找房的 “VR 看房” 功能;附带有详细的 Unity 操作步骤
1:链接
2:截图
![](https://img-blog.csdnimg.cn/img_convert/1740385807c51e79dfa6f3ef17f8859d.png)
二:PICO 4 实用VR开发指南 - 5分钟从零开始打造 VR 街景
1:链接
2:截图
![](https://img-blog.csdnimg.cn/img_convert/3c4b86d0565f31ab1da24534494a32f8.png)
三:教程 元宇宙PicoNeo3开发初探
1:链接
2:截图
![](https://img-blog.csdnimg.cn/img_convert/a0d9dfcc2ffdb8eb5fa7f62efd74c9ba.png)