摘自 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上面就有這個方案~附上鍊接