熱更新(一) -之Lua語法的學(xué)習(xí)

熱更新

如熱更新果需要更換UI顯示,或者修改游戲的邏輯,這個(gè)時(shí)候,如果不使用熱更新,就需要重新打包,然后讓玩家重新下載(浪費(fèi)流量和時(shí)間,體驗(yàn)不好)。熱更新可以在不重新下載客戶端的情況下,更新游戲的內(nèi)容。

(1)熱更新的實(shí)現(xiàn)方式

1,使用Lua腳本編寫游戲的UI或者其他的邏輯
Lua是一個(gè)精悍小巧的腳本語言,可以跨平臺(tái)運(yùn)行解析,而且不需要編譯的過程
2,使用C#Light
3,使用C#反射技術(shù)

(2)在所有的熱更新技術(shù)中都需要AssetBundle

Unity提供了一個(gè)資源更新技術(shù),就是通過AssetBundle,我們可以通過AssetBundle更新游戲UI,也可以把腳本或者其他代碼當(dāng)成資源打包成AssetBundle然后更新到客戶端。

(3)熱更新技術(shù)的學(xué)習(xí)過程

1,學(xué)習(xí)Lua編程
2,學(xué)習(xí)通過LuaInterface和luanet進(jìn)行Lua和C#的交互通信
3,學(xué)習(xí)使用AssetBundle進(jìn)行資源更新
4,學(xué)習(xí)uLua SimpleFramework
利用us創(chuàng)建自己的熱更新游戲

Lua編程的學(xué)習(xí)

(0)編寫程序

1,找到luaforwindows的安裝目錄,找到SciTE
2,打開SciTE,寫入第一行Lua代碼
print("Hello World")
3,保存代碼,保存為HelloWorld.lua
4,按下F5運(yùn)行

(1)程序分析

Lua中每一條語句后面是沒有;號(hào)的

(2)定義變量

num = 100
這里定義了一個(gè)全局變量叫做num,賦值為100
在Lua中定義變量是沒有類型的,根據(jù)存儲(chǔ)什么數(shù)據(jù),來決定是什么類型

(3)注釋

1,單行注釋 --注釋內(nèi)容
2,多行注釋 --[[ 這里是注釋內(nèi)容 ]]--

(4)Lua中變量類型

4,number小數(shù)類型(Lua中沒有整數(shù)類型)
5,table表類型
myTable = {34,134,34,2,342,4}
myTable[2],表示134,索引是從1開始的。
我們可以使用type()來取得一個(gè)變量的類型

(5) 流程控制
-- if語句

1, if [condition] then
end
2, if [condition] then
else
end
3, if [condition] then
elseif [condition] then
else
end

-- while循環(huán)
Paste_Image.png
Paste_Image.png
--repeat循環(huán)(do while)
Paste_Image.png
Paste_Image.png
Paste_Image.png
--for循環(huán)
Paste_Image.png

break可以終止循環(huán) 沒有continue語法

(6)函數(shù)(方法)
Paste_Image.png
Paste_Image.png
--標(biāo)準(zhǔn)庫
1,數(shù)學(xué)處理的math相關(guān)函數(shù)
2,字符串處理的string相關(guān)函數(shù)
Paste_Image.png
3,表處理的table相關(guān)函數(shù)

在Lua中的table類似C#中的字典,其實(shí)就是一個(gè) key-value鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu)。
1...table的創(chuàng)建
myTable = {}
表名后面使用{}賦值,表示一個(gè)空的表
2...table的賦值
myTable[3]=34 當(dāng)鍵是一個(gè)數(shù)字的時(shí)候的賦值方式
myTable["name"]="taikr" 當(dāng)鍵是一個(gè)字符串的賦值方式
myTable.name = "siki"當(dāng)鍵是一個(gè)字符串的賦值方式
3...table的訪問
myTable[3] 當(dāng)鍵是數(shù)字的時(shí)候,只有這一種訪問方式
myTable.name 當(dāng)鍵是字符串的時(shí)候有兩種訪問方式
myTable["name"]
4...table的第二種創(chuàng)建方式
myTable = {name="taikr",age=18,isMan = false}
(表創(chuàng)建之后依然可以添加數(shù)據(jù))
數(shù)據(jù)訪問
myTable.name
myTable["name"]
5...table的第三種方式(類似數(shù)組的使用)
myTable = {34,34,34,3,4,"sdfdsf"}
當(dāng)沒有鍵的時(shí)候,編譯器會(huì)默認(rèn)給每一個(gè)值,添加一個(gè)數(shù)字的鍵,該鍵從1開始
6...表的遍歷
(1),如果是只有數(shù)字鍵,并且是連續(xù)的可以使用下面的遍歷


Paste_Image.png

(2),所有的表都可以通過下面的方式遍歷

Paste_Image.png

7...表相關(guān)的函數(shù)
(1).table.concat (只針對(duì)只有值的情況)
把表中所有數(shù)據(jù)連成一個(gè)字符串


Paste_Image.png

(2),table.insert
向指定位置插入一個(gè)數(shù)據(jù)


Paste_Image.png

(3),table.move
移動(dòng)數(shù)據(jù)

Paste_Image.png

(4),table.sort(從小到大排列的)
排序


Paste_Image.png

8...通過表來實(shí)現(xiàn)面向?qū)ο?br> myTable={} 申明對(duì)象
local this = myTable聲明this關(guān)鍵字代表當(dāng)前對(duì)象
--定義并聲明對(duì)象中的屬性
myTable.name="siki"
myTable.age = 110
--定義并聲明對(duì)象中的方法
myTable.function = function ()
[code to execute]
end
function myTable.function ()
[code to execute]
end


Paste_Image.png
4,文件操作的io相關(guān)函數(shù)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容