lua熱重載

摘自 https://zhuanlan.zhihu.com/p/67713265

Lua作爲腳本語言嵌入遊戲開發中,寫業務的過程中會有這樣的問題,爲了查問題,在邏輯中打Log信息,需要把Unity重新運行。這個時候Lua的熱重載就顯得非常有必要了~所謂的熱重載就是不需要重啓Unity,直接更新我們Lua虛擬機裏面的方法等~達到無縫更新,能大大提高我們的工作效率。

主要思路:

package.loaded[HU.UpdateListFile] = nil

local FileList = require (HU.UpdateListFile)

首先,require函數會查看package.preload[modname](用來儲存特定模塊加載器的表),如果有值(該值應是一個函數),則改值就是要找的加載器。否則,require函數將會通過儲存在package.path中的路徑來尋找一個Lua 加載器。如果也失敗了,requier函數則會通過儲存在package.cpath中的路徑來尋找一個C 加載器。如果也失敗了,require函數將會嘗試使用一個package.loaders中的通用的加載器——all-in-one 加載器。

一旦找到加載器,require函數會傳遞一個單一的參數模塊名modname到這個加載器,如果加載器有任何的返回值,require函數會將返回的值連同模塊名modname會註冊到表 package.loaded[modname]中。如果加載器沒有返回值並且還沒有任何值連同模塊名modname會註冊到表 package.loaded[modname]中,那麼require函數將會註冊 true 到該鍵值對的入口。任何情況下,require 函數都會返回表 package.loaded[modname]最終的值。

如果在加載或者運行該模塊,亦或者完全沒有找到該模塊的加載器,則require函數會顯示error。

 

Git上面就有這個方案~附上鍊接

https://github.com/asqbtcupid/lua_hotupdate

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章