Unity中自动识别串口以及热拔插

2023-10-31

最近需要在Unity中实现自动识别热拔插并识别串口的功能,实在没有找到原生的消息响应,折腾了一周,尝试了多种方法,总结一下主要有3种实现思路。

1.利用Form类中的消息进行串口拔插消息的接收。

2.实时保存串口信息到外部文件,进行判别。

3.读取注册表中的信息进行判别。

首先说一下在Unity中对串口的支持并不是很好,串口识别部分见下面的连接,这里主要讲述如何获取串口拔插的消息,并进行响应。https://blog.csdn.net/zhoudapeng01/article/details/90296515

方法一,利用Form类中的消息进行串口拔插消息的接收,借鉴了文章http://www.cnblogs.com/virusswb/archive/2008/08/22/1274085.html

最终失败。主要原因是因为Unity执行结束后会导致崩溃,APPCrash。添加了一个空物体,挂载消息控制,代码如下。

https://download.csdn.net/download/zhoudapeng01/11185452

方法二,实时保存串口信息到外部文件,进行判别。主要思路是利用一个外部的exe每隔一个小的时间间隔,保存串口信息到外部文件,Unity3d中每次刷新的时候读取文件,通过比较串口的变化,进行判别,这里使用json作为文件格式。

保存json的代码:https://download.csdn.net/download/zhoudapeng01/11185507

Unity中调用外部exe:

try
        {
            //Process.Start("GetPortName.exe");
            myprocess = new Process();
            ProcessStartInfo startInfo = new ProcessStartInfo("F:GetPortState.exe");
            myprocess.StartInfo = startInfo;
            myprocess.StartInfo.WorkingDirectory = "F:\\ZZB-Unity\\GetPortName\\GetPortName\\GetPortName\\bin\\Release\\GetPortState";
            myprocess.StartInfo.UseShellExecute = false;
            myprocess.StartInfo.RedirectStandardOutput = true;
            myprocess.Start();                       
        }
        catch (Exception ex)
        {
            UnityEngine.Debug.Log("出错原因:" + ex.Message);
            
        }

 

