using UnityEngine;
using System.Collections;
using LuaInterface;
publicclass AccessingLuaVariables01 : MonoBehaviour {
privatestring script = @"
luanet.load_assembly('UnityEngine')
GameObject = luanet.import_type('UnityEngine.GameObject')
ParticleSystem = luanet.import_type('UnityEngine.ParticleSystem')
particles = {}
for i = 1, Objs2Spawn, 1 do
local newGameObj = GameObject('NewObj' .. tostring(i))
local ps = newGameObj:AddComponent(luanet.ctype(ParticleSystem))
--local ps = newGameObj:AddComponent('ParticleSystem') PS:Unity5.x已经废弃这种方式,Unity4.x可用--
ps:Stop()
table.insert(particles, ps)
end
var2read = 42
";
// Use this for initializationvoid Start () {
LuaState l = new LuaState();
// Assign to global scope variables as if they're keys in a dictionary (they are really)
l["Objs2Spawn"] = 5;
l.DoString(script);
// Read from the global scope the same way
print("Read from lua: " + l["var2read"].ToString());
// Get the lua table as LuaTable object
LuaTable particles = (LuaTable)l["particles"];
// Typical foreach over values in tableforeach( ParticleSystem ps in particles.Values )
{
ps.Play();
}
}
// Update is called once per framevoid Update () {
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
非反射方式
using UnityEngine;
using System.Collections;
using LuaInterface;
publicclass LuaTest02 : MonoBehaviour {
stringvar=@"sum =10";
string script =@"
ParticleSystem = UnityEngine.ParticleSystem;
GameObject = UnityEngine.GameObject;
for i=1,sum, 1 do
obj = GameObject('obj');
obj:AddComponent(ParticleSystem:GetClassType())
end
";
// Use this for initializationvoid Start () {
LuaScriptMgr mgr = new LuaScriptMgr();
mgr.Start();//必须有这句话,否则Lua脚本无法正常执行
LuaState l = mgr.lua;
l.DoString(var);
l.DoString(script);
}
// Update is called once per framevoid Update () {
}
}