打開網(wǎng)易新聞 查看精彩圖片

這是第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都需要不同,如何才能做到?

打開網(wǎng)易新聞 查看精彩圖片
打開網(wǎng)易新聞 查看精彩圖片
打開網(wǎng)易新聞 查看精彩圖片

針對(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)化不迷路~

近期精彩回顧