在Unity中使用lua_Jo.H的博客-程序员信息网_unity使用lua

技术标签: Unity  lua  

lua学习直通车

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

用C#的思路使用lua

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

--[[------------------------------------------------]]--
TestSingle = {}
--定义一个名为name的变量
TestSingle.name = "test"
--age
TestSingle.age = 15
--公有变量,在引用了TestSingle之后就可以直接使用此变量
publicName = "公有变量"
--私有变量,只能在lua脚本内调用
local privateName = nil

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

解释:

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

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

或者test = require("TestSingle")

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

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

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

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

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

--[[------------------------------------------------]]--
TestObject = {}
--定义一个名为version的变量,这个变量是类和对象共用的,相当于静态变量
TestObject.version = "1.0"

function TestObject:New(name)
    --需要新建一个table
    local o = {}
    --关联o和TestObject
    setmetatable(o, self)
    --设置原方法为TestObject
    self.__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

__index的作用:外部访问对象的变量如果不存在,则去元表中寻找

设置对象的变量需要使用o来创建变量,如o.index = 14,如果使用TestObject创建变量,则属于TestObject的变量,TestObject作为对象只有一个,可理解成静态

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/csdn1987/article/details/108715909

智能推荐

sklearn之train_test_split()解析_愤怒的汽水的博客-程序员信息网_sklearn spilt

train_test_split()是sklearn.cross_validation模块中用来随机划分训练集和测试集,以Iris数据集为例。有以下四个特征sepal length in cmsepal width in cmpetal length in cmpetal width in cm分为3个类别:Iris SetosaIris VersicolourIris V...

keras 报错 ValueError: Tensor conversion requested dtype int32 for Tensor with dtype float32: 'Tensor(..._weixin_30340617的博客-程序员信息网

在服务器上训练并保存模型,复制到本地之后load_model()报错:ValueError: Tensor conversion requested dtype int32 for Tensor with dtype float32: 'Tensor("embedding_1/random_uniform:0", shape=(5001, 128), dtype=float32)'..._1671465600

DUPLICATE_彦祖的小号的博客-程序员信息网

Use theDUPLICATEcommand to create a copy of asource database. RMAN can create either a duplicate database or a standby database.RMAN can perform the duplication in any of the following supported modes:Active duplicationRMAN duplicates the files d...

MySQL多表联查_kiuan_795的博客-程序员信息网_mysql多表联查

一、多表查询1.表与表之间的关系一对一​ 通过嵌套的方式一对多【多对一】​ 添加外键多对多​ 单独创建一张新的表2.合并结果集作用:将两个select语句的查询结果合并到一起两种方式:​ union:去除重复记录【并集】​ union all;获取所有的结果演示:#创建表mysql> create table A( name varchar(10), score int ..

微信小程序 页面中的swiper组件有时不显示原因_星雪之域的博客-程序员信息网

问题描述A页面中使用了swiper组件,在反复跳转进入该页面时,有时会出现swiper显示不出来的情况,但元素位置还是占据着。解决办法其实是swiper-item显示不出来,可能是在swiper-item上加入了自定义样式,导致有时没能获取到swiper-item,从而显示不出,应去掉swiper-item上的样式,单独使用view包裹下入样式即可。...

数据库报duplicate XXX entry for key primary错误的可能原因以及解决方法_时光清浅,不觉多年的博客-程序员信息网_duplicate entry

今天在使用数据库的过程中,发现一直报duplicate entry for key primary的错误,如下图所示:这个问题直译过来就是主键设置重复,或者说是主键冲突,因为第一次碰到这样的问题,有些不明所以,就在网上差了一些资料,发现了这么一篇文章 ======> 这是文章链接其中说到这种情况的可能原因有两种:主键没有设置自增插入线程频率较高,没有处理好事务,造成插入sql执行顺序混乱该文章中也给予了对应的解决方案,可以参考。不过这篇文章中所说到的情况并不适应于我今天遇到的问题

随便推点

C++ 智能指针share_ptr 和weak_ptr的实现_帅B猪的博客-程序员信息网

class Count{public:Count()????(0),w(0){}int s;//share指针计数int w;//weak指针计数};templateclass Weak_ptr;//先引用templateclass Share_ptr{T * ptr;//管理的指针Count * cnt;//计数public:Share_ptr(T * p = 0):ptr§//构造函数{ptr = p;cnt = new Count();}Share_ptr(Sh

Button按钮提交from表单并验证之后数据清空_Java-云海的博客-程序员信息网_button 怎么对form里面的数据进行验证

最近在项目中新增了一个页面,页面包含了四个同级的table。提交from表单的时候同事给介绍了一种方式,比较实用,在这里写个Demo分享给大家。

CI持续集成系统环境---部署gerrit环境完整记录_sheji105的博客-程序员信息网

开发同事提议在线上部署一套gerrit代码审核环境,废话不多说,部署gerrit的操作记录如下:提前安装好java环境,mysql环境,nginx环境测试系统:centos6.5下载下面三个包,放到/root目录下(下载地址:http://pan.baidu.com/s/1nuP0X9R (提取密码gqj5))mysql-connector-java-5.1.21.jarbcpkix-j...

windows驱动读取gdtr_(四) 由16位元真實模式 (Real Mode) 進入32位元保護模式 (Protect Mode)..._weixin_39603469的博客-程序员信息网

(四) 由16位元真實模式 (Real Mode) 進入32位元保護模式 (Protect Mode)前三篇文章所展示的程式碼都是CPU執行於真實模式 (Real Mode)。然而,一般作業系統運行於保護模式 (Protect Mode),其記憶體定址最高可至4GB (32位元)。故本文先介紹real mode與protect mode記憶體定址的方式。Real mode與Protect mode...

对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析_五彩铅笔的博客-程序员信息网_pg数据库对硬件要求高吗

对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析 Oracle DatabaseOracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各

keras报错:TypeError: Value passed to parameter 'input' has DataType bool not in list of allowed values_qian_fighting的博客-程序员信息网

keras代码报错:TypeError: Value passed to parameter 'input' has DataType bool not in list of allowed values: float32, float64, int32, uint8, int16, int8, complex64, int64, qint8, quint8, qint32, bfloat16..._1671465600

推荐文章

热门文章

相关标签