首页 > 其他分享 >燧光Rhino-X+Unity开发笔记

燧光Rhino-X+Unity开发笔记

时间:2023-08-18 16:47:31浏览次数:50  
标签:Right Log button Controller Rhino Unity OnRightController Debug 燧光

一.前言

  该文档的目的是记录开发过程中使用的燧光RhinoX眼镜和Unity引擎和所遇到的问题及解决方式。

二.相关文档

1.PhinoX-Unity开发文档
2.官网设备介绍

三.开发环境

1.Unity2020.3.47
2.Rhino-For-Unity-2020 Plugin

四.问题列表

1.RhinoX设备基本参数如下:
image
  操作系统为Android 7.1,头显和控制器为6DOF。其中,6GB的运存无法支撑大场景或复杂场景的加载和渲染,需要提前在这里预留余量。
2.Unity-apk打包
image
  在ProjectSetting-Player中,将Minimum API Level设置为7.1以满足RhinoX要求,Target Architectures设置为ARMv7
  其次,Android打包所涉及的SDK、JDK及NDK,最好是在UnityHUB中联同目标引擎一同下载,既方便,又省心,不然很容易出现丢库、版本问题等。
3.Unity Editor Debugger调试功能
  该功能目前还是很不完善,测试过程中卡顿严重,基本上无法达到调试目的。
4.调试方式
  需要注意的是,RhinoX在连接PC机的时候,是无法连接手柄的,所以很多需要交互的触发只能放在头盔上的ok按键去完成,这点还是很不方便的。
  当然你也可以在安装好apk后不连接PC机去测试,但是那样看日志输出又麻烦了些~
image
5.第三视角展示
  很多项目中为了向除操作用户外的其他用户展示MR程序运行中的效果,就需要参考官网文档第三视角展示功能,Phinox是不支持类似串流的功能,无法直接通过类似视频线的方式进行数据输出。
6.Beacon
  Beacon是起到定位虚拟场景的原点位置的作用,但在笔者的开发过程中使用Beacon始终无法精准的定位位置信息和高度,怀疑可能是环境光线较强,头盔摄像头无法很好的捕捉到Beacon的位置。
  这里只能后续在交付场地再完善,这也提醒大家MR设备对使用环境有一定要求。
7.输入监听

点击查看代码
    /// <summary>
    /// 检测右手控制器
    /// </summary>
    private void CheckRightController()
    {
        if (RXInput.IsButton(RhinoXButton.ControllerTrigger, ControllerIndex.Controller_Right_Controller))
        {
            Debug.Log("User is pressing button : trigger"); //用户一直按着右手控制器的trigger按键,每帧触发。
            OnRightController_TriggerHold?.Invoke();
        }

        if (RXInput.IsButtonTap(RhinoXButton.ControllerTrigger, ControllerIndex.Controller_Right_Controller))
        {
            Debug.Log("User clicks button : trigger"); //用户点击右手控制器的trigger按键, 只会在点击的时候触发一次。
            OnRightController_TriggerPress?.Invoke();
        }

        if (RXInput.IsButtonLongHeldDown(RhinoXButton.ControllerTrigger, ControllerIndex.Controller_Right_Controller))
        {
            Debug.Log("User long hold button : trigger");  //用户长按右手控制器的trigger按键, 只会在松开按键之前触发一次。长按时间配置见 ProjectSetting/RhinoX Setting
            OnRightController_TriggerHoldOver?.Invoke();
        }

        if (RXInput.IsButtonTap(RhinoXButton.App, ControllerIndex.Controller_Right_Controller))
        {
            Debug.Log("User is pressing button : APP"); //用户点击菜单键
            OnRightController_AppPress?.Invoke();
        }

        if (RXInput.IsButtonTap(RhinoXButton.ControllerTouchPadButton, ControllerIndex.Controller_Right_Controller))
        {
            Debug.Log("User is pressing button : TouchPad"); //用户点击圆盘
            OnRightController_TouchPadPress?.Invoke();
        }

        m_TouchPadHoverDirection = TouchPadButtonDirection.Center;  //用户触摸圆盘
        bool ret = RXInput.GetTouchPadPointer(ref m_TouchPadHoverDirection, ControllerIndex.Controller_Right_Controller);
        if (ret) Debug.Log("User is Hover button : TouchPad");
        OnRightController_TouchPadHover?.Invoke((RhinoxTouchPadButtonDirection)m_TouchPadHoverDirection, ret);

        if (RXInput.IsTouchPadButtonDoubleTap(TouchPadButtonDirection.Bottom, ControllerIndex.Controller_Right_Controller))
        {
            Debug.Log("User is pressing button : TouchPad DoublePress"); //用户双击圆盘
            OnRightController_TouchPadDoublePress?.Invoke();
        }

        ret = RXInput.IsTouchPadButton(TouchPadButtonDirection.Bottom, ControllerIndex.Controller_Right_Controller);
        if (ret) Debug.Log("User is pressing button : TouchPad Hold"); //用户按住圆盘
        OnRightController_TouchPadHold?.Invoke(ret);
    }

