KSFramework:Unity3D开发框架快速入门

KSFramework知识

https://github.com/mr-kelly/KSFramework

KSFramework是一个整合KEngine、SLua和一些开发组件组成的全功能Unity 5开发框架,适合有一定规模的团队使用。

热重载是KSFramework的开发重点——在不重启游戏的前提下,重载代码、配置表可立刻看到修改效果,最大限度的提升开发、调试的速度,并且在运营阶段方便的进行产品热更新。

看看Demo!

双击打开Assets/Game.unity场景,点击播放。

图:开始Game.unity后的日志输出

KSFramework做了这些事

这时候KSFramework的默认Demo开始,做了这些事情:

  • 基础模块的启动
  • Lua模块的启动
  • 尝试读取并打印Excel表格GameConfig.xlsx内容
  • 加载UI界面Login
  • 执行UI界面Login的Lua脚本
  • Lua脚本绑定UI控件、设置UI控件
  • Lua脚本读取并打印Excel表格GameConfig.xlsx内容

囊括KSFramework核心模块的使用

总而言之,这个Demo囊括了KSFramework中的几个核心模块的使用:

  • KEngine中的Setting模块的使用
  • KEngine中的UI的资源加载
  • SLua脚本引擎与UI的联合

接下来,将模仿这个Demo,创建/加载一个新的UI界面、创建/读取一个新的配置表格。

尝试做一个公告界面Billboard

接下来,我们将创建一个UI公告牌(Billboard),使用Lua脚本,并从配置表读取公告内容。

1. 创建UI资源

图:创建New Scene

Create UI

图:KEngineUI - Create UI 创建UI布局

图:点击Create UI后,默认随机名字,把UI名字修改为Billboard

图:修改UI名字为Billboard,UI界面右边带有黄色UI标识

图:编辑一下UI场景,一个背景Image,两个Label

保存一下场景,保存到Assets/BundleEditing/UI/Billboard.unity

Export UI To Assetbundle

图:导出 — 打包AssetBundle,快捷键Ctrl+Alt+E

2. 加载UI界面

好了,Billboard界面创建好了,也导出成了AssetBundle。

显示UI面板(OpenWindow方式)

接下来,我们通过代码打开界面。

代码示例

编辑 Assets/Code/Game.cs

OnFinishInitModules 函数的末端,加上这样的一句:

// 开始加载我们的公告界面!
UIModule.Instance.OpenWindow("Billboard");

完成并保存。

运行效果

打开场景 Assets/Game.unity,点击播放按钮:

我们的UI通过AssetBundle打开了,弹出提示找不到UI Lua脚本,接下来我们创建Lua脚本吧

3. 创建Lua脚本

图:在目录 Product/Lua/UI 中新建一个 lua文件

Lua脚本示例

写一段Lua代码:UIBillboard的执行逻辑

local UIBase = import("KSFramework/UIBase")

local UIBillboard = {}
extends(UIBillboard, UIBase)

function UIBillboard:OnInit(controller)
    self.Controller = controller
    self.TitleLabel = self:GetUIText(‘Title‘)
    self.ContentLabel = self:GetUIText(‘Content‘)
end

function UIBillboard:OnOpen()
    self.TitleLabel.text = "This is a title"
    self.ContentLabel.text = "Here is content!"
end

return UIBillboard

这段lua中,创建了一个Table叫UIBillboard,这个table必须有OnInit(controller)函数。它通过代码设置了UI中的文字。

好了,接下来,我们要为策划准备配置表了。

4. 创建配置表

打开 Product/SettingSource 目录,复制一份 StringsTable.xlsx,并改名叫 Billboard.xlsx

公告需求

用Excel打开我们新的 Billboard.xlsx,编辑我们的公告。

我们大概定一下需求,我们假设写入3条公告,每次打开公告随机显示其中一条。每个公告,我们给它一个英文ID,一列中文标题,一列中文内容。

