Unity 如何打造”大厅+子游戏”架构

news2024/11/26 1:48:00

现在越来越多的手机游戏开始要做成大厅+子游戏模式,简单的说就是,进入大厅后有很多子游戏,玩家选哪个完,就更新下载哪个子游戏,下次就直接进去玩子游戏就可以了。这就是现在要做的 “大厅+子游戏”架构,要拿一套这样的架构与设计出来主要解决一下3大问题:

(1) 大量的子游戏,只有等用户玩的时候再从服务器下载资源+更新代码;

(2) 做好”主框架”的工程项目,为各子游戏提供框架支持+功能服务;

(3) 大量子游戏的开发相对独立,如何设计工作机制,能让各子游戏项目组独立工作; 

接下来我们从上面3个方向入手,来看下如何做好架构设计能实现这种模式。


1:如何实现从服务器下载子游戏资源与代码

  手机游戏的大厅+子游戏模式架构,我们主要采用热更新的技术来做到从服务器下载资源+游戏逻辑代码来实现玩家玩哪个子游戏,再下载这个子游戏。热更新的技术目前Unity主流的有Lua, ILRuntime,huatuo等,今天我们以Lua为例来讨论,其它热更新的技术架构原理都是一样的。

  一个子游戏,我们分为资源+代码逻辑,资源我们会把子游戏的资源打包成几个资源ab包,子游戏的lua代码也打成一个子游戏代码ab包。当玩家点击某个子游戏的时候,先检查本地是不是有这个游戏or版本是不是最新的,如果本地没有或不是最新的,就从服务器下载子游戏的代码包+ab包。

每个子游戏开发出来后放服务器上的子游戏文件夹包体如下:

   a: 子游戏LuaScript ab包,这里有个固定的命名规则: 游戏名字_LuaScript

   b: 子游戏的若干ab包,这里的命令规则: 游戏名字_资源包名字,防止子游戏间冲突;

   c: 子游戏的版本号配置;

   d: 子游戏包的最新文件的md5列表,用来做版本比对与增量下载更新;

   e: 子游戏的名称+游戏ICON等游戏相关的信息;

每次用户在“大厅”点击子游戏的时候,查看本地是否有子游戏包,并确定包是否为最新版本,先拉取md5文件列表,比对两个版本的文件列表,获得需要更新下载的文件列表,根据文件列表下载最新的文件到本地,这就可以把上面子游戏包的全部内容下载到本地来。

接下来框架从子游戏_LuaScript的ab包中装载Lua脚本代码,入口模块做一个规定,是一个全局模块,同时模块的名字为子游戏的名字,规则为SubGameNameApp.lua, 在里面定义一个SubGameNameApp模块,这个模块有一个固定的入口函数”EnterSubGame(args)”。

这样进入子游戏逻辑,子游戏加载资源,跑游戏的业务逻辑,把子游戏运行起来。

每个子游戏在开发的时候,入口也要遵守这个规则,这样大厅才能准确的找到子游戏的入口代码跑子游戏的逻辑。

2:做好”主框架”的项目,为各子游戏提支持与服务

  主框架工程其实就是整个游戏的主体,包括对子游戏提供的各种功能服务+热更新框架主体+大厅功能的逻辑(大厅也可以看作是基于框架的一个”游戏”), 主框架内置好Lua热更新机制,同时提供支付,广告等SDK的服务支撑,主框架工程中Lua相关的包括大厅,也可以热更,C#编写的不做到热更新。每个子游戏项目,子游戏团队在开发的时候,要先拉取一下主框架工程代码,不用管其它子游戏,基于主框架工程来进一步开发子游戏。如果子游戏有一些公共的功能支撑与服务,可以提需求给主框架工程项目,看是否内置这样的功能与服务。

  在主框架工程开发”大厅的逻辑功能”,做好加载子游戏的lua脚本机制,当用户点击了某个子游戏,调用增量下载更新子游戏,按照子游戏的入口规则加载lua脚本,进入子游戏后,就有子游戏自己来加载自己要的资源。

