🔥刘国柱Pico核心开发🔥

🔥刘国柱Pico核心开发🔥

🎮

PicoNeo3手柄按键

FireShot Capture 003 - 5 硬件产品开发指南 — PicoVR Unity SDK 0.1 文档 - static.appstore.picovr.com.png

摇杆是二维向量⭐
(CommonUsages.primary2DAxis)

侧键、扳机键、菜单键、主副按键 都是bool类型

  1. (CommonUsages.gripButton)
  2. (CommonUsages.triggerButton)
  3. (CommonUsages.menuButton)
  4. (CommonUsages.primaryButton)
  5. (CommonUsages.secondaryButton)

改按键

头显下的左右手 的XR Controller组件 中的select action属性 双击 reference 在弹出窗口
同时修改select & select Value

修改射线颜色

颜色渐变的顺序是 从左到右👉🎮从近到远(组件在头显下的左右手柄内)
vaild 代表有效 invaild 代表无效射线

⭐基础传送

是最基本的移动方式,但是类似于瞬移

  1. 地面 添加 teleportation area 组件
  2. 给头显添加 teleportation provider 和 Locomotion system
  3. Hierarchy内の头显拖进头显inspector下的locomotionXR Origin
  4. 然后把Hierarchy内の头显 拖进 头显inspector下的teleportation providersystem
  5. 再回到地面 把 头显 拖进teleportation area 组件的 teleportation provider 变量里

⭐锚点传送

给另一个地面添加一个teleportation anchor组件
其中它的teleportation provider赋值为头显(XR Origin)
锚点的位置由teleportation transform 一般把一个游戏物体扔进去就得到了那个三维位置

⭐按键移动

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR;

public class Controller : MonoBehaviour
{
void Update()
{
Vector2 vec2DAxis = Vector2.zero;
//0,0,0


InputDevices.GetDeviceAtXRNode(XRNode.LeftHand).
TryGetFeatureValue(CommonUsages.primary2DAxis, out vec2DAxis);
//InputDevices开头👉获取左手摇杆按钮的偏移量值,并赋值给vec2DAxis

transform.position = new Vector3(transform.position.x + vec2DAxis * Time.deltaTime, transform.position.y,
transform.position.z + vec2DAxis * Time.deltaTime);
//z其实对应了纵轴的移动
}
}

UI

创建一个canvas,请留意这个UI canvas是XR内的
会生成一个event system,通常是可以作为canvas的子节点,然后给canvas创建一个普通的panel
修改panel的尺寸,颜色,可以加一些文字、按钮(拖动条是slider)
文字的锐利程度取决于canvas scaler的Dynamic pixel per unit 和 reference pixels per unity 前者是作用于文字,后者作用于精灵,前者越大越清晰,后者越小越清晰,精灵就是图片啊 等等


射线回调

回调函数 在某些情况下 自动被调用的函数 就叫回调函数

点击事件 触发事件
是需要把组件放到 被交互的物体上,假如我想坐在椅子上,我应该给椅子添加此组件
grab是添加一个抓取效果,但有时我们只是想触发一些自己的事件,这个时候就需要simple组件,它只是简单的做回调

simple支持的动作
Snipaste_2022-09-09_11-09-18.png


更换材料

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR.Interaction.Toolkit;

public class SimpleInteractorController : MonoBehaviour
{
public GameObject ball;
public Material blue, yellow, grey;
public void onSelected(XRBaseInteractor interactor) { }
public void onDeSelected(XRBaseInteractor interactor) { }
public void onHoverEnter(XRBaseInteractor interactor)
{
ball.GetComponent<MeshRenderer>().material = blue;

}
public void onHoverExit(XRBaseInteractor interactor) { }
public void onActivated(XRBaseInteractor interactor) { }
public void onDeActivated(XRBaseInteractor interactor) { }
}
//其实很好理解,获取一个物体的组件の网格渲染器の材料 ,并将它设置为blue

注⭐:写完代码,挂载上脚本,然后在simple组件内选择刚刚写好的触发的对应方法 它才会生效
Snipaste_2022-09-18_20-40-31.png

作者

发布于

2022-09-18

更新于

2023-01-10

许可协议