配置公告Excel

Excel表修改如下: (增加公告内容 )

Unity自动监测Excel变动

图:回到Unity,监测到Excel变动。点击OK。

自动生成配置表代码

上一步监测到变动,只编译Excel表,手动执行一些重新编译,并生成配置表代码

tab生成的BillboardSettings类

图:这时候,打开AppSettings.cs代码文件,我们可以发现,已经生成名叫BillboardSettings的类了

生成SLua的静态代码

因为我们要在Lua使用BillboardSettings读取配置表,这里需要重新生成一下SLua的静态代码

修改Lua随机读取一条公告

接下来修改Lua代码,随机读取一条公告,并设置Content、Title

公告内容随机显示

图:运行播放 Game.unity,我们的公告界面完成了

公告界面完成了。我们创建了一个UI、写了C#和Lua代码加载它、然后创建了一张配置表,再从Lua读取配置表,设置UI的显示。

玩玩热重载

热重载Lua

接着我们刚才运行的 Game.unity 。 我们尝试一下对Lua热重载:在不重启游戏的情况,快速重载Lua代码,方便程序调试

图:菜单 KSFramework –> UI –> Reload+ReOpen:热重载Lua脚本,并重新打开目前处在打开状态的UI界面

我们可以从菜单执行热重载并重新打开UI界面,或者使用快捷键 Ctrl+Alt+Shift+R
由于我们的Lua脚本中,每次执行随机获取一条公告。因此可以看到公告内容在不停的变动着。

热重载的实现原理

热重载的实现,主要依赖于每个lua脚本的最后一行——return Table;C#层在执行完Lua脚本后,会把这个返回的Table缓存起来,每次需要使用table时,直接从缓存拿;而热重载,实际就是把这个缓存table删掉,这样当需要用到这个table时,就会重新执行Lua文件,来获取Table,这样就达到了热重载得目的。

热重载Excel表格

我们保持运行刚刚的 Game.unity,不要停止掉。这时候我们去修改Excel表格。

图:修改Excel表格

修改配置表并重载

保存后,回到Unity,提示表格有改动。

图:发现表格有变动,点击OK编译表

图:从菜单中心一下重载配置表格吧

重载效果

图:Ctrl+Alt+Shift+R刷新Lua

重载Lua,我们的新修改的配置表内容生效了。

至此,我们的Lua和配置表的改动,都可以在不重启、不重新转菊花的情况下快速修改。

版权说明

文/公的Kelly[mr-kelly](简书作者)

原文链接:http://www.jianshu.com/p/ccb491ed4260

著作权归作者所有,转载请联系作者获得授权。

欢迎大家到 github提issues

时间: 2024-11-10 07:25:04

KSFramework:Unity3D开发框架快速入门的相关文章

OsharpNS轻量级.net core快速开发框架简明入门教程-Osharp.Hangfire使用

OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. OsharpNS.Swagger使用实例(登录和授权) 1.4. Angular6的前端项目启动 Osharp代码生成器的使用 2.1 生成器的使用 2.2 生成代码详解(如何自己实现业务功能) Osharp部分模块使用 3.1 Osharp.Redis使用 3.2 Osharp.Hangfire使用

一起学Google Daydream VR开发,快速入门开发基础教程一:Android端开发环境配置一

原文因涉及翻墙信息,被强制删除,此文为补发! 准备工作 进入Google Daydream开发者官网,开启准备工作,官网地址:https://vr.google.com/daydream/developers/ -------------------------------------------------------------------------------------------------------------------- Google Daydream开发者网址: https

JAVAWEB开发之Struts2详解(一)——Struts2框架介绍与快速入门、流程分析与工具配置以及Struts2的配置以及Action和Result的详细使用