3:如何设计”大厅+子游”戏各团队的工作方式

  整个”大厅+子游戏”项目我们在开发中分成两类项目开发组,框架组+子游戏组。框架组负责支持热更的框架开发+大厅逻辑+SDK对接+Apk打包发布。这个项目组的日常就是做好框架支持与客户端App的版本发布于更新,以及SDK的对接。

  每个子游戏组,在开发时拉取框架代码组的代码来基于这个项目工程来进行开发,子游戏开发组只用Lua开发子游戏逻辑,如果有共用的需要框架平台支撑的提好需求。子游戏开发完成后,扩展编辑器, 添加一个 导出”子游戏”资源包(资源包+代码资源包)的功能,交付给框架项目组。

  框架项目组拿到子游戏的资源包后,部署到热更新资源服务器上,资源热更新服务器,我们是基于http server的文件服务。我们做如下配置:

SubGameApps.json:  这里存放所有的子游戏的名字, 大厅就是根据这个Json来知道当前服务器上有多少子游戏。当开发一个新子游戏出来以后,我们把子游戏的名字更新到SubGameApps.json文件里面,这样,大厅就能发现新开发的子游戏。

  在http 文件服务器上部署子游戏app, 每个子游戏是一个文件夹,文件夹名字是子游戏的名字,文件夹里面是子游戏的资源包和配置,如上面所说的子游戏文件夹。当用户点击子游戏的时候,框架工程就根据子游戏的名字,到子游戏文件夹下载资源即可。

  这样框架项目工程开发与各子游戏间就独立出来了,各子游戏也不用管彼此存在,只要发布子游戏的资源包就可以了。

今天的Unity 主工程+子游戏模式架构设计分享就到这里了,喜欢的话别忘了点赞和收藏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1349878.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浙大链协2023年终总结

2 0 2 4 元旦 快乐 龙腾虎跃 01 引言 俗话说:"币圈一天,人间十年",数字货币一天的涨跌可能抵上其他资产价格一年的波动幅度。而经历过漫长的熊市后,铭文的火爆十分生动地表述了这一口号...... 2023年,浙大链…

【Unity引擎技术整合】 Unity学习路线 | 知识汇总 | 持续更新 | 保持乐趣 | 共同成长

前言 本文对Unity引擎的知识进行了一个整理总结,基本包含了Unity中大部分的知识介绍。网上也有很多Unity相关的学习资料,但大多数都不成体系,学起来的时候难免会东奔西走的摸不着头脑。本文整理的多数文章都是有对应的系列性文章专栏&#x…

【C语言】Ubuntu 22上用GTK写GUI程序

一、GTK介绍 GTK (GIMP Toolkit) 是一个多平台的图形用户界面工具包。它最初是为图像处理程序 GIMP 开发的,后来演变成为许多操作系统上开发图形界面应用程序的通用库。GTK 是用C语言编写的,并且是自由和开源软件,遵循LGPL (GNU Lesser Gene…

x-cmd pkg | hyperfine - 命令行基准测试工具

目录 简介首次用户功能特点竞品和相关作品进一步阅读 简介 hyperfine 是一个用于命令行基准测试的开源工具,可以对多次命令运行的时间进行分析,帮助开发人员评估和比较不同命令或脚本的性能。它是用 Rust 语言开发的,可以在 Windows、macOS …

Redis 与 Spring: 解决序列化异常的探索之旅

🌷🍁 博主猫头虎 带您 Go to New World.✨🍁 🦄 博客首页——猫头虎的博客🎐 🐳《面试题大全专栏》 文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺 &a…

【网络面试(5)】收发数据及断开服务器(四次挥手)

前面了解到服务器和客户端在创建套接字,建立连接后,就可以进入到下一步,双发可以互相发送和接收数据,本篇博客就来学习一下这个过程。  我们印象里,发送数据应该是我们在浏览器输入网址,敲击回车的一瞬间&…

RocketMQ 生产者源码分析:DefaultMQProducer、DefaultMQProducerImpl

🔭 嗨,您好 👋 我是 vnjohn,在互联网企业担任 Java 开发,CSDN 优质创作者 📖 推荐专栏:Spring、MySQL、Nacos、Java,后续其他专栏会持续优化更新迭代 🌲文章所在专栏&…

(九)上市企业实施IPD成功案例分享之——欧普

LED通用照明应用是LED照明应用市场的第一驱动力,由于LED照明技术发展迅速,以及成本快速下降,已成为全球主流照明光源。近年来,通过将智能控制模块嵌入LED通用照明终端,形成了具有自动控制、系统化控制等功能的智能照明…

Java8 Lambda 表达式

文章目录 🍉 Java 8 介绍🍉 Lambda 表达式🍅🍅 基础语法🍅🍅 案例 🍉 函数式接口🍅🍅 内置的四大核心函数式接口🍅🍅 案例 🍉 Java 8 …

linux驱动(一):led

本文主要探讨210的led驱动相关知识。 驱动 操作系统驱动硬件的代码,驱动上层是系统调用API,下层是硬件 宏内核:内核整体上为一个过程实现,运行在同一地址空间,相互调用简单高效 微内核:功能为独立过程,过程间通过IPC通信 …

国科大图像处理2023速通期末——汇总2017-2019

国科大2023.12.28图像处理0854期末重点 图像处理 王伟强 作业 课件 资料 一、填空 一个阴极射线管它的输入与输出满足 s r 2 sr^{2} sr2,这将使得显示系统产生比希望的效果更暗的图像,此时伽马校正通常在信号进入显示器前被进行预处理,令p…

上海亚商投顾:三大指数红盘收官!沪指今年累计跌3.7%

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 A股12月29日迎来2023年收官之战,三大股指延续反弹走势,最终集体红盘报收。纵观全年&am…

CMake入门教程【基础篇】CMake+vs2022+nmake构建项目

文章目录 1.vs编译器下载安装2.运行nmake测试3.CMake下载安装4.运行CMake测试5.使用CMakeNMake构建项目代码目录代码实现 6.运行项目 1.vs编译器下载安装 下载地址 :https://visualstudio.microsoft.com/zh-hans/vs/ 点击截图处下载 勾选红框的内容即可 安装 2.运行nmak…

echarts手动触发气泡的显示和隐藏

点击echarts图表后将点击的那个进行突出显示 <template><div id"demo"> </div><el-button type"primary" click"set">设置</el-button><el-button type"primary" click"cancel">取消&…

数据结构与算法教程,数据结构C语言版教程!(第二部分、线性表详解:数据结构线性表10分钟入门)四

第二部分、线性表详解&#xff1a;数据结构线性表10分钟入门 线性表&#xff0c;数据结构中最简单的一种存储结构&#xff0c;专门用于存储逻辑关系为"一对一"的数据。 线性表&#xff0c;基于数据在实际物理空间中的存储状态&#xff0c;又可细分为顺序表&#xff…

嵌入式视频播放器(mplayer)

1.文件准备&#xff1a; MPlayer-1.0rc2.tar.bz2 libmad-0.15.1b.tar.gz 直接Git到本地 git clone https://gitee.com/zxz_FINE/mplayer_tarball.git 2.文件夹准备&#xff1a; src存放解压后的源码文件&#xff0c;target_Mplayer存放编译安装的目标文件 mkdir src targe…

自动驾驶论文

文章目录 一、Convolutional Social Pooling for Vehicle Trajectory Prediction二、QCNet&#xff1a;Query-Centric Trajectory Prediction三、VectorNet: Encoding HD Maps and Agent Dynamics from Vectorized Representation 一、Convolutional Social Pooling for Vehicl…

Ts自封装WebSocket心跳重连

WebSocket是一种在单个TCP连接上进行全双工通信的协议&#xff0c;允许客户端和服务器之间进行双向实时通信。 所谓心跳机制&#xff0c;就是在长时间不使用WebSocket连接的情况下&#xff0c;通过服务器与客户端之间按照一定时间间隔进行少量数据的通信来达到确认连接稳定的手…

【快速全面掌握 WAMPServer】12.WAMPServer 故障排除经验大总结

网管小贾 / sysadm.cc 众所周知&#xff0c;搞开发需要先搭建相应的编程和调试环境。 对于 PHPer 来说&#xff0c;很多像我一样的新手小白们入门的时候&#xff0c;通常会选择一些集成开发环境包&#xff0c;其中就有 WampServer 。 集成环境包被许多人所诟病&#xff0c;说…

防火墙-访问控制、安全审计、网络设备防护检查表

防火墙标准检查表 项目管理、开发全文档获取&#xff1a;软件项目开发全套文档下载_软件项目技术实现文档-CSDN博客 1、访问控制类检查 2、安全审计类检查 3、网络设备防护类检查 防火墙标准检查表 分类 测评项 预期结果 访问控制 应在网络边界部署访问控制设备&#xf…