游戏排行榜是一个很重要的功能,在弱联网的单机游戏与网络游戏中排行榜都是非常重要的,今天我们来详细的讲解游戏排行榜的制作方案,主要有4个点:

对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀

(1) 游戏排行榜排序算法核心算法实现;

(2) 游戏排行服务器如何制作;

(3) Unity客户端如何对接与请求排行榜数据;

(4) Unity如何优化排行榜UI性能;

游戏排行榜排序核心算法的实现

排序在游戏开发中是一种十分重要的算法,特别是对于海量的数据,高效的排序算法,是核心与关键,排行榜也是一样的,我们要对全服所有的排行榜的玩家做排序,每次玩家的数据有变化,就会引发排序,最终让我们把排行榜的排名拉取下来。排序算法的性能非常关键点,主流的排序算法都是非常成熟的,对于海量的服务器数据而言,排序算法也有核心的实现模块,这里我们是基于redis 来做排序,redis提供了一个有序列表的功能,内部实现了海量数据的排序,我们只要把数据提交给redis的有序集合, 然后redis就会给我们排序好,我们就可以拉排行榜前面的数据给客户端。排行榜的排序的核心算法全部由redis实现,我们直接用就可以了。

redis 添加一条记录: zadd table 权重 value, 往有序集合table里面添加一个带权重的数据,redis就会更具这个权重排序。

redis 获取排行榜的数据: zrang table start stop, 从有序集合中拉取从[start, stop]段的数据。还有反向排序等,原理一样。

排行榜服务器如何制作

有了redis server来帮我们做排行榜内核,为什么我们还有搞一个排行榜服务器呢?不直接让客户端直接操作我们服务端的redis server呢?这个主要是有几个因素:

a; 每个游戏分区,可能不一样,所以我们用一个排行榜服务器来管理这个概念;

b: 与客户端通讯的安全情况非常复杂,我们不要把核心数据库直接暴漏给客户端。比如,如果直接把redis命令开放给客户段,要是有个外挂,不断的来发起刷排行榜的命令,这样我们的排行服务可能就会受影响,如果我们有个服务器,就可以来封ip地址等手段来处理。要是有个外挂,不断发一些不标准的数据,没有外面的服务器验证,这样也会导致排行榜乱掉。

c: 如果排序受到一些性能影响,我们可以让排序服务器保存榜单的最小的分数,如果分数小于这个最小分数,那么新进来的分数就可以不用参与排行,来解决排行性能问题。

d: redis有序集合里面存放的可能是能表示玩家的唯一UID,客户端显示排行榜,可能还要其它的数据,比如用户头像等,所以需要一个服务器来根据UID来组合出客户端所需要的数据信息。

一般我们做游戏排行榜服务器会自己写一个服务端程序,这个服务端程序,作为redis-server的客户端来控制redis 有序集合的核心操作。让redis来帮助完成排序核心。然后游戏排行榜服务器就做好策略,比如最低权重机制,如果权重低于当前最小的权重,就不上榜,不上榜就不会有性能排序的开销等。

排行榜服务器提供协议接口给客户端使用,客户端根据协议来给排行榜服务器发数据,排行榜服务器检查验证游戏数据的真实性与安全性后再更新到redis server。

Unity如何优化排行榜UI性能

Unity如何要如何展示有200项排行榜数据的榜单,性能才会好呢?我们先来看一基本的排行榜展示的信息与数据内容,来简单分析一下,这个是某游戏的排行榜,如图所示:

我们从排行榜中截取一个排行榜记录来分析一下,它的UI组成。如下图:

UI元素组成:

1: 要显示每一项数据的背景UI节点

2: 要显示排行数字的UI节点;

3: 显示玩家头像的一个或几个UI,还有mask等;

4: 显示玩家的等级节点;

5: 显示玩家的昵称节点;

6: 显示玩家的分数节点;

7: 显示一个玩家的礼物按钮节点,

从上面分析来看,每个排行榜的记录显示出来需要10~15个UI节点。

如果我这个排行榜要显示100项数据,那么我需要创建1500个UI节点出来,这样性能肯定差。那么我们如何优化一个游戏排行榜或大量数据的滚动列表呢?

分析了可能的问题后,我们一般考虑从一下几个方面找手优化:

a: 减少显示的UI节点的数目,提升渲染性能。比如100项数据,其实我们滚动列表中能看到的也就只有10多项,所以我们可以做好数据分页,来做动态数据加载显示,比如每页10项显示的话,我们可以做30项,这样就可以做到动态加载,同时UI节点的数目可控。

b: 节约drawcall,尽量让这些大量的UI节点能在一个或少数几个drawcall下完成,比如我们把排行榜相关的资源都做到一个图集,这样增加Uidrrawcall合并的可能,同时我们做排行榜设计的时候,不要让文字label打乱drawcall 合批,UGUI会对文字渲染合批做优化,在不影响渲染效果的情况下调整文字的渲染顺序,把文字放一起渲染,能获得最小的drawcall, 这样,我们在组织界面设计的时候,就不要让图片盖到文字上,如果有某一样的图片盖到文字上,那么就会使得这个文字Label无法参与所有文字的合批,而这个文字Label还会打乱图片渲染的合批。

