[开发者心得] 【RPC和Replicated】—— 用Replicated制作排行榜

[复制链接]
1884 |5
空伊伊 发表于 2023-3-21 11:04:56 | 显示全部楼层 |阅读模式
本帖最后由 空伊伊 于 2023-11-8 18:24 编辑

RPC和Replicated
所使用编辑器版本:Online_v0.27

目录

案例二:用Replicated制作排行榜

用Replicated制作排行榜

效果演示
点击增加点数按钮,可以增加点数,根据点数进行排名。当玩家上下线以及当数据更新时,排行榜会进行刷新,将玩家排名按照点数大小排序显示。(用Replicated制作的排行榜,点击很快的情况下也能同步的很及时)


完整工程
ReplicatedDemo.rar (81.41 KB, 下载次数: 148)
更多图片 小图 大图
组图打开中,请稍候......
回复

使用道具 举报

aojoo 发表于 2023-3-21 12:14:26 | 显示全部楼层
再弄个场景里的排行榜教程
回复

使用道具 举报

空伊伊楼主 发表于 2023-3-21 13:23:31 | 显示全部楼层
aojoo 发表于 2023-3-21 12:14
再弄个场景里的排行榜教程

ok
回复

使用道具 举报

脑的研发记录 发表于 2023-8-28 12:27:44 | 显示全部楼层
一点个人理解:
// manager定位:
// 包装代码:使得每一个同步脚本的功能清晰。封装效果详见分数同步脚本: ScoreSyncScript
// 管理代码:用于服务端管理多个脚本。如 服务器中动态创建、销毁脚本;
// 通信代码:建立客户端,服务端联系。如 注册RPC:
// 维护代码:避免管理代码使用时,本身出现bug。如 /**初始化RankMgr */initRankMgr()

// 生成脚本。
// Core.Script.spawnScript(ScoreSyncScript).then((script)=>{
//     script.serverInit();
// })

// 脚本进入脚本数组,方便管理
// this.scoreSyncScriptList.push(script);

// 删除脚本
// this.scoresyncscriptlist[1,2,3..].destroy()

// 遍历用于在脚本数组中查找,确定是对哪个脚本操作,删除,更新分数
// for (let script of this.scoreSyncScriptList) {
//     if (script.playerID == playerID) {
//         function......
//         ....... (或者删除.或者初始化赋值防止再次加分时出bug.)
//         // 跳出循环
//         break;
//     }
// }


// 分数快速同步原理:
// 每增加一个玩家x,所有玩家都会新增一个分数脚本x,加入scoreSyncScriptList
// 这个玩家x的分数同步脚本更新分数,其他玩家每个人手里的那个新增的分数脚本x也会更新分数。
// 但是排序没有不会自动刷新,需要发RPC通知去重新排序。
// 也就是说,分数自动同步之后,需要写代码告诉UI去刷新排序。否则分数变化,而排名不变。
// 告诉UI排序:根据帖子的代码来看,像是重新覆盖了UI:
// 有 dataList从 RankMgr的tellUIFresh()到 RankUI的this.freshItemByData(dataList)的数据传输。
// 完成分数变动后从同步脚本传到UI,然后显示这一流程,详见下面的几个数组的理解:

// 代码中出现的几个数组的理解:
// 出现dataList用于存分数数据,scoreSyncScriptList用于存脚本。
// 管理UI栏目的_allRankUIItem没有用于排序,而是对datalist排序,是在RankUI脚本里发现// this._allRankUIItem[index].freshByData(index, dataList[index].playerID, dataList[index].score),直接使用了排好序的datalist.
// 不是简单挪位置的复用原来的UIitem,甚至直接覆盖成新的UIitem.
// private _allRankUIItem: RankItemUI[] = [],这样感觉是用来实现检测要不要新增新的UIitem功能,和支持上述函数通过indix来对UI的修改:this._allRankUIItem[index].fresh....

参考文献:
// 自动同步应用的服务器优化与RPC应用的服务器优化不同
// 详见RPC和Replicated的Replicated介绍。
// 以及另一个帖子的后半部分:Replicated和Rpc的对比:https://forum.ark.online/forum.php?mod=viewthread&tid=1803
回复

使用道具 举报

空伊伊楼主 发表于 2023-8-28 13:09:16 | 显示全部楼层
脑的研发记录 发表于 2023-8-28 12:27
一点个人理解:
// manager定位:
// 包装代码:使得每一个同步脚本的功能清晰。封装效果详见分数同步脚本: ...

好棒咱们学习就是得有自己的理解。谢谢你阅读我的帖子
回复

使用道具 举报

脑的研发记录 发表于 2023-8-28 15:26:54 | 显示全部楼层
空伊伊 发表于 2023-8-28 13:09
好棒咱们学习就是得有自己的理解。谢谢你阅读我的帖子

一起进步哩,我也努力出高质量帖子,共同发展
回复

使用道具 举报

热门版块
快速回复 返回顶部 返回列表