Struts2框架介绍 三大框架:是企业主流JavaEE开发的一套架构.Struts2 + Spring + Hibernate 什么是框架?为什么要学习框架? 框架是实现部分功能的代码(半成品),使用框架简化企业级软件开发. Struts2与MVC? Struts是一款优秀的MVC框架 MVC:是一种思想,是一种模式,将软件分为Model模型.View视图.Controller控制器 JAVAEE软件三层架构:web层(表现层).业务逻辑层.数据持久层(Sun提供javaEE开发规范) Jav

PDF.NET SOD 开源框架红包派送活动 && 新手快速入门指引

一.框架的由来  快速入门 有关框架的更多信息,请看框架官方主页! 本套框架的思想是借鉴Java平台的Hibernate 和 iBatis 而来,兼有ORM和SQL-MAP的特性,同时还参考了后来.NET的LINQ(本框架成型于2006年,当时还未听说过LINQ)使用风格,设计了OQL查询表达式.本框架的设计思想是通用的,完全可以移植到Java 平台,现在只提供了.NET平台的实现,暂且将本框架命名为 PDF.NET 从2013.10.1日起,原PDF.NET 将更名为 SOD one SQL-

iOS开发中通知(Notification)快速入门及推送通知实现教程

iOS开发中通知(Notification)快速入门及推送通知实现教程 标签: NSNotificationCenterNSNotification 2016-11-14 00:18 232人阅读 评论(0) 收藏 举报  分类: iOS(400)  转载自:http://www.111cn.NET/sj/ios8/90190.htm 通知(Notification)是开发框架中观察者模式的一种实现方式,内部的实现机制由Cocoa框架支持,通常用于试图控制器和数据模型的交互.通过通知,可以向一个

C#程序员的春天之从零开始学习unity3D游戏开发入门教程一(前言)

我们不在“拖控件”,我们也有春天 序言:之前断断续续谢了一点unity的教程,但是不全面.这里表示歉意.今天准备重新做一套.今天也是换了新工作,也是新的开始.也希望以此来激励自己把这个教程一直写下去.想要学习unity的同学可以加这个群(326535328),可能会在qq课堂在线讲解一些相关知识. 乱扯一下:为什么说这时C#程序员的春天呢?在大多数java或者其他程序员的眼里,我们.net平台的程序员同胞都背负着”拖控件“的这么一个标签.某种程度上讲,.net的快速入门的精髓就是拖控件.然而外人

Apple Watch开发快速入门教程

Apple Watch开发快速入门教程 试读下载地址:http://pan.baidu.com/s/1eQ8JdR0 介绍:苹果为Watch提供全新的开发框架WatchKit.本教程是国内第一本Apple Watch开发教程,全面讲解WatchKit的各个方面,帮助读者更为快速的掌握Watch开发方式和流程. 目录 第1章  开发环境--Xcode 1 1.1  苹果账号 1 1.1.1  苹果账号的成员分类 1 1.1.2  注册免费的苹果账号 1 1.1.3  注册收费的苹果账号 4 1.2

Objective C 快速入门学习一

Objective-C程序设计 1. 直接用Xcode作为IDE,舍弃gcc编译方面的学习.2. 入门例子:Eg:打印Hello World 控制台程序 #import<Foundation/Foundation.h> //导入Foundation.h头文件.//头文件后缀.h,源文件后缀.m,Objective-C++后缀.mm. int main(int argc, const char* argv[])//主函数(和C/C++相同, // 和/* 内容 */表示注释符号){      N

SpringData 基于SpringBoot快速入门

SpringData 基于SpringBoot快速入门 本章通过学习SpringData 和SpringBoot 相关知识将面向服务架构(SOA)的单点登录系统(SSO)需要的代码实现.这样可以从实战中学习两个框架的知识,又可以为单点登录系统打下基础.通过本章你将掌握 SpringBoot项目的搭建,Starter pom的使用,配置全局文件,核心注解SpringBootApplication 介绍以及单元测试 SpringBootTest注解的使用.SpringData 的入门使用,Repos