当前位置: 代码迷 >> 综合 >> 在Unity中使用lua
  详细解决方案

在Unity中使用lua

热度:50   发布时间:2024-02-21 01:26:25.0

lua学习直通车

我在项目中使用的是LuaFramework框架,也就是tolua

用C#的思路使用lua

1.单例类:创建一个lua脚本,TestSingle.lua

--[[------------------------------------------------]]--
TestSingle = {}
--定义一个名为name的变量
TestSingle.name = "test"
--age
TestSingle.age = 15
--公有变量,在引用了TestSingle之后就可以直接使用此变量
publicName = "公有变量"
--私有变量,只能在lua脚本内调用
local privateName = nilfunction TestSingle.Instance(obj)TestSingle.para = "添加的新变量"--调用PrivateFunc方法PrivateFunc()--私有变量赋值privateName = "私有变量"print("单例类,并返回该类")return Test
end
--TestSingle中的Func方法,可以理解为静态的公有方法
function TestSingle.Func()--定义一个局部变量,方法执行完后释放变量local temp = "局部变量"print("这是"..temp)print("运行了TestSingle.Func方法")
end
--可以理解为静态的私有方法
function PrivateFunc()print("只能在lua脚本内调用的方法====>PrivateFunc")
end
return TestSingle
--[[------------------------------------------------]]--

解释:

使用lua类需要引用require(“TestSingle”)

调用test = TestSingle.Instance()返回单例类对象

可是直接test.name使用name变量

可以直接test.Func()调用方法

如果在其他脚本里同样使用单例类,它们公用相同的对象和方法,如test2 = TestSingle.Instance()

使用test2修改了变量,则test中的变量也被修改

2.对象:创建一个lua脚本,TestObject.lua

--[[------------------------------------------------]]--
TestObject = {}
--定义一个名为version的变量,这个变量是类和对象共用的,相当于静态变量
TestObject.version = "1.0"function TestObject:New(name)--需要新建一个tablelocal o = {}--关联o和TestObjectsetmetatable(o, self)--设置原方法为TestObjectself.__index = self--为对象添加变量name并赋值o.name = name--返回对象return o
end
function TestObject:GetName()print("这个对象的name是:"..self.name)
end--TestObject中的Func方法,
function TestObject.Func()print("TestObject.Func方法")
end
--可以理解为静态的私有方法
function PrivateFunc()print("只能在lua脚本内调用的方法====>PrivateFunc")
end
return TestObject
--[[------------------------------------------------]]--

解释:

创建对象必须要有这三部,局部变量、元表、设置原方法,然后返回该对象

local o = {}

setmetatable(o, self)

TestObject self.__index = self

设置对象的变量需要使用o来创建变量,如o.index = 14,如果使用TestObject创建变量,则属于类的变量,所有的变量值都相同,相当于静态变量,所有对象的方法都需要使用: