obsidian/笔记文件/2.笔记/Qt_Unity_PC_SDK总结_第三章.md

109 lines
3.5 KiB
Markdown
Raw Permalink Normal View History

2025-03-26 00:02:56 +08:00
之前章节在对应目录是生成了qt dll 相关依赖文件
![[Pasted image 20240803153822.png]]
然后需要在Unity工程对应目录生成以上qt相关的dll和依赖文件先确认qt工程所在目录
![[Pasted image 20240803153858.png]]
在它的上一级的上一级创建一个Unity工程基于Unity 2019.3.6
![[Pasted image 20240803153915.png]]
![[Pasted image 20240803153952.png]]
创建完成后记得把Unity工程关了不然通过qt生成或者修改dll文件的时候有可能会出现占用的情况
回到qt注释之前的Output相关
然后设定一下dll的生成目录是上上级对应Unity工程的对应路径需要注意的是如果文件夹不存在也会自动生成文件夹
![[Pasted image 20240802154203.png]]
重新点击,构建按钮
![[Pasted image 20240802154414.png]]
可以看到dll和文件夹都顺利创建出来
![[Pasted image 20240803154117.png]]
复制所在路径
![[Pasted image 20240803154129.png]]
循例基于64位MinGW编译器环境cd和跳转盘符抵达对应的文件夹
![[Pasted image 20240803154210.png]]
然后 `windeployqt` 完成依赖的自动生成
![[Pasted image 20240803154243.png]]
重新打开Unity工程创建 `JustTest` 测试脚本
![[Pasted image 20240802154834.png]]
`using` 引用命名控件,还有 `Serializable` 可序列化类 `InitData` 也是包含传递给qt的相关数据体
![[Pasted image 20240802154900.png]]
通过DllImport的形式写的是对应dll的前缀名字其中的方法是在qt中export出来的Invoke触发器方法再定一个enum枚举包含Init和Quit俩元素分别是初始化和退出SDK相关
![[Pasted image 20240802155040.png]]
通过一个静态布尔isInit判断是否已经初始化最开始的时候设置为false即可
![[Pasted image 20240802155444.png]]
再弄俩回调也是分别对应初始化和退出的其中OnInit初始化回调是会把上述静态布尔设置为true判断为初始化成功
![[Pasted image 20240802155408.png]]
在Start开始函数中完成传参使用的json数据体构建然后Invoke触发Init初始化还有绑定回调OnInit
在OnApplicationQuit退出函数中也是根据isInit判断Invoke触发qt sdk的Quit退出函数即可
![[Pasted image 20240802155542.png]]
这样直接挂载脚本运行unity的话是会报错的因为Unity.exe缺少qt相关的dll组件
之前自动生成qt dll的时候有一个qwindows的dll需要复制拷贝到Unity引擎所在目录
![[Pasted image 20240803154318.png]]
复制拷贝后:
![[Pasted image 20240802160230.png]]
![[Pasted image 20240802160255.png]]
回到Unity测试脚本挂载到相机上
![[Pasted image 20240802160314.png]]
运行Unity可以看到加载qt相关dll初始化的log回调是正常的
![[Pasted image 20240802160353.png]]
初始化回调对应qt的log输出一致
![[Pasted image 20240802160631.png]]
然后,开始弄,硬件信息相关,参考[[Windows WMIC命令使用详解]]
先在这个目录创建一个WMIC文件夹
![[Pasted image 20240803154504.png]]
然后在该目录下创建一个空白txt文件
![[Pasted image 20240803154531.png]]
修改文件后缀为pri
![[Pasted image 20240803154544.png]]
回到pro工程文件添加include引用保存修改
![[Pasted image 20240802161530.png]]
等待编译完成,可以看到,空白工程,就正常被引用进来了;
![[Pasted image 20240802161618.png]]