
這是第422篇UWA技術(shù)知識(shí)分享的推送,精選了UWA社區(qū)的熱門話題,涵蓋了UWA問答、社區(qū)帖子等技術(shù)知識(shí)點(diǎn),助力大家更全面地掌握和學(xué)習(xí)。
UWA社區(qū)主頁:community.uwa4d.com
本期目錄:
- 在Unity轉(zhuǎn)微信小游戲下,如何用Worker實(shí)現(xiàn)多線程
- Unity的jslib庫和微信小游戲的game.js如何互相調(diào)用函數(shù)或者通信
- 如何在Unity中實(shí)現(xiàn)資源的深度復(fù)制
Script
Q:想用WebWorker計(jì)算Unity里的小球的運(yùn)動(dòng)軌跡,請(qǐng)問Unity轉(zhuǎn)微信小游戲的情況下,可以用Worker實(shí)現(xiàn)多線程嗎?
A:可以參考官方文檔:
Worker wx.createWorker(string scriptPath, object options)
功能描述:
創(chuàng)建一個(gè)Worker線程。
參數(shù):
string scriptPath
Worker入口文件的絕對(duì)路徑
object options:
可選參數(shù):
屬性:useExperimentalWorker
類型:boolean
默認(rèn)值:false
必填:否
說明:是否使用實(shí)驗(yàn)worker。在iOS下,實(shí)驗(yàn)worker的JS運(yùn)行效率比非實(shí)驗(yàn)Worker提升數(shù)倍,如需在Worker內(nèi)進(jìn)行重度計(jì)算的建議開啟此選項(xiàng)。同時(shí),實(shí)驗(yàn)Worker存在極小概率會(huì)在系統(tǒng)資源緊張時(shí)被系統(tǒng)回收,因此建議配合worker.onProcessKilled事件使用,在Worker被回收后可重新創(chuàng)建一個(gè)。
最低版本:2.13.0
返回值
Worker
Worker對(duì)象
注意事項(xiàng)
接口使用前需要在game.json(插件為plugin.json)中配置workers字段,表示W(wǎng)orker代碼根目錄。
scriptPath為入口文件的絕對(duì)路徑,且不以/開頭。
目前限制最多只能創(chuàng)建一個(gè)Worker,創(chuàng)建下一個(gè)Worker前請(qǐng)先調(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)建一個(gè)worker
createNewWorker()
})
}
// 創(chuàng)建實(shí)驗(yàn)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的時(shí)候,打包出來的game.js和WebWorker成功通信上了,但是返回的結(jié)果不知道怎么還給Unity腳本,請(qǐng)問Unity可以調(diào)用的jslib庫和打包出來的微信小游戲的game.js可以互相調(diào)用函數(shù)或者通信嗎?
A1:可參考:自定義SDK調(diào)用
微信SDK提供了WX.CallJSFunction與WX.CallJSFunctionWithReturn接口實(shí)現(xiàn)了簡單的第三方SDK調(diào)用,支持可序列化為JSON的任意數(shù)量的參數(shù)與返回值。
其中,JS側(cè)的實(shí)際調(diào)用邏輯為GameGlobal.sdkName.functionName(args),所以在調(diào)用之前需要保證SDK位于GameGlobal下且SDK中含有該名稱的function。
在WX.CallJSFunctionWithReturn中,會(huì)將函數(shù)返回值轉(zhuǎn)換為JSON后傳回,若無返回值則傳回""。
如需更加復(fù)雜的調(diào)用,可參考 WebGL:與瀏覽器腳本交互 進(jìn)行自定義定制。
版本要求
轉(zhuǎn)換插件 >= 202406062127
代碼示例
另外,在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:請(qǐng)問一個(gè)預(yù)制(網(wǎng)格+材質(zhì)+紋理) 復(fù)制一個(gè)新預(yù)制(網(wǎng)格+材質(zhì)+紋理), 新的GUID和復(fù)制的GUID都需要不同,如何才能做到?



針對(duì)以上問題,有經(jīng)驗(yàn)的朋友歡迎轉(zhuǎn)至社區(qū)交流:
https://answer.uwa4d.com/question/67c5539a3d306f3e9d594e68
封面圖來源于網(wǎng)絡(luò)
今天的分享就到這里。生有涯而知無涯,在漫漫的開發(fā)周期中,我們遇到的問題只是冰山一角,UWA社區(qū)愿伴你同行,一起探索分享。歡迎更多的開發(fā)者加入U(xiǎn)WA社區(qū)。
UWA官網(wǎng):www.uwa4d.com
UWA社區(qū):community.uwa4d.com
UWA學(xué)堂:edu.uwa4d.com
點(diǎn)擊下方名片關(guān)注我們,將我設(shè)為星標(biāo),及時(shí)接收小編每日推送哦,性能優(yōu)化不迷路~
近期精彩回顧
熱門跟貼