From 940d8b69bae2dca480eb5210b70f4ed1d7df0194 Mon Sep 17 00:00:00 2001 From: nebulaliu Date: Tue, 5 Mar 2024 15:27:49 +0800 Subject: [PATCH] Auto-publish WXSDK. --- CHANGELOG.md | 15 ++- Editor/WXConvertCore.cs | 15 +++ Editor/WXPluginVersion.cs | 2 +- Editor/wx-editor.dll | Bin 201216 -> 201728 bytes Runtime/Plugins/WXAssetBundle.jslib | 2 +- Runtime/Plugins/wx-runtime-editor.dll | Bin 273920 -> 273920 bytes Runtime/Plugins/wx-runtime.dll | Bin 274944 -> 274944 bytes Runtime/wechat-default/check-version.js | 4 +- Runtime/wechat-default/game.js | 31 ++---- Runtime/wechat-default/game.json | 2 +- Runtime/wechat-default/unity-namespace.js | 68 ++++++++++--- .../unity-sdk/bluetooth/index.js | 2 +- Runtime/wechat-default/unity-sdk/fs.js | 11 ++- Runtime/wechat-default/unity-sdk/sdk.js | 90 +++++++++--------- Runtime/wechat-default/unity-sdk/utils.js | 36 +++++-- .../wechat-default/unity-sdk/video/index.js | 33 +++++-- package.json | 15 +-- 17 files changed, 206 insertions(+), 120 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ed8effc8..68fac537 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,14 +6,25 @@ Removed - 删除功能/接口 Fixed - 修复问题 Others - 其他 --> +## 2024-3-5 【普通更新】 +* 普通:WXAssetBundle支持切换CDN +* 普通:优化VideoPlayer组件 +* 普通:更新小游戏模板捕获全局错误 +* 普通:高性能+模式不再限制需要iOS>15.0 +### Fixed +* 普通:修复wx.onBluetoothDeviceFound +* 普通:修复wx.onUserCaptureScreen +* 普通:修复wx.getAppAuthorizeSetting +* 普通:修复fs.stat +* 普通:修复截屏回调 +* 普通:unity21.3网络超时时间设置 + ## 2024-1-18 【普通更新】 -包含重要bugfix、特性支持 * 普通:更新适配插件版本到1.2.38 ### Fixed * 普通:不支持WebGL2的旧Android微信版本提供升级指引 ## 2024-1-15 【普通更新】 -包含重要bugfix、特性支持 ### Feature * 重要:增加iOS高性能+(iOSPerformancePlus)选项,请查阅[高性能+模式](https://developers.weixin.qq.com/minigame/dev/guide/performance/perf-high-performance-plus.html),有助于提升渲染兼容性、降低WebContent进程内存 * 普通:陀螺仪去json性能优化 diff --git a/Editor/WXConvertCore.cs b/Editor/WXConvertCore.cs index 1ef07cca..55984a7c 100644 --- a/Editor/WXConvertCore.cs +++ b/Editor/WXConvertCore.cs @@ -93,6 +93,7 @@ namespace WeChatWASM Debug.LogError("若游戏曾使用旧版本微信SDK,需删除 Assets/WX-WASM-SDK 文件夹后再导入最新工具包。"); return WXExportError.BUILD_WEBGL_FAILED; } + CheckBuildTarget(); Init(); // JSLib SettingWXTextureMinJSLib(); @@ -159,6 +160,20 @@ namespace WeChatWASM return WXExportError.SUCCEED; } + private static void CheckBuildTarget() + { + if (UnityUtil.GetEngineVersion() == UnityUtil.EngineVersion.Unity) + { + EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.WebGL, BuildTarget.WebGL); + } + else + { +#if TUANJIE_2022_3_OR_NEWER + EditorUserBuildSettings.SwitchActiveBuildTarget(BuildTargetGroup.WeixinMiniGame, BuildTarget.WeixinMiniGame); +#endif + } + } + public static void UpdateGraphicAPI() { GraphicsDeviceType[] targets = new GraphicsDeviceType[] { }; diff --git a/Editor/WXPluginVersion.cs b/Editor/WXPluginVersion.cs index 2a9cfaf7..3a17fe1b 100644 --- a/Editor/WXPluginVersion.cs +++ b/Editor/WXPluginVersion.cs @@ -2,7 +2,7 @@ { public class WXPluginVersion { - public static string pluginVersion = "202401191135"; // 这一行不要改他,导出的时候会自动替换 + public static string pluginVersion = "202403051510"; // 这一行不要改他,导出的时候会自动替换 } public class WXPluginConf diff --git a/Editor/wx-editor.dll b/Editor/wx-editor.dll index bd3d00bbe3fba2ee8c9b83791f4cf0ed3e969e87..537b6bc09d90aaa4462d78f0627154f286ba3a1e 100644 GIT binary patch delta 60848 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 delta 60301 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 diff --git a/Runtime/Plugins/WXAssetBundle.jslib b/Runtime/Plugins/WXAssetBundle.jslib index d989c26f..2abb3645 100644 --- a/Runtime/Plugins/WXAssetBundle.jslib +++ b/Runtime/Plugins/WXAssetBundle.jslib @@ -54,7 +54,7 @@ var WXAssetBundleLibrary = { WXFS.fs = wx.getFileSystemManager(); WXFS.nowfd = FS.MAX_OPEN_FDS + 1; WXFS.isWXAssetBundle = function(url){ - if(url.startsWith(GameGlobal.unityNamespace.DATA_CDN)||url.startsWith('/vfs_streamingassets')){ + if(WXFS._url2path.has(url)||url.startsWith(GameGlobal.unityNamespace.DATA_CDN)||url.startsWith('/vfs_streamingassets')){ return unityNamespace.isWXAssetBundle(WXFS.url2path(url)); } return unityNamespace.isWXAssetBundle(url); diff --git a/Runtime/Plugins/wx-runtime-editor.dll b/Runtime/Plugins/wx-runtime-editor.dll index f3f8e177edf884f413defca7d43c3c2a98a23d2e..ad8e2aea0d78b44d302fed6ba9bebf408b707e54 100644 GIT binary patch delta 2372 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 SLw(~Pd diff --git a/Runtime/Plugins/wx-runtime.dll b/Runtime/Plugins/wx-runtime.dll index 35d9518650421c3ad0bc98050a5fb1cea59b3b0d..0beb1d74f3f8514e31d1e75dbcc7ebf1d116ad08 100644 GIT binary patch delta 48 zcmV-00MGw`=14.0,检测到不支持压缩纹理时会提示升级系统 const isIOSH5SystemVersionValid = compareVersion(systemVersion, '14.0'); -// iOS系统版本>=15支持webgl2 -const isIOSWebgl2SystemVersionValid = compareVersion(systemVersion, '15.0'); +// iOS系统版本>=15支持webgl2,高性能模式+无此系统要求 +const isIOSWebgl2SystemVersionValid = compareVersion(systemVersion, '15.0') || GameGlobal.isIOSHighPerformanceModePlus; // Android客户端版本>=8.0.19支持webgl2 const isAndroidWebGL2ClientVersionValid = compareVersion(version, '8.0.19'); // 是否用了webgl2 diff --git a/Runtime/wechat-default/game.js b/Runtime/wechat-default/game.js index cf5eef44..033a2e2f 100644 --- a/Runtime/wechat-default/game.js +++ b/Runtime/wechat-default/game.js @@ -79,6 +79,10 @@ checkVersion().then((enable) => { }).default; } catch (error) { + GameGlobal.realtimeLogManager.error(error); + // logManager不支持自动处理错误对象 + GameGlobal.logmanager.warn(error.stack); + console.error('requirePlugin:', error); if (error.message.indexOf('not defined') !== -1) { console.error('!!!插件需要申请才可使用\n请勿使用测试AppID,并登录 https://mp.weixin.qq.com/ 并前往:能力地图-开发提效包-快适配 开通\n阅读文档获取详情:https://github.com/wechat-miniprogram/minigame-unity-webgl-transform/blob/main/Design/Transform.md'); } @@ -144,6 +148,7 @@ checkVersion().then((enable) => { }, }); GameGlobal.managerConfig = managerConfig; + // 显示启动封面 const gameManager = new UnityManager(managerConfig); gameManager.onLaunchProgress((e) => { // interface LaunchEvent { @@ -185,30 +190,11 @@ checkVersion().then((enable) => { gameManager.assetPath = `${(managerConfig.DATA_CDN || '').replace(/\/$/, '')}/Assets`; preloadWxCommonFont(); }); - // 上报初始化信息 - const systeminfo = wx.getSystemInfoSync(); - const bootinfo = { - renderer: systeminfo.renderer || '', - isH5Plus: GameGlobal.isIOSHighPerformanceModePlus || false, - abi: systeminfo.abi || '', - brand: systeminfo.brand, - model: systeminfo.model, - platform: systeminfo.platform, - system: systeminfo.system, - version: systeminfo.version, - SDKVersion: systeminfo.SDKVersion, - benchmarkLevel: systeminfo.benchmarkLevel, - }; - wx.getRealtimeLogManager().info('game starting', bootinfo); - wx.getLogManager({ level: 0 }).info('game starting', bootinfo); - console.info('game starting', bootinfo); - // 默认上报小游戏实时日志与用户反馈日志(所有error日志+小程序框架异常) - wx.onError((result) => { - gameManager.printErr(result.message); - }); + // 插件捕获到引擎错误后,会通过此事件抛给游戏 gameManager.onLogError = function (err) { GameGlobal.realtimeLogManager.error(err); - GameGlobal.logmanager.warn(err); + const isErrorObj = err && err.stack; + GameGlobal.logmanager.warn(isErrorObj ? err.stack : err); }; // iOS高性能模式定期GC if (GameGlobal.canUseiOSAutoGC && unityNamespace.iOSAutoGCInterval !== 0) { @@ -216,6 +202,7 @@ checkVersion().then((enable) => { wx.triggerGC(); }, unityNamespace.iOSAutoGCInterval); } + // 开始执行游戏启动流程 gameManager.startGame(); GameGlobal.manager = gameManager; GameGlobal.events.on('launchOperaPushMsgToWasm', (callback, args) => GameGlobal.WXWASMSDK.WXLaunchOperaBridgeToC(callback, args)); diff --git a/Runtime/wechat-default/game.json b/Runtime/wechat-default/game.json index 5f3046d3..b92c86ed 100644 --- a/Runtime/wechat-default/game.json +++ b/Runtime/wechat-default/game.json @@ -23,7 +23,7 @@ ], "plugins": { "UnityPlugin": { - "version": "1.2.39", + "version": "1.2.41", "provider": "wxe5a48f1ed5f544b7", "contexts": [ { diff --git a/Runtime/wechat-default/unity-namespace.js b/Runtime/wechat-default/unity-namespace.js index 3b971c41..55ecc614 100644 --- a/Runtime/wechat-default/unity-namespace.js +++ b/Runtime/wechat-default/unity-namespace.js @@ -99,25 +99,69 @@ unityNamespace.isErasableFile = function (info) { } return true; }; -const { version, SDKVersion, platform, renderer, system } = wx.getSystemInfoSync(); -unityNamespace.version = version; -unityNamespace.SDKVersion = SDKVersion; -unityNamespace.platform = platform; -unityNamespace.renderer = renderer; -unityNamespace.system = system; -unityNamespace.isPc = platform === 'windows' || platform === 'mac'; -unityNamespace.isDevtools = platform === 'devtools'; -unityNamespace.isMobile = !unityNamespace.isPc && !unityNamespace.isDevtools; -unityNamespace.isH5Renderer = unityNamespace.isMobile && unityNamespace.renderer === 'h5'; -unityNamespace.isIOS = platform === 'ios'; -unityNamespace.isAndroid = platform === 'android'; GameGlobal.WebAssembly = GameGlobal.WXWebAssembly; GameGlobal.unityNamespace = GameGlobal.unityNamespace || unityNamespace; GameGlobal.realtimeLogManager = wx.getRealtimeLogManager(); GameGlobal.logmanager = wx.getLogManager({ level: 0 }); +// 提前监听错误并打日志 +function bindGloblException() { + // 默认上报小游戏实时日志与用户反馈日志(所有error日志+小程序框架异常) + wx.onError((result) => { + // 若manager已初始化,则直接用manager打日志即可 + if (GameGlobal.manager) { + GameGlobal.manager.printErr(result.message); + } + else { + GameGlobal.realtimeLogManager.error(result); + const isErrorObj = result && result.stack; + GameGlobal.logmanager.warn(isErrorObj ? result.stack : result); + console.error('onError:', result); + } + }); + wx.onUnhandledRejection((result) => { + GameGlobal.realtimeLogManager.error(result); + const isErrorObj = result && result.reason && result.reason.stack; + GameGlobal.logmanager.warn(isErrorObj ? result.reason.stack : result.reason); + console.error('unhandledRejection:', result.reason); + }); + // 上报初始信息 + function printSystemInfo(systemInfo) { + GameGlobal.systemInfoCached = systemInfo; + const bootinfo = { + renderer: systemInfo.renderer || '', + isH5Plus: GameGlobal.isIOSHighPerformanceModePlus || false, + abi: systemInfo.abi || '', + brand: systemInfo.brand, + model: systemInfo.model, + platform: systemInfo.platform, + system: systemInfo.system, + version: systemInfo.version, + SDKVersion: systemInfo.SDKVersion, + benchmarkLevel: systemInfo.benchmarkLevel, + }; + GameGlobal.realtimeLogManager.info('game starting', bootinfo); + GameGlobal.logmanager.info('game starting', bootinfo); + console.info('game starting', bootinfo); + } + const systemInfoSync = wx.getSystemInfoSync(); + const isEmptySystemInfo = systemInfoSync && Object.keys(systemInfoSync).length === 0; + // iOS会出现getSystemInfoSync返回空对象的情况,使用异步方法替代 + if (isEmptySystemInfo) { + wx.getSystemInfo({ + success(systemInfo) { + printSystemInfo(systemInfo); + }, + }); + } + else { + printSystemInfo(systemInfoSync); + } +} +bindGloblException(); // eslint-disable-next-line no-multi-assign GameGlobal.onCrash = GameGlobal.unityNamespace.onCrash = function () { GameGlobal.manager.showAbort(); + // 避免已经修改屏幕尺寸,故不使用缓存的systeminfo const sysInfo = wx.getSystemInfoSync(); wx.createFeedbackButton({ type: 'text', diff --git a/Runtime/wechat-default/unity-sdk/bluetooth/index.js b/Runtime/wechat-default/unity-sdk/bluetooth/index.js index 5d9a6eb8..2ee523f2 100644 --- a/Runtime/wechat-default/unity-sdk/bluetooth/index.js +++ b/Runtime/wechat-default/unity-sdk/bluetooth/index.js @@ -1,4 +1,4 @@ -import { convertDataToPointer } from "../utils"; +import { convertDataToPointer } from '../utils'; let wxOnBLECharacteristicValueChangeCallback; const OnBLECharacteristicValueChange = (res) => { const deviceIdPtr = convertDataToPointer(res.deviceId); diff --git a/Runtime/wechat-default/unity-sdk/fs.js b/Runtime/wechat-default/unity-sdk/fs.js index b58ad73a..abb3db99 100644 --- a/Runtime/wechat-default/unity-sdk/fs.js +++ b/Runtime/wechat-default/unity-sdk/fs.js @@ -411,8 +411,15 @@ export default { }, WX_FileSystemManagerStatSync(path, recursive) { const fs = wx.getFileSystemManager(); - - return JSON.stringify(fs.statSync(path, recursive)); + const res = fs.statSync(path, recursive); + let resArray; + if (Array.isArray(res)) { + resArray = res; + } + else { + resArray = [res]; + } + return JSON.stringify(resArray); }, WX_FileSystemManagerWriteSync(option, data) { const fs = wx.getFileSystemManager(); diff --git a/Runtime/wechat-default/unity-sdk/sdk.js b/Runtime/wechat-default/unity-sdk/sdk.js index 54f951bf..c6787c20 100644 --- a/Runtime/wechat-default/unity-sdk/sdk.js +++ b/Runtime/wechat-default/unity-sdk/sdk.js @@ -1,6 +1,6 @@ import moduleHelper from './module-helper'; -import { uid, formatResponse, formatJsonStr, onEventCallback, offEventCallback, getListObject } from './utils'; +import { uid, formatResponse, formatJsonStr, onEventCallback, offEventCallback, getListObject, stringifyRes } from './utils'; let OnAccelerometerChangeList; let OnAudioInterruptionBeginList; let OnAudioInterruptionEndList; @@ -3331,7 +3331,7 @@ export default { } const callback = (res) => { formatResponse('OnAccelerometerChangeListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnAccelerometerChangeCallback', resStr); }; OnAccelerometerChangeList.push(callback); @@ -3348,7 +3348,7 @@ export default { } const callback = (res) => { formatResponse('GeneralCallbackResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnAudioInterruptionBeginCallback', resStr); }; OnAudioInterruptionBeginList.push(callback); @@ -3365,7 +3365,7 @@ export default { } const callback = (res) => { formatResponse('GeneralCallbackResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnAudioInterruptionEndCallback', resStr); }; OnAudioInterruptionEndList.push(callback); @@ -3382,7 +3382,7 @@ export default { } const callback = (res) => { formatResponse('OnBLEConnectionStateChangeListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnBLEConnectionStateChangeCallback', resStr); }; OnBLEConnectionStateChangeList.push(callback); @@ -3399,7 +3399,7 @@ export default { } const callback = (res) => { formatResponse('OnBLEMTUChangeListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnBLEMTUChangeCallback', resStr); }; OnBLEMTUChangeList.push(callback); @@ -3416,7 +3416,7 @@ export default { } const callback = (res) => { formatResponse('OnBLEPeripheralConnectionStateChangedListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnBLEPeripheralConnectionStateChangedCallback', resStr); }; OnBLEPeripheralConnectionStateChangedList.push(callback); @@ -3430,7 +3430,7 @@ export default { WX_OnBackgroundFetchData() { const callback = (res) => { formatResponse('OnBackgroundFetchDataListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnBackgroundFetchDataCallback', resStr); }; wx.onBackgroundFetchData(callback); @@ -3441,7 +3441,7 @@ export default { } const callback = (res) => { formatResponse('OnBeaconServiceChangeListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnBeaconServiceChangeCallback', resStr); }; OnBeaconServiceChangeList.push(callback); @@ -3458,7 +3458,7 @@ export default { } const callback = (res) => { formatResponse('OnBeaconUpdateListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnBeaconUpdateCallback', resStr); }; OnBeaconUpdateList.push(callback); @@ -3475,7 +3475,7 @@ export default { } const callback = (res) => { formatResponse('OnBluetoothAdapterStateChangeListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnBluetoothAdapterStateChangeCallback', resStr); }; OnBluetoothAdapterStateChangeList.push(callback); @@ -3492,7 +3492,7 @@ export default { } const callback = (res) => { formatResponse('OnBluetoothDeviceFoundListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnBluetoothDeviceFoundCallback', resStr); }; OnBluetoothDeviceFoundList.push(callback); @@ -3509,7 +3509,7 @@ export default { } const callback = (res) => { formatResponse('OnCompassChangeListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnCompassChangeCallback', resStr); }; OnCompassChangeList.push(callback); @@ -3526,7 +3526,7 @@ export default { } const callback = (res) => { formatResponse('OnDeviceMotionChangeListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnDeviceMotionChangeCallback', resStr); }; OnDeviceMotionChangeList.push(callback); @@ -3543,7 +3543,7 @@ export default { } const callback = (res) => { formatResponse('OnDeviceOrientationChangeListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnDeviceOrientationChangeCallback', resStr); }; OnDeviceOrientationChangeList.push(callback); @@ -3560,7 +3560,7 @@ export default { } const callback = (res) => { formatResponse('Error', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnErrorCallback', resStr); }; OnErrorList.push(callback); @@ -3577,7 +3577,7 @@ export default { } const callback = (res) => { formatResponse('GeneralCallbackResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnHideCallback', resStr); }; OnHideList.push(callback); @@ -3610,7 +3610,7 @@ export default { } const callback = (res) => { formatResponse('OnKeyDownListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnKeyDownCallback', resStr); }; OnKeyDownList.push(callback); @@ -3627,7 +3627,7 @@ export default { } const callback = (res) => { formatResponse('OnKeyDownListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnKeyUpCallback', resStr); }; OnKeyUpList.push(callback); @@ -3644,7 +3644,7 @@ export default { } const callback = (res) => { formatResponse('OnKeyboardInputListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnKeyboardCompleteCallback', resStr); }; OnKeyboardCompleteList.push(callback); @@ -3661,7 +3661,7 @@ export default { } const callback = (res) => { formatResponse('OnKeyboardInputListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnKeyboardConfirmCallback', resStr); }; OnKeyboardConfirmList.push(callback); @@ -3678,7 +3678,7 @@ export default { } const callback = (res) => { formatResponse('OnKeyboardHeightChangeListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnKeyboardHeightChangeCallback', resStr); }; OnKeyboardHeightChangeList.push(callback); @@ -3695,7 +3695,7 @@ export default { } const callback = (res) => { formatResponse('OnKeyboardInputListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnKeyboardInputCallback', resStr); }; OnKeyboardInputList.push(callback); @@ -3712,7 +3712,7 @@ export default { } const callback = (res) => { formatResponse('OnMemoryWarningListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnMemoryWarningCallback', resStr); }; OnMemoryWarningList.push(callback); @@ -3736,7 +3736,7 @@ export default { } const callback = (res) => { formatResponse('OnMouseDownListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnMouseDownCallback', resStr); }; OnMouseDownList.push(callback); @@ -3753,7 +3753,7 @@ export default { } const callback = (res) => { formatResponse('OnMouseMoveListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnMouseMoveCallback', resStr); }; OnMouseMoveList.push(callback); @@ -3770,7 +3770,7 @@ export default { } const callback = (res) => { formatResponse('OnMouseDownListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnMouseUpCallback', resStr); }; OnMouseUpList.push(callback); @@ -3787,7 +3787,7 @@ export default { } const callback = (res) => { formatResponse('OnNetworkStatusChangeListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnNetworkStatusChangeCallback', resStr); }; OnNetworkStatusChangeList.push(callback); @@ -3804,7 +3804,7 @@ export default { } const callback = (res) => { formatResponse('OnNetworkWeakChangeListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnNetworkWeakChangeCallback', resStr); }; OnNetworkWeakChangeList.push(callback); @@ -3821,7 +3821,7 @@ export default { } const callback = (res) => { formatResponse('OnScreenRecordingStateChangedListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnScreenRecordingStateChangedCallback', resStr); }; OnScreenRecordingStateChangedList.push(callback); @@ -3835,7 +3835,7 @@ export default { WX_OnShareMessageToFriend() { const callback = (res) => { formatResponse('OnShareMessageToFriendListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnShareMessageToFriendCallback', resStr); }; wx.onShareMessageToFriend(callback); @@ -3846,7 +3846,7 @@ export default { } const callback = (res) => { formatResponse('OnShowListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnShowCallback', resStr); }; OnShowList.push(callback); @@ -3863,7 +3863,7 @@ export default { } const callback = (res) => { formatResponse('OnUnhandledRejectionListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnUnhandledRejectionCallback', resStr); }; OnUnhandledRejectionList.push(callback); @@ -3880,7 +3880,7 @@ export default { } const callback = (res) => { formatResponse('GeneralCallbackResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnUserCaptureScreenCallback', resStr); }; OnUserCaptureScreenList.push(callback); @@ -3897,7 +3897,7 @@ export default { } const callback = (res) => { formatResponse('OnVoIPChatInterruptedListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnVoIPChatInterruptedCallback', resStr); }; OnVoIPChatInterruptedList.push(callback); @@ -3914,7 +3914,7 @@ export default { } const callback = (res) => { formatResponse('OnVoIPChatMembersChangedListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnVoIPChatMembersChangedCallback', resStr); }; OnVoIPChatMembersChangedList.push(callback); @@ -3931,7 +3931,7 @@ export default { } const callback = (res) => { formatResponse('OnVoIPChatSpeakersChangedListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnVoIPChatSpeakersChangedCallback', resStr); }; OnVoIPChatSpeakersChangedList.push(callback); @@ -3948,7 +3948,7 @@ export default { } const callback = (res) => { formatResponse('OnVoIPChatStateChangedListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnVoIPChatStateChangedCallback', resStr); }; OnVoIPChatStateChangedList.push(callback); @@ -3965,7 +3965,7 @@ export default { } const callback = (res) => { formatResponse('OnWheelListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnWheelCallback', resStr); }; OnWheelList.push(callback); @@ -3982,7 +3982,7 @@ export default { } const callback = (res) => { formatResponse('OnWindowResizeListenerResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnWindowResizeCallback', resStr); }; OnWindowResizeList.push(callback); @@ -3995,7 +3995,7 @@ export default { }, WX_OnAddToFavorites() { const callback = (res) => { - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnAddToFavoritesCallback', resStr); return wxOnAddToFavoritesResolveConf; }; @@ -4015,7 +4015,7 @@ export default { }, WX_OnCopyUrl() { const callback = (res) => { - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnCopyUrlCallback', resStr); return wxOnCopyUrlResolveConf; }; @@ -4035,7 +4035,7 @@ export default { }, WX_OnHandoff() { const callback = (res) => { - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnHandoffCallback', resStr); return wxOnHandoffResolveConf; }; @@ -4055,7 +4055,7 @@ export default { }, WX_OnShareTimeline() { const callback = (res) => { - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnShareTimelineCallback', resStr); return wxOnShareTimelineResolveConf; }; @@ -4076,7 +4076,7 @@ export default { WX_OnGameLiveStateChange() { const callback = (res) => { formatResponse('OnGameLiveStateChangeCallbackResult', res); - const resStr = JSON.stringify(res); + const resStr = stringifyRes(res); moduleHelper.send('_OnGameLiveStateChangeCallback', resStr); return wxOnGameLiveStateChangeResolveConf; }; diff --git a/Runtime/wechat-default/unity-sdk/utils.js b/Runtime/wechat-default/unity-sdk/utils.js index 826afe59..2ad02e5f 100644 --- a/Runtime/wechat-default/unity-sdk/utils.js +++ b/Runtime/wechat-default/unity-sdk/utils.js @@ -79,9 +79,14 @@ export function formatResponse(type, data, id) { Object.keys(conf).forEach((key) => { if (data[key] === null || typeof data[key] === 'undefined') { if (typeof typeMap[conf[key]] === 'undefined') { - data[key] = {}; - if (ResType[conf[key]]) { - formatResponse(conf[key], data[key]); + if (conf[key].indexOf('[]') > -1) { + data[key] = []; + } + else { + data[key] = {}; + if (ResType[conf[key]]) { + formatResponse(conf[key], data[key]); + } } } else { @@ -100,11 +105,20 @@ export function formatResponse(type, data, id) { else if (conf[key] === 'bool' && (typeof data[key] === 'number' || typeof data[key] === 'string')) { data[key] = !!data[key]; } - else if (conf[key] === 'arrayBuffer' && id) { - - cacheArrayBuffer(id, data[key]); - data.arrayBufferLength = data[key].byteLength; - data[key] = []; + else if (conf[key] === 'arrayBuffer') { + if (id) { + + cacheArrayBuffer(id, data[key]); + data.arrayBufferLength = data[key].byteLength; + data[key] = []; + } + else if (data[key] instanceof ArrayBuffer) { + data[key] = new Uint8Array(data[key]); + data[key] = Array.from(data[key]); + } + else { + data[key] = []; + } } else if (typeof data[key] === 'object' && conf[key] === 'object') { Object.keys(data[key]).forEach((v) => { @@ -343,3 +357,9 @@ function infoToUint8Array(info) { export function convertInfoToPointer(info) { return allocateAndSet(infoToUint8Array(info)); } +export function stringifyRes(obj) { + if (!obj) { + return '{}'; + } + return JSON.stringify(obj); +} diff --git a/Runtime/wechat-default/unity-sdk/video/index.js b/Runtime/wechat-default/unity-sdk/video/index.js index e7e01d94..63973376 100644 --- a/Runtime/wechat-default/unity-sdk/video/index.js +++ b/Runtime/wechat-default/unity-sdk/video/index.js @@ -2,6 +2,8 @@ import { isH5Renderer, isSupportVideoPlayer, isPc, isDevtools } from '../../chec let FrameworkData = null; const isWebVideo = isH5Renderer || isPc || isDevtools; const isDebug = false; +const needCache = true; +const cacheVideoDecoder = []; const videoInstances = {}; function _JS_Video_CanPlayFormat(format, data) { @@ -45,10 +47,16 @@ function _JS_Video_Create(url) { videoInstances[++videoInstanceIdCounter] = video; } else { - - const videoDecoder = wx.createVideoDecoder({ - type: 'wemedia', - }); + let videoDecoder; + if (cacheVideoDecoder.length > 0) { + videoDecoder = cacheVideoDecoder.pop(); + } + else { + + videoDecoder = wx.createVideoDecoder({ + type: 'wemedia', + }); + } const videoInstance = { videoDecoder, @@ -122,10 +130,17 @@ function _JS_Video_Create(url) { }; videoInstance.play(); videoInstance.destroy = () => { - videoDecoder.remove(); + if (needCache) { + videoDecoder.stop(); + cacheVideoDecoder.push(videoDecoder); + } + else { + videoDecoder.remove(); + } if (videoInstance.loopEndPollInterval) { clearInterval(videoInstance.loopEndPollInterval); } + delete videoInstance.videoDecoder; delete videoInstance.onendedCallback; delete videoInstance.frameData; videoInstance.paused = false; @@ -314,9 +329,9 @@ function _JS_Video_SetReadyHandler(video, ref, onready) { const fn = () => { console.log('_JS_Video_SetReadyHandler onCanPlay'); dynCall_vi(onready, ref); - v.videoDecoder.off('bufferchange', fn); + v.videoDecoder?.off('bufferchange', fn); }; - v.videoDecoder.on('bufferchange', fn); + v.videoDecoder?.on('bufferchange', fn); } } function _JS_Video_SetSeekedOnceHandler(video, ref, onseeked) { @@ -330,7 +345,7 @@ function _JS_Video_SetSeekedOnceHandler(video, ref, onseeked) { }); } else { - v.videoDecoder.on('seek', () => { + v.videoDecoder?.on('seek', () => { dynCall_vi(onseeked, ref); }); } @@ -406,7 +421,7 @@ function _JS_Video_SetSeekedHandler(video, ref, onseeked) { }); } else { - v.videoDecoder.on('seek', () => { + v.videoDecoder?.on('seek', () => { dynCall_vi(onseeked, ref); }); } diff --git a/package.json b/package.json index bfad7e34..66abb38f 100644 --- a/package.json +++ b/package.json @@ -1,14 +1 @@ -{ - "name": "com.qq.weixin.minigame", - "displayName": "WXSDK", - "description": "WeChat Mini Game Tuanjie Engine Adapter SDK Package.", - "version": "0.1.0", - "unity": "2019.4", - "unityRelease": "29f1", - "keywords": [ - "Tuanjie", - "WX" - ], - "dependencies": { - } -} \ No newline at end of file +{"name":"com.qq.weixin.minigame","displayName":"WXSDK","description":"WeChat Mini Game Tuanjie Engine Adapter SDK Package.","version":"0.1.1","unity":"2019.4","unityRelease":"29f1","keywords":["Tuanjie","WX"],"dependencies":{}}