uLua的基础学习

    ”热更新“ “热修复”都是在程序应用中常见的词汇 按照理解 就是动态下修改代码 从而更新代码 而不需要发布新的版本 修复或者增加新功能 常见的如:苹果app应用中 开发者无需从新提交版本审核 直接就可以动态下增加功能与修改BUG 避免长时间应用审核以及多次被苹果拒绝而造成的成本。

Step1:下载最新uLua插件 ulua_v1.25.unitypackage 导入工程

Step2:我们按照它的Demo来学习相关知识

Step3: 脚本里都要导入命名空间 LuaInterface


Demo1 : 输出 hello world

demo的写法: 这样 unity输出控制台就能输出hello world  是不是一定要这样写呢? 我尝试了下另外一种写法 

void  Start()

{

 LuaState l = new LuaState() ;

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

l .DoString(str) 

}

我的写法:我是这么想的 为啥不可以直接输出呢? 在单独lua编写中 写一个字符串是var = 'hello world'   现在写在untity里面 那么就要转换 那么 我猜 I,DoString(str)的作用就是在unitu里执行lua代码转换成可以识别的unity代码  然后根据内部的封装规则 规定好 I["var"]是拿到这个字符串 注:string = @"" ; @的作用是自动换行陈列 没有其他的含义

void Start()

{

LuaState l = new LuaState()

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

l.DoString(str) 

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

}


Demo2:  用非反射的方式创建一个粒子特效对象

demo写法:uLua 都是将要执行的uLua代码写成string类型 然后用封装的类对调用它 LuaScriptMgr 配套使用lua.Start() ;  DoString(script)语法的含义是在c#中执行Lua语句   start()里面的语句我是这么理解 首先你要告诉lua 我要引入c#中unityEngine头文件的对象 然后告诉它具体的类型 

然后创建对象 然后添加组件

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() ;

}

}

}


持续更新


你可能感兴趣的:(uLua的基础学习)