”热更新“ “热修复”都是在程序应用中常见的词汇 按照理解 就是动态下修改代码 从而更新代码 而不需要发布新的版本 修复或者增加新功能 常见的如:苹果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() ;
}
}
}
持续更新