框架概述:

做了那么久的业务开发,也做了一年多的核心战斗开发,最近想着自己倒腾一套游戏框架,当然暂不涉及核心玩法类型和战斗框架,核心战斗的设计要根据具体的游戏类型而定制,这里只是一些通用的基础系统的框架搭建,其中包括:

  • UI框架(NGUI + MVC
  • 消息管理(Advanced CSharp Messenger
  • 网络层框架(Socket + Protobuf
  • 表格数据(Protobuf
  • 资源管理(Unity 5.xAssetBundle 方案)
  • 热更框架(tolua

这里使用的引擎版本是:Unity 5.5.0f3

UI框架:

使用 Unity 5.x 进行游戏开发的朋友,估计大都想过用系统自带的 UGUI 来搭建UI框架,这并没有什么不好的,只是对于引擎升级并不友好,假如Unity升级对 UGUI 做了比较大的修改,那么对一个成型的项目进行引擎的升级,修改成本是不可估量的,所以这里我还是选用 NGUI 作为搭建UI框架的工具,除了结合 MVC 架构还要考虑后期接入热更新。

消息管理:

这里我们使用 Advanced CSharp Messenger 这种C#事件实现的消息管理器,特点就是可以将游戏对象作为参数发送。而且,这个先进的c#版本的消息传递系统会自动清理事件表在一个新的水平加载,这将防止程序员意外调用销毁方法,从而有助于防止许多 MissingReferenceExceptions这个消息传递系统是基于杆海德 CSharpMessenger 和马格努斯Wolffelt CSharpMessenger扩展。

《Unity 3D游戏客户端基础框架》消息系统

网络层框架:

随着移动网络的升级,在4G网络早已普及的今天,除了单机游戏,现在绝大多数的网游都是以强联网的方式实现的,选用 Socket 通信可以实时地更新玩家状态,选定了联网方式之后,还需要考虑网络协议定制的问题,Protobuf 无疑也是个比较好的选择,一方面是跨平台特性好,另一方面是数据量小可以节省通信成本。

《Unity 3D游戏客户端基础框架》多线程异步 Socket 框架构建

《Unity 3D游戏客户端基础框架》 protobuf网络框架

表格数据:

在游戏开发中,有很多数据是不需要通过网络层从服务器拉取下来的,而是通过表格配置的格式存储在本地,例如:游戏中的一个道具,通常服务器之下发该道具的 Id (唯一标识)和 lv(等级),然后客户端从本地数据中检索到该道具的具体属性值。通常使用 Excel 表格来配置数据,但我们一般不会直接将 .xlsx 格式的表格原文件打包到游戏应用包中,通常会通过工具序列化为二进制文件的格式,读取数据的时候再进行反序列化。上面我们提到了使用 Protobuf 定制网络协议,但是其实 Protobuf 的序列化和反序列化特性可以满足我们对于表格数据转化的需求。

《Unity 3D游戏客户端基础框架》protobuf 导excel表格数据

资源管理:

对于资源的管理,其实是为了给后面接入热更新提供可能,Unity制作游戏的资源管理方式就通过 AssetBundle 工具将资源打成多个 ab 包,对于可热更新的资源进行热更的时候,并非单文件的热更,而是通过网络下载新的 ab 包来替换本地旧的包,从而实现热更的目的。

热更新框架:

通常使用C#来进行Unity的开发,但纯C#脚本只能支持Android系统下的热更新,而对于iPhone系统则无能为力,所以这里通常需要引入一门脚本语言 lua ,使用C#编写底层框架,使用lua编写业务逻辑,这是业内最常见的设计方式,还有一个非常成熟的热更新框架 tolua (前称 ulua)。通常可热更新的有:图片资源、UI预制和lua脚本,而出于跨平台的考虑,C#脚本是不允许进行热更的。


小结:

上面只是大致说了一遍整个框架会涉及到的工具和技术点,下面我会对每个点进行逐篇细化,有兴趣的可以继续关注下,当然可以根据这些建议自己自学,那样也可能会快很多。

《Unity 3D游戏客户端基础框架》概述的更多相关文章

  1. 『TCP/IP详解——卷一:协议』读书笔记——01

    从今日起开始认真研读TCP/IP详解这本经典制作,一是巩固我薄弱的计算机网络知识,二来提高我的假期的时间利用率.将心得与思考记录下来,防止白看-哦耶 2013-08-14 18:47:06 第一章 概 ...

  2. 『TCP/IP详解——卷一:协议』读书笔记——10

    2013-08-22 22:57:17 3.8 ifconfig命令 这个命令在Linux系统下可以通过下面的指令阅读说明文档: ifconfig 由于书中作者用的系统比较早的某Unix系统,所以我的 ...

  3. 【TCP/IP详解 卷一:协议】第二章:链路层

    2.1 引言 链路层的三个目的: (1)为IP模块发送和接收IP数据报. (2)为ARP模块发送ARP请求和接收ARP应答.地址解析协议:ARP. (3)为RARP模块发送RARP请求和接收RARP应 ...

  4. TCP/IP详解学习笔记- 概述

    TCP/IP详解学习笔记(1)-- 概述1.TCP/IP的分层结构      网络协议通常分不同层次进行开发,每一层分别负责不同的同信功能.TCP/IP通常被认为是一个四层协议系统.      如图所 ...

  5. TCP/IP详解 卷一(第一章 概述)

    很多不同的厂家生产各种型号的计算机,它们运行完全不同的操作系统,但TCP/IP协议族允许它们相互进行通信. 1.分层 TCP/IP不是一个协议,而是一个协议族,通常它被认为是一个四层的协议系统,下面展 ...

  6. 《TCP/IP详解卷一:协议》 概述

    分层           TCP/IP协议族是一组不同层次上的多个协议的组合.TCP/IP通常被认为是一个四层次协议系统.   链路层(数据链路层或网络接口层):通常包括操作系统中的设备驱动程序和计算 ...

  7. 【TCP/IP详解 卷一:协议】TCP的小结

    前言:TCP学习的综述 在学习TCP/IP协议的大头:TCP协议 的过程中,遇到了很多机制和知识点,详解中更是用了足足8章的内容介绍它. TCP协议作为 应用层 和 网络层 中间的 传输层协议,既要为 ...

  8. 【TCP/IP详解 卷一:协议】第十一章 UDP 用户数据报协议

    11.1 引言 UDP 是一个简单的 面向数据报 的运输层协议:进程的每个 输出操作 都正好产生一个 UDP数据报,并且组装成一份待发送的IP数据报. 这与 TCP 不一样,它是 面向流字符 的协议, ...

  9. 【TCP/IP详解 卷一:协议】第六章:DHCP 和自动配置

    简介 为了使用 TCP/IP 协议族,每台主机or路由器都需要一定的配置信息: IP地址 子网掩码 广播地址 路由或转发表 DNS 协议配置方法: 手动 通过使用网络服务来获得 使用一些算法来自动确定 ...

  10. 【TCP/IP详解 卷一:协议】第一章概论 学习笔记

    第一章 概述 游览了一下,本章主要是简介OSI模型的低层(1-4层).介绍了TCP/IP协议族的相关知识. TCP/IP的分层 Application <--> TCP / UDP < ...

随机推荐

  1. Canvas:橡皮筋线条绘制

    Canvas:橡皮筋线条绘制 效果演示 实现要点 事件监听 [说明]: 在Canvas中检测鼠标事件是非常简单的,可以在canvas中添加一个事件监听器,当事件发生时,浏览器就会调用这个监听器. 我们 ...

  2. 子元素绝对定位absolute后,自动撑开宽度

    position: absolute;   white-space: nowrap;

  3. org.springframework-jdbc

    Spring JDBC模板类—org.springframework.jdbc.core.JdbcTemplate 博客分类: spring JDBCSpringSQL编程数据结构  今天看了下Spr ...

  4. cdoj1341卿学姐与城堡的墙

    地址:http://acm.uestc.edu.cn/#/problem/show/1341 题目: 卿学姐与城堡的墙 Time Limit: 2000/1000MS (Java/Others)    ...

  5. 【持续更新】ultraedit工具使用总结

    常用设置及快捷键 设置Ultraedit自动换行: 永久修改: 点击菜单栏的“高级→配置”,找到“编辑器→自动换行/制表符设置”,选择“默认为每个文件启用自动换行”,ok. 临时修改: 快捷键 Ctr ...

  6. CF715E Complete the Permutations(第一类斯特林数)

    题目 CF715E Complete the Permutations 做法 先考虑无\(0\)排列的最小花费,其实就是沿着置换交换,花费:\(n-\)环个数,所以我们主要是要求出规定环的个数 考虑连 ...

  7. const修饰的常量 不能被直接修改 但是可以通过指针进行间接修改

    大家都知道如下代码中,被const限定的a是不可以被直接修改的 void main() { const int a = 3; a=1; } 在C++中const修饰的常量,不能被直接修改,但是可以通过 ...

  8. Maven:如何在eclipse里新建一个Maven的java项目和web项目

    如何在eclipse里新建一个Maven的java项目和web项目: 一:java项目 New-->Other-->Maven 右击项目-->properties,修改以下文件: ① ...

  9. 回溯算法 DFS深度优先搜索 (递归与非递归实现)

    回溯法是一种选优搜索法(试探法),被称为通用的解题方法,这种方法适用于解一些组合数相当大的问题.通过剪枝(约束+限界)可以大幅减少解决问题的计算量(搜索量). 基本思想 将n元问题P的状态空间E表示成 ...

  10. shell编程学习笔记之标准输入输出(read&echo)

    2017-07-17 09:32:07 输入read: 用途: 从标准输入读取一行,或者从文件描述符FD(file descriptor)中读取一行,并且将其分割成字段. 用法: read [-ers ...