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

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

时间:2023-10-25 16:36:45浏览次数:32  
标签:游戏 redis 排行榜 Unity UI 服务器 排序

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

 

  游戏排行榜排序核心算法的实现   排序在游戏开发中是一种十分重要的算法,特别是对于海量的数据,高效的排序算法,是核心与关键,排行榜也是一样的,我们要对全服所有的排行榜的玩家做排序,每次玩家的数据有变化,就会引发排序,最终让我们把排行榜的排名拉取下来。排序算法的性能非常关键点,主流的排序算法都是非常成熟的,对于海量的服务器数据而言,排序算法也有核心的实现模块,这里我们是基于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地址等手段来处理。要是有个外挂,不断发一些不标准的数据,没有外面的服务器验证,这样也会导致排行榜乱掉。

 

  一般我们做游戏排行榜服务器会自己写一个服务端程序,这个服务端程序,作为redis-server的客户端来控制redis 有序集合的核心操作。让redis来帮助完成排序核心。然后游戏排行榜服务器就做好策略,比如最低权重机制,如果权重低于当前最小的权重,就不上榜,不上榜就不会有性能排序的开销等。 排行榜服务器提供协议接口给客户端使用,客户端根据协议来给排行榜服务器发数据,排行榜服务器检查验证游戏数据的真实性与安全性后再更新到redis server。   Unity如何优化排行榜UI性能   Unity如何要如何展示有200项排行榜数据的榜单,性能才会好呢?我们先来看一基本的排行榜展示的信息与数据内容,来简单分析一下,这个是某游戏的排行榜,如图所示:   我们从排行榜中截取一个排行榜记录来分析一下,它的UI组成。如下图: UI元素组成:

 

从上面分析来看,每个排行榜的记录显示出来需要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的课程。

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

相关文章

  • SOCKS5代理在全球电商、游戏及网络爬虫领域的技术创新
    随着全球化进程的加速,跨界电商和游戏行业的出海战略愈发重要。在这个大背景下,技术如SOCKS5代理和网络爬虫成为连接不同领域、优化用户体验和提升市场竞争力的重要桥梁。本文将深入探讨SOCKS5代理技术在跨界电商、游戏和网络爬虫领域的应用及其对行业发展的推动作用。一、SOCKS5代理......
  • SOCKS5代理在全球电商、游戏及网络爬虫领域的技术创新
    随着全球化进程的加速,跨界电商和游戏行业的出海战略愈发重要。在这个大背景下,技术如SOCKS5代理和网络爬虫成为连接不同领域、优化用户体验和提升市场竞争力的重要桥梁。本文将深入探讨SOCKS5代理技术在跨界电商、游戏和网络爬虫领域的应用及其对行业发展的推动作用。一、SOCKS5代理......
  • Unity DOTS系列之Filter Baking Output与Prefab In Baking核心分析
     最近DOTS发布了正式的版本,我们来分享一下DOTS里面Baking核心机制,方便大家上手学习掌握UnityDOTS开发。今天给大家分享的Baking机制中的FilterBakingOutput与PrefabInBaking。FilterBakingOutput机制在默认情况下,Baking会为每个GameObject生成的Entity与Component,......
  • Unity 3D定点数物理引擎实战系列
    1.1 BEPUphysicsint3D定点数物理引擎介绍 帧同步的游戏中如果用物理引擎,为了保证不同设备上的结果一致,需要采用定点数来计算迭代游戏过程中的物理运算。也就是我们通常说的定点数物理引擎(确定性物理引擎)。本系列教程给大家详细的讲解如何在你的项目中内置一个确定性物理引......
  • Unity 3D定点数物理引擎实战系列2
    1.2 BEPUphysicsint定点数3D物理引擎使用上一节給大家介绍了BEPUphysicsint的一些基本的情况,这节课我们来介绍它的基本使用,本节主要从以下5个方面来介绍:(1) 创建一个物理世界Space,并开启模拟迭代;(2) 添加一个物理物体Entity到世界;(3) 物理引擎的基本处理与操作使用;(......
  • 华为云耀云服务器L实例:高级篇-部署自己的minecraft游戏服务器(下)
     书接上文,我们已经做好了在华为云耀云服务器L实例中开启minecraft服务器的所有准备工作,现在让我们正式在我们的华为云耀云服务器L实例中开启minecraft服务器。开启minecraft服务器首先,我们需要知道自己的minecraft服务器核心jar放在哪里了,就是上方下载上传后的路径,这里我的......
  • 华为云耀云服务器L实例:高级篇-部署自己的minecraft游戏服务器(上)
     华为云耀云服务器L实例是一款可快速部署且易于运维的轻量级云服务器,专为中小企业和入门级开发者打造。它不仅拥有华为云擎天架构的强大性能,还具有多项用户体验优化方案,让用户轻松上手,享受简单上云的乐趣。本产品网址为:https://www.huaweicloud.com/product/hecs-light.html......
  • 派克斯电脑全局改IP如何辅助捉妖游戏
    捉妖游戏是一款非常受欢迎的手机游戏,玩家需要通过探索地图来捉到各种可爱的妖精。为了让游戏更具趣味性,玩家可以通过地图制作来设计自己的捉妖之旅。在这篇教程中,我们将向您展示如何使用电脑全局软件工具——派克斯,来制作捉妖游戏的地图。捉妖游戏的地图制作可以让玩家更好地探索游......
  • Unity ILRuntime 实战教程系列
    1.1 Unity 搭建ILRuntime开发环境 Unity热更新目前主流的方案有; Lua, ILRuntime, puerts, huatuo方案。前两个大家都比较熟悉了,puerts是基于TypeScript开发的热更新,huatuo是基于C#的方案。后两个大家会比较陌生。本系列分享基于ILRuntime来做热更新。 ILRuntime热更......
  • Unity中GameObject对象的方法Find,FindGameObjectsWithTag等API的使用方法
    Unity中GameObject对象的方法Find,FindGameObjectsWithTag等API的使用方法.Find(stringname):.FindGameObjectsWithTag(stringtag):.FindGameObjectWithTag(stringtag):.FindWithTag(stringtag):在Unity中,GameObject类具有一些用于查找和操作游戏对象的方法。.Find(stringna......