Bootstrap

【MR设备】燧光MR设备极简教程(开发篇)


官网说明文档:
https://doc.ximmerse.com/sdkconf/unityxrsdk/index.html
相关文章:燧光MR设备极简教程(使用篇)

一、环境准备

1、Unity环境准备

  1. 配置adb环境
    官网下载:https://developer.android.google.cn/studio/releases/platform-tools
    找到SDK Platform-Tools下载
    参照 此教程 配置adb环境变量
    在这里插入图片描述

  2. 新建满足版本需求的unity项目并勾选安装Android模块,目前已测支持版本为:2019.4、2020.3、2021.3

  3. 注意一些依赖使用默认值
    在这里插入图片描述

2、下载SDK

根据设备型号选择SDK,例如,Pro版本下载XR SDK。
官网SDK下载:
SDKhttps://developer.ximmerse.com/#/sdk?id=1
内容目录如下:
在这里插入图片描述

二、项目初始化

1、添加插件(选择目录下的package.json文件)

在这里插入图片描述

2、修改平台到Android

在这里插入图片描述

3、修改配置

  1. 在Edit->Project Settings->Player->Other Setting中勾选Compute skinning
    在这里插入图片描述

  2. 在Edit->Project Settings->Player->Other Setting中,将Active Input Handling 修改为Both,此操作需要重启项目后生效。
    在这里插入图片描述

  3. 重启项目后,点击菜单项Ximmerse XR SDK->Initialize XR SDK,对SDK进行初始化
    在这里插入图片描述

  4. 在Asset->XR->Loader里面选择Ximmerse XR Loader,按照如下图进行设置
    在这里插入图片描述

  5. 点击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);

            }

        }

    }
}
;