首页 > 其他分享 >Unity游戏排行榜制作与性能优化

Unity游戏排行榜制作与性能优化

时间:2023-11-08 09:34:59浏览次数:32  
标签:游戏 redis 排行榜 Unity UI 服务器 排序 节点

游戏排行榜是一个很重要的功能,在弱联网的单机游戏与网络游戏中排行榜都是非常重要的,今天我们来详细的讲解游戏排行榜的制作方案,主要有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组件,减少大量合并计算的开销。

 

标签:游戏,redis,排行榜,Unity,UI,服务器,排序,节点
From: https://www.cnblogs.com/rainy1unity/p/17816618.html

相关文章

  • 使命召唤游戏助手的设计与实现-计算机毕业设计源码+LW文档
    摘 要近年来,随着互联网的蓬勃发展,游戏公司对信息的管理提出了更高的要求。传统的管理方式已无法满足现代人们的需求。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,随着各行业的不断发展,使命召唤游戏助手建设也逐渐进入了信息化的进程。这个系统的设计主要包括系统......
  • 用c语言写“扫雷游戏”
    扫雷游戏是一款简单却富有挑战性的益智游戏,适合所有年龄段的玩家。游戏的操作简单,但是需要玩家具备较高的逻辑推理能力和观察力,让人在游戏的过程中不断思考、分析、判断。游戏同时也可以锻炼玩家的注意力和耐心,让人享受到难度和成功带来的成就感。总体来说,扫雷游戏是一款有趣又有益......
  • 情侣飞行棋小程序游戏系统源码小程序搭建
      情侣飞行棋小程序一款适合情侣之间互动的游戏软件,小程序平台实现线上对战,双方在游戏中增进感情。下面就是关于游戏软件的系统搭建,开发功能的过程。  一、情侣飞行棋需求  1.游戏规则:两人游戏,多人游戏,轮流掷骰子,按照骰子点数前进,达到游戏的终点者胜利。  2.界......
  • 情侣飞行棋小程序真心话大冒险游戏开发
      情侣飞行棋小程序软件逐渐的出现在我们的视野中,因为不少的情侣也开始关注这一块了。情侣飞行棋小程序软件是一种新型的手机移动小程序软件,它以独特的游戏玩法,创新的设计,赢得了众多的年轻人的喜爱。  这款游戏的玩法模式是以飞行棋,真心话大冒险,互动游戏,对战模式等玩法。......
  • Unity如何优化Drawcall
    降低游戏的Drawcall,是渲染优化很重要的手段,接下来从以下4个方面来分析如何降低DrawCall:(1)降低Drawcall的意义是什么?如何查看游戏的Drawcall;(2)Drawcall合批的常用的技术手段原理与优缺点;(3)组织项目让Drawcall最小需要注意的点;搞清楚这些,Drawcall的优化基本上就能很......
  • Unity性能优化之内存篇
    本文和传统的内存优化不一样,不是讲如何降低内存占用,而是讲编程开发中要注意的内存问题以及一些内存技术的演变与原理。 本文很长,目录如下:(1)Application进程的内存分段;(2)OS动态内存分配与手动内存管理;(3)什么是内存碎片,避免内存碎片常用手段;(4)什么是内存泄漏,预防与......
  • 如何做好Unity项目性能优化
      在面试中,我们经常会被问各种”莫名奇妙”的问题,比如这道:”你是如何做好Unity项目性能优化的?”。“这个问题也太泛了吧,没有具体的优化点,这怎么回答?”瞬间跃入脑海。做面试复盘的时候,你可能会想这个面试官是不是什么都不懂,是个”青铜”啊。没错,能问这道问题的面试官要么......
  • Unity的粒子总是丢材质
    1)Unity的粒子总是丢材质2)C#传给C++的Byte数组如何释放3)CommandBuffer.DrawProcedural在手机上为什么不生效4)游戏加载场景碰撞,会弹出显卡报错,驱动程序超时这是第359篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和学......
  • NOIP2023模拟12联测33 B. 游戏
    NOIP2023模拟12联测33B.游戏目录NOIP2023模拟12联测33B.游戏题目大意思路code题目大意期望题思路二分答案\(mid\),我们只关注学生是否能够使得被抓的人数\(\lemid\)那我们就只关心\(a>mid\)的房间就行了。设学生有\(p\)的概率进入第\(i\)个房间,那么老是去......
  • 水果连连看,Android 小游戏开发
    A.项目描述"水果连连看"是一款经典的休闲益智小游戏。游戏的目标是通过连接相同的水果图标来消除它们,最终清空整个游戏界面。它以其简单易懂的规则和有趣的玩法而受到许多玩家的喜爱。让我们来梳理一下这款小游戏的功能需求。游戏规则和目标:游戏采用经典的连连看玩法,玩家需要在限......