C: 对于UGUI来说,可以把排行榜都部署到一个根节点下,根节点搞一个UGUI的Canvas组件,减少大量合并计算的开销。

本节的Unity游戏排行榜制作与优化分享就到这里,

更多教学视频

Unity常用模块设计 : Unity游戏排行榜的制作与优化相关推荐

  1. Unity游戏排行榜的制作与优化

    前言 游戏排行榜是一个很重要的功能,在弱联网的单机游戏与网络游戏中排行榜都是非常重要的,今天我们来详细的讲解游戏排行榜的制作方案,主要有4个点: 对啦!这里有个游戏开发交流小组 里面聚集了一帮热爱学习 ...

  2. Unity常用模块_公共Mono类

    公共Mono类 在Unity中,如果游戏运行时,游戏脚本中存在多个Update,这会造成一定的性能损耗,所以我们可以用一个公共Mono类来统一使用一个update. 当然公共Mono的另一个作用就是在 ...

  3. Unity中FPS类小游戏的简单制作

    1.摄像机放Player上,射线机代码 using UnityEngine; using System.Collections;public class Camera : MonoBehaviour ...

  4. 经典好书:DSP嵌入式常用模块与综合系统设计实例精讲

    书名:DSP嵌入式常用模块与综合系统设计实例精讲 作者:刘向宇 副书名:DSP嵌入式常用模块与综合系统设计实例精讲 出版日期:2009-07-01 出版社:电子工业出版社 页数:406 ISBN:97 ...

  5. 基于C#+unity的3D平衡球游戏设计 课程报告+展示PPT+项目源码

    资源下载地址:https://download.csdn.net/download/sheziqiong/85705538 资源下载地址:https://download.csdn.net/downl ...

  6. 软件工程课程设计 unity游戏FPS

    目录 项目介绍 需求分析 系统设计 项目介绍 我们打算做一款联机FPS游戏, 玩法 主要为PVP玩法,分队进行对战. 角色在商店可以使用金币购买装备,击杀或胜利可以获得金币. 装备主要为各种枪械. 每 ...

  7. 【Unity】第三人称射击游戏开发过程之瞄准状态设计(TPS.S.P1)

    [Unity]第三人称射击游戏开发过程之瞄准状态设计(TPS.S.P1) 设计整体的结构与模式 瞄准状态的设计 瞄准相机 瞄准状态 瞄准时的鼠标移动速度限制 瞄准点的处理 角色在瞄准状态下的旋转 瞄准 ...

  8. 【Unity】第三人称射击游戏开发过程之开火设计(TPS.S.P2)

    [Unity]第三人称射击游戏开发过程之开火设计(TPS.S.P2) 枪械的开火 开火流程 开火前的准备 实体子弹的准备 开火逻辑 这一章我们来设计基础的枪械功能. 枪械的开火 我现在选择的武器是41 ...

  9. 视频教程-Unity网络游戏架构设计-Unity3D

    Unity网络游戏架构设计 网名:海洋,CSDN社区讲师,3D游戏引擎开发者,IT讲师,计算机图形学方向研究生,曾在浙江大学CAD&CG;国家重点实验室学习.从事IT行业15年,主导或参与了1 ...

最新文章

  1. FPGA逻辑设计回顾(12)RAM以及ROM的RTL设计及其验证
  2. 线程的创建 验证线程之间共享数据 守护线程 线程进程效率对比 锁 死锁 递归锁...
  3. python爬取动态网站
  4. leetcode面试准备:Decode Ways
  5. 联想电脑怎么进入Android,联想电脑怎么连接手机
  6. 【感想文】找到自己的兴趣所在,坚持下去。写文章,学习,我的坚持。
  7. 开源.NET企业级应用系统 OpenVista
  8. rsync 服务快速部署手册
  9. Visual Studio 2017新建及运行C++程序步骤
  10. rust异步编程--理解并发/多线程/回调/异步/future/promise/async/await/tokio
  11. 变量 重复声明_JS:定义变量的var、let有何操作?(360°无死角)
  12. java put请求_计算机毕业设计中用java实现小程序推送(springboot实现)
  13. mdui前端插件,有菜单对话框等
  14. 安装“万能解码器”还原真实“解码”(纯以个人兴趣分析)
  15. 【揭秘恒大老总许家印】迄今为止最深度、全面的。
  16. AI说人“画” | Heart Broken, 游戏中被AI碾压的我们都中了哪些套路?
  17. Python爬虫系列之MeiTuan优选商家端商品自动化管理(商品发布、商品排期、订单采集)
  18. xposed开发11 - 微信红包
  19. 20大数据可视化工具测评
  20. 有些政府性质的网站对非IE浏览器不怎么支持,该如何处理?

热门文章

  1. linux paste变量,Linux paste命令
  2. JAVA简单的键盘输入
  3. 计算机系高考激励的句子,书中那些惊艳的励志句子100字
  4. 120套毕业答辩PPT模板(本科、硕士、答辩、开题)
  5. Oracle关工单差异分析,Oracle EBS 工单关闭问与答
  6. 使用fbinst生成u盘启动列表大小不能太大
  7. 重庆网通信息港试点电力线上网
  8. 电脑中的语言栏设置,有什么方法?
  9. 网络营销-----你不知道的六大特点!
  10. 电子行业如何打造智能SMT工厂?