這是第422篇UWA技術(shù)知識分享的推送,精選了UWA社區(qū)的熱門話題,涵蓋了UWA問答、社區(qū)帖子等技術(shù)知識點,助力大家更全面地掌握和學(xué)習(xí)。
UWA社區(qū)主頁:community.uwa4d.com
本期目錄:
- 在Unity轉(zhuǎn)微信小游戲下,如何用Worker實現(xiàn)多線程
- Unity的jslib庫和微信小游戲的game.js如何互相調(diào)用函數(shù)或者通信
- 如何在Unity中實現(xiàn)資源的深度復(fù)制
Script
Q:想用WebWorker計算Unity里的小球的運動軌跡,請問Unity轉(zhuǎn)微信小游戲的情況下,可以用Worker實現(xiàn)多線程嗎?
A:可以參考官方文檔:
Worker wx.createWorker(string scriptPath, object options)
功能描述:
創(chuàng)建一個Worker線程。
參數(shù):
string scriptPath
Worker入口文件的絕對路徑
object options:
可選參數(shù):
屬性:useExperimentalWorker
類型:boolean
默認(rèn)值:false
必填:否
說明:是否使用實驗worker。在iOS下,實驗worker的JS運行效率比非實驗Worker提升數(shù)倍,如需在Worker內(nèi)進(jìn)行重度計算的建議開啟此選項。同時,實驗Worker存在極小概率會在系統(tǒng)資源緊張時被系統(tǒng)回收,因此建議配合worker.onProcessKilled事件使用,在Worker被回收后可重新創(chuàng)建一個。
最低版本:2.13.0
返回值
Worker
Worker對象
注意事項
接口使用前需要在game.json(插件為plugin.json)中配置workers字段,表示W(wǎng)orker代碼根目錄。
scriptPath為入口文件的絕對路徑,且不以/開頭。
目前限制最多只能創(chuàng)建一個Worker,創(chuàng)建下一個Worker前請先調(diào)用Worker.terminate。
多線程Worker指南(小游戲)。
示例代碼
// 創(chuàng)建普通worker
wx.createWorker('workers/index.js')
function createNewWorker() {
const worker = wx.createWorker('workers/index.js', {
useExperimentalWorker: true
})
// 監(jiān)聽worker被系統(tǒng)回收事件
worker.onProcessKilled(() => {
// 重新創(chuàng)建一個worker
createNewWorker()
})
}
// 創(chuàng)建實驗worker
createNewWorker()
官方文檔鏈接:
https://developers.weixin.qq.com/minigame/dev/api/worker/wx.createWorker.html
感謝左君博@UWA問答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
https://answer.uwa4d.com/question/67c559603d306f3e9d594e69
Script
Q:做WebWorker的時候,打包出來的game.js和WebWorker成功通信上了,但是返回的結(jié)果不知道怎么還給Unity腳本,請問Unity可以調(diào)用的jslib庫和打包出來的微信小游戲的game.js可以互相調(diào)用函數(shù)或者通信嗎?
A1:可參考:自定義SDK調(diào)用
微信SDK提供了WX.CallJSFunction與WX.CallJSFunctionWithReturn接口實現(xiàn)了簡單的第三方SDK調(diào)用,支持可序列化為JSON的任意數(shù)量的參數(shù)與返回值。
其中,JS側(cè)的實際調(diào)用邏輯為GameGlobal.sdkName.functionName(args),所以在調(diào)用之前需要保證SDK位于GameGlobal下且SDK中含有該名稱的function。
在WX.CallJSFunctionWithReturn中,會將函數(shù)返回值轉(zhuǎn)換為JSON后傳回,若無返回值則傳回""。
如需更加復(fù)雜的調(diào)用,可參考 WebGL:與瀏覽器腳本交互 進(jìn)行自定義定制。
版本要求
轉(zhuǎn)換插件 >= 202406062127
代碼示例
示例中的"sdk"、"testFunction"、TestFunctionOption僅作為演示,實際使用中請自行更改。
WeChatWASM.WX.CallJSFunction("sdk", "testFunction", new TestFunctionOption { type = "text", text = "反饋", style = new OptionStyle() { left = 10, top = 10, width = 100, height = 100, backgroundColor = "#ff0000", color = "#ffffff", textAlign = "center", fontSize = 20, borderRadius = 10, lineHeight = 100, } });
另外,在js側(cè)代碼中合適位置添加以下代碼,可配合構(gòu)建模版能力使用。
GameGlobal["sdk"] = sdk;
官方文檔鏈接:
https://wechat-miniprogram.github.io/minigame-unity-webgl-transform/Design/CustomSDK.html#自定義SDK調(diào)用
感謝袁梓民@UWA問答社區(qū)提供了回答
A2:可以使用SendMessage的方法。
感謝Hong@UWA問答社區(qū)提供了回答
A3:也可以使用moduleHelper.send方法,用反射調(diào)用和傳參。
感謝左君博@UWA問答社區(qū)提供了回答,歡迎大家轉(zhuǎn)至社區(qū)交流:
https://answer.uwa4d.com/question/67c55a77682c7e5cd61bfa0e
Asset
Q:請問一個預(yù)制(網(wǎng)格+材質(zhì)+紋理) 復(fù)制一個新預(yù)制(網(wǎng)格+材質(zhì)+紋理), 新的GUID和復(fù)制的GUID都需要不同,如何才能做到?
針對以上問題,有經(jīng)驗的朋友歡迎轉(zhuǎn)至社區(qū)交流:
https://answer.uwa4d.com/question/67c5539a3d306f3e9d594e68
封面圖來源于網(wǎng)絡(luò)
今天的分享就到這里。生有涯而知無涯,在漫漫的開發(fā)周期中,我們遇到的問題只是冰山一角,UWA社區(qū)愿伴你同行,一起探索分享。歡迎更多的開發(fā)者加入UWA社區(qū)。
UWA官網(wǎng):www.uwa4d.com
UWA社區(qū):community.uwa4d.com
UWA學(xué)堂:edu.uwa4d.com
點擊下方名片關(guān)注我們,將我設(shè)為星標(biāo),及時接收小編每日推送哦,性能優(yōu)化不迷路~
近期精彩回顧
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務(wù)。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.