方法三,读取注册表中的信息进行判别,使用过程中存在一些问题,有些时候串口已经拔出但是注册表中的信息并没有改变。虽然存在一些问题,综合考虑使用了这种方法。保存注册表中的信息到list中,在刷新的时候检查list是否有变动(可以检查元素个数)通过这种方式判断拔插,结合上一篇博客中根据串口名称读取串口号,就可以实时打开和关闭串口。


    private void GetPortFromReg(List<string> portReg)
    {
        portReg.Clear();
        RegistryKey keyCom = Registry.LocalMachine.OpenSubKey("Hardware\\DeviceMap\\SerialComm");
        if (keyCom != null)
        {
            string[] sSubKeys = keyCom.GetValueNames();
            foreach (string sName in sSubKeys)
            {
                string sValue = (string)keyCom.GetValue(sName);
                portReg.Add(sValue);
            }
        }
    }

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity中自动识别串口以及热拔插 的相关文章

  • halfShader 模型切割

    Shader Unlit halfShader Properties Diffuse Diffuse Color 1 1 1 1 MainTex Texture 2D white StartCutoff StartCutoff Range
  • UnityLuaMvvM Lua 带通知的Mode类

    实现数据更新UI自动刷新的核心代码 欢迎关注https gitee com xiongks UnityMVVM mode function modeType local obj obj modeType modeType obj filds
  • Unity3D之Rigidbody

    目录 常用的Rigidbody属性和方法 rigidbody AddForce rigidbody AddTorque rigidbody velocity rigidbody angularVelocity rigidbody Sleep
  • 【Unity Shader】屏幕后处理1.0:调整亮度/饱和度/对比度

    1 Unity中实现屏幕特效的基本步骤 什么叫屏幕后处理 Screen post processing effects 渲染完整个场景得到屏幕图像后对图像进行一系列操作 实现各种屏幕特效 这一步我们可以添加很多例如景深 Depth of F
  • Unity 资源加载卸载过程

    什么时候才是UnusedAssets 看一个例子 Object obj Resources Load MyPrefab GameObject instance Instantiate obj as GameObject Destroy in
  • Unity中级客户端开发工程师的进阶之路

    上期UWA技能成长系统之 Unity高级客户端开发工程师的进阶之路 得到了很多Unity开发者的肯定 通过系统的学习 可以掌握游戏性能瓶颈定位的方法和常见的CPU GPU 内存相关的性能优化方法 UWA技能成长系统是UWA根据学员的职业发展
  • Unity-AR 简介

    Unity AR 简介 现有Unity AR Sdk ARKit 苹果推出的AR开发平台 ARCore Google 推出的增强现实 SDK ARFoundation ARFoundation是ARKit XR插件和ARCore XR插件
  • FBX导入Unity中模型没有材质的处理

    一 3dMax导出FBX时的注意事项 导出时 确保maps文件存在 里面放着fbx用到的image 二 在Unity中的设置 1 文件拖入Unity的Assets文件夹中 2 查看模型的材质是否存在 如下所示 材质为None 此时拖入sce
  • Unity动画控制器animator.CrossFade

    需要特别注意 1 CrossFade虽然可以不用任何逻辑来链接而直接跳转 但是CrossFade只能覆盖其他动画 当当前动画播放完毕而没有跳出这个动画时再次调用CrossFade将会失败 造成动画依旧停在原位 参数animator Cros
  • Unity Shader入门精要第七章 基础纹理之遮罩纹理

    Unity系列文章目录 文章目录 Unity系列文章目录 前言 一 实践 参考 前言 遮罩纹理 mask texture 是本章要介绍的最后一种纹理 它非常有用 在很多商业游戏中 都可以见到它的身影 那么什么是遮罩呢 简单来讲 遮罩允许我们
  • UnityVR--组件3--Line Renderer--线性渲染

    目录 线性渲染组件简介 绘制线条Line Renderer组件介绍 绘制拖尾Trail Renderer组件介绍 应用1 使用Line Renderer绘制线段 应用1实现 使用系统工具或自定义工具绘制线段 应用2 Trail Render
  • Unity与Android的Back键冲突解决

    Unity与Android的Back键冲突解决 上一篇的最后留下了两个问题 Unity视图下横屏闪退 Unity视图下Android无法响应back返回上一activity 对于第一个问题 应该是Unity横屏下视图的某些设置跟Androi
  • GooglePlay提审警告(com.google.android.gms:play-services-safetynet:17.0.0)

    1 Goole在今年6月份出的新政策 不在使用safetynet 而使用Play Integrity API 2 项目本身没有使用过safetynet 3 使用了firebase 查阅资料 解决方案如下 implementation pla
  • unity中创建询问弹出窗口

    在开发过程中进程会遇到需要弹出一个窗口询问用户是否进行的操作 今天就来制作一个这样弹出窗口 然后根据弹出窗口的选择内容不同进行不同的操作 本例中主要是为了删除一个数据 而在删除数据操作前需要得到用户的一个确认操作 这里面主要用到了Notif
  • unity: C#的Action Event Delegate的异同

    目录 一 Action 二 Event 三 Action和Event区别 四 Delegate 总结 Action Event Delegate的异同 前言 Action Event和Delegate都是C 语言中的重要概念 分别用于管理函
  • unity 性能查看工具Profiler

    文章目录 前言 profiler工具介绍 菜单栏 帧视图 模块视图 模块详细信息 通过profiler分析优化游戏性能 最后 前言 每次进行游戏优化的时候都用这个工具查看内存泄漏啊 代码优化啊之类的东西 真的好用 但是之前也就是自己摸索一下
  • 【Unity步步升】监控与检测物体的各种方案,如:射线、碰撞、挂载等...

    在制作AR模型数值控制方案的时候遇到了检测的问题 学习过程受益匪浅 故今天为大家整理带来一篇监控与检测物体的参考方案集合 目录 一 射线检测 二 物体存在检测 三 碰撞检测 一 射线检测 单射线检测 首先完成搭建场景如下图1 1 我这里用到
  • unity3d切换场景Application.LoadLevel(1)含义

    Application LoadLevel 1 场景ID
  • 【转载】【Unity】WebSocket通信

    1 前言 Unity客户端常用的与服务器通信的方式有socket http webSocket 本文主要实现一个简单的WebSocket通信案例 包含客户端 服务器 实现了两端的通信以及客户端向服务器发送关闭连接请求的功能 实现上没有使用U
  • 游戏开发创建操作之玩家信息系统的建立

    游戏一般都需要玩家信息系统 那么我们应该如何搭建玩家信息系统 接下来我将展示一种简单的方法 完整代码如下 using System Collections using System Collections Generic using Uni

