# UnityNativeFilePicker **Repository Path**: fengozl/UnityNativeFilePicker ## Basic Information - **Project Name**: UnityNativeFilePicker - **Description**: No description available - **Primary Language**: C# - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-02-20 - **Last Updated**: 2024-02-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 一、简介 UnityNativeFilePicker支持鸿蒙版本,使用说明参考GitHub [UnityNativeFilePicker](https://github.com/yasirkula/UnityNativeFilePicker) ## 二、如何适配鸿蒙 目前需要手动修改部分团结引擎导出的TS代码才能适配成功,具体的修改如下: ### 1. TuanjieMainWorker - 导入NativeFilePicker,增加如下代码 ```TS import {NativeFilePicker} from '../NativeFilePicker' ``` - 增加团结主线程接收子线程消息处理,代码如下: ```TS if (funcName == "GoBack") { if (globalThis.webviewInfo.controller.accessBackward()) { globalThis.webviewInfo.controller.backward() } } // 处理FilePicker,并增加如下代码 if(funcName =="nativePickFiles"){ NativeFilePicker.pickFilesInUIThread(msg.data.selectMultiple,msg.data.savePath,msg.data.allowedFileTypes); } if(funcName =="nativeExportFiles"){ NativeFilePicker.exportFilesInUIThread(msg.data.sourceFiles); } ``` ### 2. TuanjieMainWorkerHandler - 导入NativeFilePicker,增加如下代码 ```TS import {NativeFilePicker} from '../NativeFilePicker' ``` - 增加子线程处理主线程消息逻辑: ```TS case 'OnLocation': var locationData = data.location; var location = { latitude: locationData.latitude, longitude: locationData.longitude, altitude: locationData.altitude, accuracy: locationData.accuracy, speed: locationData.speed, timeStamp: locationData.timeStamp, direction: locationData.direction, timeSinceBoot: locationData.timeSinceBoot, } tuanjie.nativeOnLocationChange(location); break; // 处理FilePicker,并增加如下代码 case 'OnNativePickFilesFinish': NativeFilePicker.onNativePickFilesFinish(data.data); break; ``` ### 3. TuanjiePlayerAbilityIndex 增加自定义对话框 - 导入NativeFilePicker,增加如下代码 ```TS import WaitingDialog from '../WaitingDialog' import {NativeFilePicker} from '../NativeFilePicker' ``` - 增加waitingDialogController逻辑 ```TS // 新增如下代码 waitingDialogController = new CustomDialogController({ builder: WaitingDialog({ progressValue: NativeFilePicker.progress, cancel: ()=>{NativeFilePicker.cancelWaiting()}, }), autoCancel: false, alignment: DialogAlignment.Bottom, customStyle: true, }) onPageShow() { TuanjieLog.info('%{public}s', 'onPageShow'); SetToGlobalThis('dialogController', this.dialogController); SetToGlobalThis('waitingDialogController', this.waitingDialogController); // 增加代码 SetToGlobalThis('webviewInfo', this.webviewInfo); } ``` ## 二、待优化项 ### 1. 支持cancel能力 目前由于团结引擎导出的是TS代码,cancel能力依赖鸿蒙taskpool能力,taskpool的使用只能在ets中。目前ts不能导入ets文件,导致cancel能力不可用 ### 2. worker和UI线程交互逻辑 当前通过workder线程拉起Unity引擎,但是worker线程和UI线程的交互需要通过Message机制来处理,导致使用起来比较复杂。如果鸿蒙可以提供类似Android的runUIThread方法,那么TuanjieMainWorker TuanjieMainWorkerHandler就不需要适配了 ### 3. 自定义对话框 当前鸿蒙的自定义对话框必须要在Component中声明,导致TuanjiePlayerAbilityIndex需要适配修改,如果鸿蒙提供类似于Android的FragmentDialog机制,可以脱离Component,该适配项也不需要适配了 ### 4. Mime类型 目前鸿蒙无根据类型描述符获得文件后缀的方法,所以当前除了音视频类型,其他文件类型的后缀还无法获取。待鸿蒙提供接口后,继续增强。