uLua的基礎(chǔ)學(xué)習(xí)

? ? ”熱更新“ “熱修復(fù)”都是在程序應(yīng)用中常見的詞匯 按照理解 就是動態(tài)下修改代碼 從而更新代碼 而不需要發(fā)布新的版本 修復(fù)或者增加新功能 常見的如:蘋果app應(yīng)用中 開發(fā)者無需從新提交版本審核 直接就可以動態(tài)下增加功能與修改BUG 避免長時間應(yīng)用審核以及多次被蘋果拒絕而造成的成本。

Step1:下載最新uLua插件 ulua_v1.25.unitypackage 導(dǎo)入工程

Step2:我們按照它的Demo來學(xué)習(xí)相關(guān)知識

Step3: 腳本里都要導(dǎo)入命名空間 LuaInterface


Demo1 : 輸出 hello world

demo的寫法: 這樣 unity輸出控制臺就能輸出hello world ?是不是一定要這樣寫呢? 我嘗試了下另外一種寫法?

void ?Start()

{

?LuaState l = new LuaState() ;

string ?str = @"print('hello world')"?

l .DoString(str)?

}

我的寫法:我是這么想的 為啥不可以直接輸出呢? 在單獨(dú)lua編寫中 寫一個字符串是var = 'hello world' ? 現(xiàn)在寫在untity里面 那么就要轉(zhuǎn)換 那么 我猜 I,DoString(str)的作用就是在unitu里執(zhí)行l(wèi)ua代碼轉(zhuǎn)換成可以識別的unity代碼 ?然后根據(jù)內(nèi)部的封裝規(guī)則 規(guī)定好 I["var"]是拿到這個字符串 注:string = @"" ; @的作用是自動換行陳列 沒有其他的含義

void Start()

{

LuaState l = new LuaState()

string str = "var = @'hello world'"

l.DoString(str)?

print(l["var"].ToString())?

}


Demo2: ?用非反射的方式創(chuàng)建一個粒子特效對象

demo寫法:uLua 都是將要執(zhí)行的uLua代碼寫成string類型 然后用封裝的類對調(diào)用它 LuaScriptMgr 配套使用lua.Start() ; ?DoString(script)語法的含義是在c#中執(zhí)行Lua語句 ? start()里面的語句我是這么理解 首先你要告訴lua 我要引入c#中unityEngine頭文件的對象 然后告訴它具體的類型?

然后創(chuàng)建對象 然后添加組件

public class CreatGameObject:MonBehaviour

{

private string script = @"

luanet.load_assembly('UnityEngine')

GameObject = UnityEngine.GameObject

ParticleSystem = UnityEngine.ParticleSystem

local newGameObj = GameObject('NewObj')

newGameObj:AddComponent(ParticleSystem.GetClassType())" ;

void Start()

{

LuaScriptMgr lua = new LuaScriptMgr() ;

lua.Start();

lua.DoString(script) ;

}


public class AccessingLuaVariables:MonoBehaviour

{

? // cstolua要求必須先定義變量才能使用

?private string var = @"Objs2Spawn = 0" ;

private string script = @"

?lucent.load_assembly('UnityEngine')

ParticleSystem = UnityEngine.ParticleSystem

particles = {}

for i = 1,Objs2Spawn,1 do

local newGameObj = GameObject('NewObj'..toString(i))

local ps = newGameObj:AddComponent(ParticleSystem.GetClassType())

ps.Stop();

table.insert(particle,ps)

end

var2read = 42

" ;

void Start()

{

? ?LuaScriptMgr mgr = new LuaScriptMgr()

? mgr.Start() ;

LuaState l = mgr.lua ;

l.DoString(var) ;

l["Objs2Spawn"] = 5 ;

l.DoString(script);

print("Read from Lua:" + l["var2read"].ToString())

LuaTable particles = (LuaTable)l["particles"] ;


foreach(ParticleSystem ps in particles.Values)

{

ps.Play() ;

}

}

}


持續(xù)更新


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

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

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