随机推荐

  • 硬盘的三大种类

    文章目录 一 传统硬盘 HDD Hard Disk Drive 二 固态硬盘 SSD Solid State Drive 三 混合硬盘 hybrid hard drive HHD 四 对比 一 传统硬盘 HDD Hard Disk Driv
  • 实验2linux进程控制与通信,实验2 进程控制与通信管理word文档良心出品

    实验2 进程控制与通信管理word文档良心出品 由会员分享 可在线阅读 更多相关 实验2 进程控制与通信管理word文档良心出品 13页珍藏版 请在人人文库网上搜索 1 年级11级专业计算机科学与技术班级五班组号12组实验室9 205日期2
  • ChatGPT?听说Biying把它下架了

    ChatGPT被玩疯了 开始放飞自我 ChatGPT版微软必应上线不到10天 就被网友玩坏了 先说这个词 放飞自我 什么东西才会放飞自我 人放飞自我 人 你确定是人 所以让我们来把上面的句子改写一下 什么东西才会放飞自我 人才会放飞自我 所
  • HTML5实现音频和视频嵌入

    简介 HTML5未出来之前 在线的音频和视频都是借助Flash或者第三方工具实现的 现在HTML5也支持了这方面的功能 在一个支持HTML5的浏览器中 不需要安装任何插件就能播放音频和视频 原生的支持音频和视频 为HTML5注入了巨大的发展
  • [脑科学]-这才是心理学

    这本书出了第9版了 不长 写的挺好 国内也有一本 同样的名字 隋xx写的 文笔也很好 可惜不太有名 1 心理学 就是研究大脑是如何工作的学科 嗯 一定要明白这一点 各种心理学实验就是黑盒测试大脑 脑外科就是白盒研究大脑 要想变得聪明之类的
  • 欢聚集团 -- 前端一面

    面试形式 牛客网面试 一面40多分钟 自我介绍 面试内容 手写事件委托 手写AJAX IE怎么处理 常见的http状态码 和 的区别 js隐式转换 闭包 闭包的结构 原型 原型链 对象的深浅拷贝 深拷贝的实现 怎么获取js对象的自身属性 j
  • Android多个fragment懒加载的坑(卡顿)

    在Android开发中 有很多种情况都是viewpage fragment左右滑动进行布局的 例如下面的今日头条 在今日头条app上 我们可以看到 其顶部都是一栏的类型数据源 可滑动 可联动下面的viewpage里的fragment 但是很
  • django配置DJANGO_SETTINGS_MODULE

    DJANGO SETTINGS MODULE 使用Django时要通知Django当前使用的是哪个配置文件 可以改变环境变量 DJANGO SETTINGS MODULE 实现这一点 当我们使用manage py运行起本地的web服务器时
  • 常见的代码优化技术

    常见的代码优化技术有 复写传播 删除死代码 强度削弱 归纳变量删除 如果有同学有研究过这部分内容 并总结过 有更好的答案 请联系我删除本篇非原创解答 1 复写传播 a d e b d e c d e gt t d e a t b t c t
  • 专治疑难系列 - 解决win11中xbox开机自启问题

    博客主页 Passerby Wang的博客 CSDN博客 系统运维 云计算 Linux基础领域博主 所属专栏 专治疑难系列 上期文章 专治疑难系列 无法激活网络的解决方法 如觉得博主文章写的不错或对你有所帮助的话 还望大家多多支持呀 关注
  • RabbitMQ与KafKa区别

    在应用场景方面 RabbitMQ 遵循AMQP协议 由内在高并发的erlanng语言开发 用在实时的对可靠性要求比较高的消息传递上 kafka是Linkedin于2010年12月份开源的消息发布订阅系统 它主要用于处理活跃的流式数据 大数据
  • 中国知网html如何复制,中国知网如何快速导出参考文献的格式? 来看看吧

    写论文时 需要很多引文及注释 就需要把参考文献标注上 按照参考文献的引文格式一点一点整理很麻烦 涉及大量文献时费时费力 中国知网有快速导出参考文献格式的功能 可单个导出 也可以大量导出 方便实用 工具 材料 中国知网 论文 操作方法 01
  • idea彻底改java项目名(详细说明各个地方改名的作用)

    需求分析 要将手头的java项目文件夹改名 经常会出现以下问题 无法运行 只是改了别名 打war包 jar包的包名还是不变 解决方案 以下将项目名Easyfile改为驼峰命名的EasyFile 改项目名称 此时只改了别名 改文件夹名 解决编
  • Yolov3中Anchor box和confidence的理解(公式未编辑 待续....)

    Anchor box bounding box prior Anchor box原理解释 1 Anchor box其实就是从训练集的所有ground truth 中通过统计聚类的方法 k mean 得到常用的尺寸大小 比如 在某个训练集中最
  • MySQL有哪些锁

    这次 来说说 MySQL 的锁 主要是 Q A 的形式 看起来会比较轻松 在 MySQL 里 根据加锁的范围 可以分为全局锁 表级锁和行锁三类 全局锁 全局锁是怎么用的 要使用全局锁 则要执行这条命 flush tables with re
  • flutter 自定义组件-抽奖大转盘

    import dart async import dart math import dart ui as ui import dart ui import package demo widget luck luck entity dart
  • TypeScript 变量声明 —— 类型断言(Type Assertion)

    类型断言 Type Assertion TypeScript 允许你覆盖它的推断 并且能以任何你想要的方式分析它 这种机制被称为类型断言 类型断言使用 as 关键字或者
  • 查出反向木马的反向连接域名

    来源 ttian net 反向木马的主要种植手段是通过IE的众多漏洞 bt下载时不小心运行 或者来路不明的软件 使未打补丁的用户点击之后下载运行了木马程序 而这些用户基本都是拥有动态IP的个人用户 若不使用反向连接的方式 势必无法长久控制
  • k8s中创建pv和pvc

    1 创建一个pv apiVersion v1 kind PersistentVolume metadata name pv0003 名称 spec capacity storage 5Gi 卷大小 volumeMode Filesystem
  • Unity中自动识别串口以及热拔插

    最近需要在Unity中实现自动识别热拔插并识别串口的功能 实在没有找到原生的消息响应 折腾了一周 尝试了多种方法 总结一下主要有3种实现思路 1 利用Form类中的消息进行串口拔插消息的接收 2 实时保存串口信息到外部文件 进行判别 3 读