8.ARCameraRig及RxEventSystem相关组件
  保证最终的场景中只有一套相关组件,尤其是资源和程序主体拆分分别打包的时候,一定需要注意,否则程序会直接崩溃。
9.Android mmap failed errno 12 out of memory错误
image
image

10.性能问题
  MR项目的开发对于美术资源还是有一定的要求,无论是贴图精度还是光影,都需要进行打磨才能保证交互的流畅度,具体操作参考官方性能优化建议
image

五.其他

1.RhinoX为国产MR设备,对于一些敏感类项目可以作为优先选择对象。
2.个人而言,PhinoX使用效果上还是有进步空间的,效果上和之前接触过的影创ActionOne相近(PS:刚发现影创好像解散了...),哪怕在室内空间,光线较强或颜色单一,就可能会出现画面闪烁的问题。

标签:Right,Log,button,Controller,Rhino,Unity,OnRightController,Debug,燧光
From: https://www.cnblogs.com/Castle2048/p/17640582.html

相关文章

  • Lnton羚通关于安装 Visual Studio 2022 Community 卡住了&& 安装 Windows SDK(Softwar
    【问题原因】a.系统升级了;b.之前卸载没卸载干净,注册表里存在旧的信息;【解决过程】1.查看日志在资源管理器中输入%TEMP%\windowssdk,查看日志文件,找到最新的日志文件,在文件中搜索Warning出现了一组长串数字,用 {} 括起来的一串,这串数字后面要用;2.微软官方工具微软官方的工具(Micr......
  • IntelliJ IDEA Community 社区版 Tomcat 插件
    1.安装PolarisTomcatServer点击Files->Settings->Plugins,在IntellijIDEA的插件市场搜索并安装PolarisTomcatServ 2.下载或添加tomcatserver点击Files->Settings->PolarisTomcatServer->点击下载按钮下载TomcatServer或者点击添加按钮添加已下载的To......
  • Unity生命周期方法
    详解Awake:当场景开始时(简单理解成游戏启动),若物体处于激活状态(active)会被立即执行,仅执行一次。OnEnable:接在Awake之后,且需要激活状态下,被执行,当物体每一次被激活时都会执行一次。Reset:编辑器模式下,当脚本第一次被挂载,或是执行Reset操作时会被执行。Start:早于所用的Update,在第一......
  • unity中EulerAngles 和rotation的区别和联系
    unity中EulerAngles和rotation的区别和联系在Unity中,EulerAngles(欧拉角)和rotation(旋转)是用来表示游戏对象的旋转属性的两种方式。它们之间有一些区别和联系。表示方式:EulerAngles:欧拉角以角度的形式表示旋转,使用三个浮点数(X、Y、Z)来表示绕每个轴的旋转角度。rotation:旋转以四......
  • Unity 自定义路径漫游-车辆 技术解析
    如第一张图所示,可以看到蓝线就是自定义的路径,车辆和飞机会沿自定义路径漫游,这对于动画技术来讲是一个基本的也是非常受欢迎博得眼球的技术,我需要记录一下这个技术的实现1.首先选择一个移动的物体,给它的inspector挂上脚本CarPath(Script)代码比较长,没有时间过度解读他,我说明怎......
  • unity文件下载HttpWebRequest
    ///<summary>///下载进度///</summary>publicfloatProgress{get;privateset;}///<summary>///下载状态///</summary>publicintStatus{get;privateset;}///&......
  • Unity之如何计算实时帧率
    代码如下:usingSystem;usingSystem.Collections;usingSystem.Collections.Generic;usingUnityEngine;publicclassCalcFPSTool:MonoBehaviour{privatefloatm_UpdateInterval,m_FPS;floatUpdateInterval{set=>m_UpdateInterval=Mathf.Cla......
  • Unity 编辑器资源导入处理函数 OnPreprocessTexture:深入解析与实用案例
    Unity编辑器资源导入处理函数OnPreprocessTexture用法点击封面跳转下载页面简介在Unity中,我们可以使用编辑器资源导入处理函数(OnPreprocessTexture)来自定义处理纹理资源的导入过程。这个函数是继承自AssetPostprocessor类的,通过重写这个函数,我们可以在纹理资源导入之前......
  • Unity学习笔记------------------unity快捷键
    Unity常用快捷键Q平移场景视图W移动E旋转R缩放FF场景视图聚焦选定物体Z以轴点/中心旋转X全局坐标/局部坐标Ctrl/Cmd+P播放或停止Ctrl/Cmd+Shift+P暂停或恢复Ctrl/Cmd+Shift+B打开BulidSetting窗口Ctrl/Cmd+B发布并运行Ctrl/Cmd+Shift+......
  • Unity相关学习
    实现C#委托/事件声明的委托与时间&通知者执行的方法参数类型要匹配参数声明要继承EventArgsusingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespaceConsoleApplication1{//声明一个委托publicdelegatevoidTimeEventHandler(objecto......