燧光MR设备极简教程(开发篇)
官网说明文档:
https://doc.ximmerse.com/sdkconf/unityxrsdk/index.html
相关文章:燧光MR设备极简教程(使用篇)
一、环境准备
1、Unity环境准备
-
配置adb环境
官网下载:https://developer.android.google.cn/studio/releases/platform-tools
找到SDK Platform-Tools下载
参照 此教程 配置adb环境变量
-
新建满足版本需求的unity项目并勾选安装Android模块,目前已测支持版本为:2019.4、2020.3、2021.3
-
注意一些依赖使用默认值
2、下载SDK
根据设备型号选择SDK,例如,Pro版本下载XR SDK。
官网SDK下载:
SDKhttps://developer.ximmerse.com/#/sdk?id=1
内容目录如下:
二、项目初始化
1、添加插件(选择目录下的package.json文件)
2、修改平台到Android
3、修改配置
-
在Edit->Project Settings->Player->Other Setting中勾选Compute skinning
-
在Edit->Project Settings->Player->Other Setting中,将Active Input Handling 修改为Both,此操作需要重启项目后生效。
-
重启项目后,点击菜单项Ximmerse XR SDK->Initialize XR SDK,对SDK进行初始化
-
在Asset->XR->Loader里面选择Ximmerse XR Loader,按照如下图进行设置
-
点击Edit->Player Settings ->XR Plug-in Management,勾选 Ximmerse XR Plugin 。
**4、检查Java依赖
设置26以上安卓版本,否则会报API过时。
使用默认java依赖包路径。
如果系统内多个Java版本存在缓存导致编译报错,可以考虑换个编译路径,或者把原来的gradle文件,还有android文件删除
三、加载示例项目
1、展开插件的sample,勾选载入Hello Unity示例项目。
2、选中示例场景,补充资源包
3、导入支持插件
输入com.unity.xr.interaction.toolkit 导入starter assets插件
4、分别挂载左右手柄模型
5、插入设备进行调试
四、交互开发
1、示例关卡的默认交互
在示例项目中,
左手控制红色线的移动,
右手控制视角转动,
扣动扳机键类似于单击鼠标,可以进行UI或抓取对象或切换相机视角
2、扣动扳机键抓取对象到虚拟手柄上
将小球上的交互脚本控件复制到需要实现抓取交互的对象上。
添加碰撞
3、移动指针到对象上时切换显示对应文字
写一个切换文字的脚本挂在任意对象上。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Showtip : MonoBehaviour
{
public Text txtObj;
// Start is called before the first frame update
public void changeTxt(string name)
{
txtObj.text = name;
}
}
绑定事件到对象上,并写上需要展示的文字。
4、按钮切换UI显示隐藏
参考官方文档:
下载官网示例代码
改造实现按钮切换UI显示隐藏:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.XR;
using UnityEngine.UI;
public class Btncontrol : MonoBehaviour
{
public GameObject triggerForceUI;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
//列出所有输入设备,根据XR节点获取输入设备,必须先获取到输入设备,再获取对应输入设备的输入键值
var rightDevice = new List<InputDevice>();
var leftdevice = new List<InputDevice>();
bool menuValue, gripValue, triggerValue, primaryValue, secondaryValue, menuValueleft;
float triggerForce;
Vector2 joystick;
InputDevices.GetDevicesAtXRNode(XRNode.RightHand, rightDevice);
InputDevices.GetDevicesAtXRNode(XRNode.LeftHand, leftdevice);
if (rightDevice.Count != 0 && leftdevice.Count != 0)
{
InputDevice rightcontroller = rightDevice[0];
InputDevice leftcontroller = leftdevice[0];
//按下左手柄Trigger按键后 折叠UI
if (leftcontroller.TryGetFeatureValue(CommonUsages.triggerButton, out triggerValue) && triggerValue)
{
triggerForceUI.SetActive(!triggerForceUI.activeInHierarchy);
}
}
}
}