精华内容
下载资源
问答
  • 众所周知Unity的开发...其中XLua是腾讯开发的目前行业做游戏热更新最常用的框架,本篇文章就是为了简单介绍两种如何在unity中使用lua语言做到像c#一样的组件化开发模式。 一、git下载xlua框架: 前往github下载xl.

    众所周知Unity的开发语言是C#,并不支持Lua语言,为了解决这一问题出现了诸如Xlua、ULua、ToLua等框架来让unity支持lua,由于为了应对众多游戏经常需要解决的热更新问题,出了两种主流开发模式:

    1. 开发语言仍然用C#,用lua做热更新。
    2. 开发语言和热更新完全采用lua语言。

    其中XLua是腾讯开发的目前行业做游戏热更新最常用的框架,本篇文章就是为了简单介绍两种如何在unity中使用lua语言做到像c#一样的组件化开发模式。

     

    一、git下载xlua框架:

    前往github下载xlua框架:https://github.com/Tencent/xLua

     

    得到后把Xlua空间Asset目录下的全部文件放到新建的Unity项目的Asset中就可以了。

    二、搭建C#调用Lua环境:

    第一种方式是通过C#间接调用Lua实现组件化模式:

    首先在场景中创建一个空节点挂上新建的GameLaunch.cs脚本,搭建好C#调用Lua的运行环境:

    using System.Collections;
    using System.Collections.Generic;
    using System.IO;
    using UnityEngine;
    using XLua;
    
    public class GameLaunch : MonoBehaviour
    {
        private LuaEnv luaEnv = null;
    
        //将Lua读取为字节流
        public static byte[] SafeReadAllBytes(string inFile)
        {
            try
            {
                if (string.IsNullOrEmpty(inFile))
                {
                    return null;
                }
    
                if (!File.Exists(inFile))
                {
                    return null;
                }
    
                File.SetAttributes(inFile, FileAttributes.Normal);
                return File.ReadAllBytes(inFile);
            }
            catch (System.Exception ex)
            {
                Debug.LogError(string.Format("SafeReadAllBytes failed! path = {0} with err = {1}", inFile, ex.Message));
                return null;
            }
        }
    
        //装载器
        public static byte[] CustomLoader(ref string filePath)
        {
            string scriptPath = string.Empty;
            scriptPath = Path.Combine(Application.dataPath, "LuaScripts"); //路径变成Asset/LuaScripts
            scriptPath = Path.Combine(scriptPath, filePath); 
    
             Debug.Log("Custom Load lua script : " + scriptPath);
            return SafeReadAllBytes(scriptPath);
        }
    
        public void Init()
        {
            this.luaEnv = new LuaEnv(); 
            if (this.luaEnv != null)
            {
                this.luaEnv.AddLoader(CustomLoader);
            }
        }
    
        public void SafeDoString(string scriptContent)
        { // 执行脚本, scriptContent脚本代码的文本内容;
            if (this.luaEnv != null)
            {
                try
                {
                    luaEnv.DoString(scriptContent); // 执行我们的脚本代码;
                }
                catch (System.Exception ex)
                {
                    string msg = string.Format("xLua exception : {0}\n {1}", ex.Message, ex.StackTrace);
                    Debug.LogError(msg, null);
                }
            }
        }
    
        public void LoadScript(string scriptName)
        { 
            SafeDoString(string.Format("require('{0}')", scriptName)); //
        }
    
        public void EnterLuaGame()
        { // 进入游戏 
            if (this.luaEnv != null)
            {
                this.LoadScript("MainLua.lua");  
            }
        }
    
        private void Awake()
        {
            this.Init();
        }
    
        void Start()
        {
            this.EnterLuaGame();
        }
    
        void Update()
        {
            
        }
    }
    

    这里我们规定路径是在Asset/LuaScripts下创建Lua脚本,比如上面我们暂时固定让他调用MainLua.lua,然后加入一个打印方法:

    运行:

    三、基于C#调用Lua

    环境没有问题之后,就是利用C#来间接实现Lua组件化模式,在MainLua.lua中加入OnAwake,OnStart,OnUpdate等组件化方法:

    然后在GameLanch.cs的组件化方法中调用:

    这样就将组件中常用的方法都调用到了,接下来比如我们在OnAwake中创建一个Cube对象:

    print("Main Lua!")
    
    MainLua = {}
    UnityEngine = CS.UnityEngine
    GameObject = UnityEngine.GameObject
    
    function  OnAwake()
    	print("MainComponent:OnAwake")
    
        gameObejct = GameObject.CreatePrimitive(UnityEngine.PrimitiveType.Cube)
        gameObejct.transform.localPosition = UnityEngine.Vector3(1, 1, 1)
    end
    
    local function  OnStart()
    	print("MainComponent:OnStart")
    end
    
    local function  OnUpdate()
    	print("MainComponent:OnUpdate")
    end
    
    MainLua.OnAwake = OnAwake
    MainLua.OnStart = OnStart
    MainLua.OnUpdate = OnUpdate
    
    return MainLua

    运行:

    这样也创建出来了,如果要使用Unity引擎中的API,就通过Xlua封装的CS.UnityEngine就可以了,虽然这样做到了lua组件化开发,但毕竟还是借助了C#脚本,后面奎斯会介绍另一种纯Lua的方式来实现组件化,除了Xlua的启动入口脚本GameLaunch外,其他任何节点对象上不用挂载任何C#脚本

    展开全文
  • 相对于使用cocos studio + cocos2dx开发模式,使用cocos creator的组件化开发更为高效和简洁 以按钮myButton节点的点击音效为例: 1:cocos studio + cocos2dx 步骤如下(Lua语言): 需要实现监听函数 local function...

    相对于使用cocos studio + cocos2dx开发模式,使用cocos creator的组件化开发更为高效和简洁
    以按钮myButton节点的点击音效为例:
    1:cocos studio + cocos2dx 步骤如下(Lua语言):
    需要实现监听函数

    local function clickMyButton()
            --播放音效
    end
    

    并为myButton添加监听事件

    myButton:addClickEventListener(clickMyButton)
    

    并且每个按钮添加音效过程都需要以上重复代码

    2:cocos creator 步骤如下(TypeScript语言):
    实现组件ClickButtonSound.ts文件,内容为

    export default class ClickButtonSound extends cc.Component {
        onLoad () {
            this.node.on(cc.Node.EventType.TOUCH_END, ()=>{
               --播放音效
            });
        }
    }
    

    在打开的cocos creator场景中,哪个按钮需要点击音效,直接在此按钮的属性检查器中
    添加此用户脚本组件即可完成,或者拖拽此脚本组件到对应节点的属性检查器中即可。

    展开全文
  • 由于前端使用了新的unity3d,然而unity3d就是基于组件开发构建起来的。然而服务器这边则是采用了很传统的类抽象模式。一直以为MVC模式可能是一种很好的方式,并没有做很详尽的理解,但是用在unity3d里面感觉并不适用...

    由于前端使用了新的unity3d,然而unity3d就是基于组件开发构建起来的。然而服务器这边则是采用了很传统的类抽象模式。一直以为MVC模式可能是一种很好的方式,并没有做很详尽的理解,但是用在unity3d里面感觉并不适用,并且也被明确告知了unity3d并没有很明显的界定MVC。另外客户端原来讨论的时候一度提出过使用脚本,服务器这里任务系统也是用的lua脚本来构建的。很不理解为什么需要这么组织,这种组织的方式有什么优势。即使用脚本了,灵活度得到提升了。最后的理解被答疑为代码的灵活组合,再到热更新的问题。的确脚本化有这个优势,但是这不代表用配表的方式就不能做。后来在去看客户端的对于内存构建的时候,采用和服务器一致的管理模型方式。为什么unity3d要采用这种组件化的方式呢,为什么不类似于cocos那种基于MVC的整体抽象,组件化开发的优势在哪里?这恰恰成为了最近思考的主因,也成为了搜索的目的。

    就如同发现新大陆一样的,构建方式!

    服务器的组织方式是这种的:

    j1

    一个典型的,看上去非常不错的继承体系。

    仔细梳理出一个链条来看,由于他这是参考的客户端代码所以有Renderable,Animatable等继承关系,暂时忽略掉,如下图:

    j2

    可能哪一天吧,一个已经存在的对象不能移动了,再或者装备需要新的属性特性来做扩充,道具的种类扩容限制条件增加,再或者由于原来的类命名不合适,做继承的时候造成了代码的“混乱”语义混淆,而这些都是可能遇到的需求问题。我们所能够做的就是重构代码块,调整继承树关系,再或者暴力一点的没设计好砍掉这个功能。而这个继承树就成为了头重脚轻的代表了。

    在看下图,不用is-a的继承,而是面向接口基于has-a的组合方式来构建对象实例的话,有一些需求变动就不存在问题。如果功能获得扩充add就可以了。现在项目的任务系统给了我一些启发,任务系统的构建具有很高的独立性,通过脚本化的组合来实现不同任务的需求,适合游戏开发中经常反复的过程。那么延伸出来游戏的实体对象也类似,或者更激进一些对象需要什么行为完全交给策划自己去组合一个新的对象出来。一个完全由数据驱动的系统,而摆脱限制。对象不具有任何意义,只是按照会飞,会走的,会放技能的惊醒的对象管理和划分。类在做抽象的时候,可能就简单到对应一个策划表的一些基本属性就够了。而抛开了纷繁的方法定义在函数内。

    j5

    参考博客的一篇评价:

        本文描述的基于组件的对象系统,适合在游戏开发中经常反复的过程。由于对象没有固定的类型概念,所有的对象都是动态地由组件组合而成,而这些组件都统一由一个管理器来进行约束。相比传统的基于继承的方法,这种方法带来三大优势:一是方便创建和修改复杂的类型,由于不再需要改动庞大的继承树,绕开了语言的静态限制,客户端可以在不修改代码的前提下,创建任意类型的对象。二是由于组件是对于接口设计的,这就强迫设计者实现一些高内聚低耦合的组件,也有助于游戏层的整体设计。最后由于可以动态地查询组件类型信息,做一个拥有图形界面的、支持游戏内容的debugger变得可能了——摆弄对象的企划可以实时查阅对象的能力、状况,在传统方式下要实现类似的功能恐怕是相当繁琐的。有得必有失,基于组件的方法由于必须实现一个基类,定义虚接口,在某些无需vtable的简单情况下造成了一定的性能开销。此外,每次查询接口引起的开销也值得引起重视。

     

    类比于cocos MVC的抽象,早起cocos2d是基于OC语言的,那个时候的一篇博文,倒是也说明了一些问题。这个问题,一下为原文:

    当我们在cocos2d论坛里面提到“是否继承CCSprite还是使用一些model类来构建你的游戏对象结构?”这样的问题的时候,我还是要再强调一点,多用组合,少用继承!如果一味地使用继承,那么当游戏世界里面的对象种类变多,功能变复杂以后,会导致整个继承树“头重脚轻”,严重破坏了良好的面向对象设计原则---我们设计的类层次结构应该是扁平结构的,而不是一个头很大的树。

        那么,我们需要使用怎样的架构来处理游戏里面的对象呢?答案就是使用组合。现在已经有一些非常好的引擎,比如TorqueXPushButton Engine、Unity3D等,它们都是基于组合的实体组件系统。

     

    自我思考:

         现在服务器尽量采用了单一职责,一个模块,一个类,一个manager,一个文件做一一对应的逻辑划分。很好的避免了头重脚轻的方式。这也是开始对于背包和装备装上和装下理解的不足,从而先做出来了一个背包基类的概念。显然违背了一个基本的设计原则就是扁平化。紧跟着延伸到数据库存储的设计就已经不合适了。

         那么服务器能不能采用,这种基于组合方式的代码组织方式呢?由于没有见到过类似的服务器,也不知道别人有没有这么做的,因为一个新的东西肯定还是有很多问题需要解决的,可能丢了西瓜捡了一个芝麻也说不定呢?现在能想到的优势就是,由于组件化了,单元测试成为了可能,在最终服务器做逻辑拼合的时候,其实已经零碎到组合的小函数上了,至少在添加新的模块的时候或者项目过于庞大的时候,一种基于单元测试的全回归能提前排查出来很多问题避免改东边落下西边的问题,单元测试也使得服务器也可以适度的抛开客户端连接调试才能查错的问题。但是劣势也是明显的,如果对于游戏本身了解不是很深入,可能在定义高内聚低耦合的函数接口的时候就已经抽象不出来了因为不知道什么函数具有公共特性适于组合。

    参考博客:

    1.http://job.17173.com/content/2009-08-07/20090807104220649,1.shtml 

    《一个基于组件的动态对象系统》

    2.http://www.cnblogs.com/zilongshanren/archive/2012/03/11/2390074.html 

    《cocos2d里面如何实现MVC》系列

    转载于:https://www.cnblogs.com/flashbird/p/4420426.html

    展开全文
  • Lua开发

    2008-06-07 21:04:08
    Script.NET采用类似于Eclipse的插件化开发方式,大部分功能都以插件的形式提供,可以灵活扩展,除了用于脚本开发之外,也可以扩展为各种富客户端应用程序。 Script.NET从2000年开始开发,发布过V1.0和V2.0两个大...
  • 初识Lua语言

    千次阅读 多人点赞 2020-02-13 17:12:34
    Lua语言作为一门胶水语言,支持组件化的软件开发方式,通过整合已有的高级组件可以轻松构建新的应用。在软件中台化开发模型中,Lua势必会扮演十分重要的角色。 当然,Lua还有其他特性和优点, Lua的运用场合也有其他...

    Lua语言从一开始就被设计为能与c/c++及其他常用语言开发的软件集成在一起使用的语言。Lua语言作为一门胶水语言,支持组件化的软件开发方式,通过整合已有的高级组件可以轻松构建新的应用。在软件中台化开发模型中,Lua势必会扮演十分重要的角色。

    当然,Lua还有其他特性和优点, Lua的运用场合也有其他,这里就不再赘述,接下来进入正题。

    1、Lua解析器

    学习Lua语言还是从helloworld开始。在Linux环境中:
    在这里插入图片描述
    或者你将打印“helloworld”的代码保存在本地文件hello.Lua中,然后运行它:在这里插入图片描述]不论是在命令行的,还是保存在文件的“print(“helloworld”)”,都称它们为一个程序段(chunk)。程序段即一组命令或者表达式组成的序列。程序段在没有大小上的限制,所以chunk可以只由一句表达式构成,也可以由多个表达式和函数定义构成。

    我们可以直接在交互模式下运行解析器:
    在这里插入图片描述
    接下来我们输入的每一条表达式然后回车后将立即执行。需要注意的是,从Lua5.3版本开始我们可以直接在交互模式下输入表达式,Lua会输出表达式的值:
    在这里插入图片描述
    但在Lua5.3之前的版本需要在表达式前面加上一个等号:
    在这里插入图片描述
    当然了,为了向下兼容,Lua5.3版本也支持表达式前面加等号的语法。

    说明:我的环境中/usr/local/bin/lua是5.3版本的Lua,/usr/bin/lua是5.1.4版本的Lua。默认是运行/usr/local/bin/lua。另外,同样是15的平方,5.3版本的Lua运算结果是225.0,在这之前的版本是225,这个跟版本的默认数值类型有关,后续会介绍。

    在交互模式下,解析器会把我们输入的每一行当作完成的chunk或者表达式执行,若发现我们输入的某一行不完整那么它会等到chunk或者表达式完整后再进行解释执行。在http://www.lua.org/ftp/上可以下载到Lua的源代码,编译生成的lua可执行程序即为Lua解析器。Lua可执行程序的完整参数为:

    lua  [options]  [script  [args] ]
    

    []表明所有的参数都是可选的,我们可以使用-i选项让Lua解析器执行完指定的chunk后进入交互模式:
    在这里插入图片描述
    调用dofile函数,该函数会立即执行一个文件:
    在这里插入图片描述
    如上,1_hello.lua定义了函数hello(),我们通过dofile()加载后再调用该函数。

    -e选项允许我们直接在命令行输入代码:
    在这里插入图片描述
    -l选项用于加载库:
    在这里插入图片描述
    库代码位于1_hello.c中,使用-l选项时不需要加上.lua后缀。

    Lua程序可以通过预先定义的全局变量arg去解析器传入的用户参数,例如:

    $  lua  test.lua  a  b  c
    

    解析器在运行代码前创建一个名为arg的表,其中存储了所有命令行参数,索引0中保存的内容为脚本名称,索引1中保存的内容为a,以此类推;在脚本名称之前的所有选项则位于负数索引值之上,如:

    $  lua  -e  “sin=math.sin”  test.lua  a  b  c
    

    解析器获取参数:

    arg[-3]= “lua”
    arg[-2]= “-e”
    arg[-1]= “sin=math.sin”
    arg[0]= “test.lua”
    arg[1]= “a”
    arg[2]= “b”
    arg[3]= “c”
    

    2、类型和值

    c/c++中定义一个变量必须指明该变量的类型(以让编译器明确该变量占据的内存大小),但在Lua中却不需要该指明。Lua语言是一种动态类型语言,在这种语言中变量不需要定义类型,不过每个值还是带有其自身的类型信息。

    Lua有8种基本类型:
    nil(空)、number(数值)、boolean(布尔)、string(字符串)、userdata(用户数据)、function(函数)、thread(线程)、table(表)。函数type()可以获取一个值对应的类型名称:
    在这里插入图片描述
    nil和Boolean比较简单,下面简单介绍下这两种类型。Lua中的变量没有预定义的类型,任何变量可以包含任何类型的值:
    在这里插入图片描述

    使用未经初始化的全局变量也不会导致报错,当使用未初始化的全局变量时得到结果是nil;Lua使用nil来表示无效值,把nil赋给全局变量时Lua会回收该全局变量。不过,我们不提倡将一个变量用作不同类型,因为会降低代码的可读性。

    Boolean类型的值只具有两个取值情况,即true和false,需要注意的是,Lua中将Boolean值false和nil外的所有值都视为真,零值和空字符串也被视为真。

    Lua支持常见的逻辑运算符:and、or和not。and的运算结果是:若表达式的第一个操作数为“false”则返回第一个操作数,否则返回第二个操作数;or的运算结果是:如果表达式的第一个操作数不为false则返回第一个操作数,否则返回第二个操作数。例如:
    在这里插入图片描述

    跟c/c++类似,Lua的and和or也支持短路原则,即只有在必要时才对第二个操作数进行求值。

    not运算符永远返回Boolean类型的值:
    在这里插入图片描述
    其他类型,下文总结。

    参考书籍:《Lua程序设计》(Roberto lerusalimschy著)

    本文摘自公众号Linux开发者札记。如果觉得本文对你有点用处,欢迎关注。

    展开全文
  • 什么是一个好的脚本管理组件? 在开发游戏服务器的过程中,我认为脚本管理器至少需要如下几个好的特性。 首先,易于脚本的加载。 对于网络游戏来说,最常见的问题就是分区。任何一款网络游戏为了自己的生存都在...
  • NSIS开发

    2008-06-07 21:09:24
    Script.NET采用类似于Eclipse的插件化开发方式,大部分功能都以插件的形式提供,可以灵活扩展,除了用于脚本开发之外,也可以扩展为各种富客户端应用程序。 Script.NET从2000年开始开发,发布过V1.0和V2.0两个大...
  • Ofelia是Pd的外部组件,它允许您在实时视觉编程环境中使用openFrameworks和Lua来创建视听作品或诸如游戏的多媒体应用程序。 是用于创意编码的开源C ++工具箱。 是一种功能强大,高效,轻便,易于学习的脚本语言。 ...
  • Script.NET采用类似于Eclipse的插件化开发方式,大部分功能都以插件的形式提供,可以灵活扩展,除了用于脚本开发之外,也可以扩展为各种富客户端应用程序。 Script.NET从2000年开始开发,发布过V1.0和V2.0两个大...
  • einx的示例服务器(https://github.com/Cyinx/game_server_einx)功能用户友好的灵活模块高精度计时器支持简单的RPC入门安装go get github.com/go-sql-driver/mysql go get github .com / yuin / gopher-lua go...
  • 这些组件化的功能往往能够满足大部分的需求,如果要想达到特定场景的需求,可能需要二次开发,比如RBAC权限系统。本小节通过整合前面的知识点,来构建一个RBAC权限认证系统。技术栈本小节采用了以下的技术栈: ...
  • OpenResty + lua 动态网关 SpringCloud Gateway ✅ 多种维度的流量控制(服务、IP、用户等),后端可配置 授权认证 Spring Security OAuth2 ✅ Jwt模式 服务容错 SpringCloud Sentinel ✅ 服务调用 ...
  • 在网狐荣耀版系统开发,游戏开发,界面cocos和lua开发等过程后,要进行发布和打包。pc端与安卓端相对简单,苹果端的修改、发布与打包成了多数开发者的一个主要问题。下面就说说这个苹果打包的基本过程。 一、环境...
  • Android应用开发揭秘--详细书签版

    热门讨论 2012-12-12 13:27:46
    开发、android游戏引擎设计、android应用优化、opengl等高级知识,最重要的是还全面介绍了如何利用原生的c/c++(ndk)和python、lua等脚本语言(android scripting environment) 来开发android应用;本书实战性强...
  • 以内容创作为核心的一体化游戏开发工具,基于 Cocos2d-x,组件化,脚本化,数据驱动,跨平台发布 2.支持C++,Lua和JavaScript三种开发语言,运行效率高,成熟可靠,一次游戏开发可跨平台部署在网页和主流的移动...
  • nginx介绍

    2018-01-02 14:05:57
    Nginx应用场景:web服务、反向代理、负载均衡• Nginx著名分支,淘宝基于Nginx开发的Tengine,使用上和Nginx一致,服务名,配置文件名都一样,和Nginx的最大区别在于Tenging增加了一些定制模块,在安全限速方面...
  • 这些组件化的功能往往能够满足大部分的需求,如果要想达到特定场景的需求,可能需要二次开发,比如RBAC权限系统。本小节通过整合前面的知识点,来构建一个RBAC权限认证系统。 技术栈 本小节采用了以下的技术栈: ...
  • 这些组件化的功能往往能够满足大部分的需求,如果要想达到特定场景的需求,可能需要二次开发,比如RBAC权限系统。本小节通过整合前面的知识点,来构建一个RBAC权限认证系统。 技术栈 本小节采用了以下的技术栈: ...
  • 机器人引擎开发 我的3D游戏引擎源代码。 (已过时)(不是最终版本) 特征: 具有视差校正功能的PBR阴影和反射探头。 阴影贴图 子弹物理学 亲爱的imgui编辑器用户界面 Lua脚本 广告牌 序列和场景系统(保存/加载...
  • 2.OpenResty 的发展

    2021-06-11 16:52:06
    OpenResty 并不像其他的开发语言一样从零开始搭建,而是基于成熟的开源组件——NGINX 和 LuaJIT。OpenResty 诞生于 2007 年,不过,它的第一个版本并没有选择 Lua,而是用了 Perl,这跟作者章亦春的技术偏好有很大...
  • Nginx-1.12.1安装配置

    2018-06-15 14:55:00
    Nginx介绍 Nginx官网 nginx.org,最新版1.13,最新稳定版1.12 Nginx应用场景:web服务、反向代理、负载均衡 Nginx著名分支,淘宝基于Nginx开发的Tengine,使用上和Nginx一致,服务名,...Nginx核心+lua相关的组件和...
  • 最新稳定版1.12 Nginx应用场景:web服务、反向代理、负载均衡Nginx著名分支,淘宝基于Nginx开发的Tengine,使用上和Nginx一致,服务名,配置文件名都一样,和Nginx的最大区别在于Tenging增加了一些定制模块,...
  • 2019.3.30 周六 随想

    2019-03-30 09:19:05
    一切界面都是类似GUI 工具包绘制的,其中包含控件和组件应用的API,说白了就是SDK开发工具包--界面开发工具包,表现形式就是拖拽,代码写等 至于调用的函数还是算法,事件,框架,编程思想 一切js,Lua,c#,java...
  • gou:GOU game engine-源码

    2021-04-18 09:53:25
    这是一个尚在开发中的早期工作,以下大多数功能尚不存在! 基于组件实体系统的游戏实体 多线程系统 基于场景树的游戏逻辑 Lua脚本可以附加到场景树 模块引擎,所有特定于游戏的逻辑都在模块,脚本或配置中 模块...
  • 20.3.8 Nginx+Lua逻辑开发 401 21 使用OpenResty开发商品详情页 405 21.1 技术选型 407 21.2 核心流程 408 21.3 项目搭建 408 21.4 数据存储实现 410 21.4.1 商品基本信息SSDB集群配置 410 21.4.2 商品介绍SSDB集群...
  • ET框架在平常开发的时候根本不太需要关心当前开发的这个功能会放在什么server上,只用一个进程进行开发,功能开发组件的形式。发布的时候使用一份多进程的配置即可发布成多进程的形式,是不是很方便呢?随便你怎么...
  • 粉末玩具-2020年2月 获取最新版本。 要使用诸如保存之类的在线功能,您需要。... 有一个Lua API –您可以自动您的工作,甚至可以制作游戏插件。 Powder Toy是免费的,并且源代码是根据GNU通用公共许可证分
  • 19.ESC实体组件系统 20.单元测试的艺术 21.Effective C# U3D高效C#技法训练 22.I18N 国际(本地) 23.内存池和对象池 24.Unity游戏开发之常用设计模式 25.切水果游戏 26.SDK接入研究 27.工具类 28.性能优化相关 ...
  • GameComponent【可选模块】 - 游戏组件模块,本模块整合了多个游戏开发过程中可能会涉及到的子系统或组件,包括但不仅限于文件系统、本地系统、新手引导系统、时间系统、AVG2D系统、FTG2D系统、RPG2D系统等,且...
  • 笔记/搜集/摘录/实践 放置我的笔记、搜集、摘录、实践,保持好奇心。这里就是个随记,涉猎技术知识点广而不精,不能保证正确,看文需谨慎,后果很严重。 精华置顶 ...awesome-uikit - 搜集基于 ...Lua5.3中文手册

空空如也

空空如也

1 2 3
收藏数 45
精华内容 18
关键字:

lua组件化开发