论:即时战略RTS游戏的小地图采用 自下而上的汇报式 还是 自上而下的查找式?

关键词:RTS 小地图 游戏设计 思路 卫星 位置映射 阵营 更新 汇报 询问 UE4 UE5 Unreal Engine

前言

你是否想过类似红色警戒的战略小地图的要素是采用何种方式更新数据的。大量数据实时更新,考虑频率,运行效率,开发中如何选型?

正题

请问:小地图采用 自下而上的汇报式 还是 自上而下的查找式?

答:首选第一种方式,自下而上的汇报式。

在游戏设计中,小地图的位置更新机制可以采用不同的方法,具体取决于游戏的架构和设计需求。以下是两种常见的更新策略:

  • 自下而上的汇报式(Bottom-up Reporting):
    在这种方法中,游戏世界中的各个实体(如玩家、敌人、重要物品等)负责监控自己的位置,并定期将这些信息发送给小地图系统。
    每个实体都有一个汇报机制,当它们的位置发生变化时,它们会主动通知小地图。这种方法的优点是,小地图系统不需要主动去查找过滤每个实体的位置,从而减少了中央处理的负担。代码更加高效,没有查找式的性能瓶颈。如果RTS游戏采用ECS组件系统开发,则非常适合此方式。

这与真实战场前线士兵定时汇报战况是一样的。士兵向上汇报。除非紧急情况,忙碌的指挥官才会主动询问。

  • 自上而下的便利搜索式(Top-down Searching):
    在这种方法中,小地图系统定期扫描游戏世界,查找需要显示在小地图上的实体。
    小地图系统充当中央权威,它知道哪些实体应该被跟踪,并负责获取它们的位置信息。
    这种方法的优点是,游戏逻辑可以保持简单,因为实体本身不需要知道它们是否应该更新小地图。
    但是,这种方法可能会增加小地图系统的负担,因为它需要定期查询所有相关实体的位置。如果更新频率快,则小地图的负担将非常大,性能也会有瓶颈。

请问:采用汇报式,汇报给谁?HUD/UMG小地图组件/Player Controller/GameMode/GameState?

坦克Actor下挂在小地图专用Component,将位置信息直接发给Player的UMG的小地图
● 做一个Minimap Component挂给Actor;
● Component中,通过接口找到小地图UMG组件,直接发给UMG;
● 接口不用数组,接口使用单个对象,数据结构:(AActor* Actor,int state,Vector2D Location2D);
● 可调节发送频率如0.1s,无位移则不发送;
● UMG小地图中,做一个map映射,使用Actor为Key,不推荐使用ID为Key,装入map;
● 小地图自上而下定时2秒巡检一次所有Actor是否存在,如果不存在则删除UI图标;
● 删除的for循环使用倒叙模式。

附篇: 常见的游戏小地图有两种

第一人称 如下图GTA游戏,玩家在小地图中心。有叫雷达小地图,导航小地图,视角地图,环境地图。。。都是一个东西。一般射击类游戏喜欢这个。
请添加图片描述

第三人称 如下图红色警戒 展平的游戏全图地图,有叫世界地图,卫星地图。。。该地图要面临大量频繁的位置更新。
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/630639.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

「每日跟读」英语常用句型公式 第15篇

「每日跟读」英语常用句型公式 第15篇 1. It’s only logical that __ 合理的做法/结论是__ It’s only logical that we should take a break (合理的做法是我们应该休息一下) It’s only logical that we work hard to make money(合理…

SQL注入漏洞常用绕过方法

SQL注入漏洞 漏洞描述 Web 程序代码中对于用户提交的参数未做过滤就直接放到 SQL 语句中执行,导致参数中的特殊字符打破了原有的SQL 语句逻辑,黑客可以利用该漏洞执行任意 SQL 语句,如查询数据、下载数据、写入webshell 、执行系统命令以及…

详细分析Vue3中的ref(附Demo)

目录 前言1. 基本知识2. Demo 前言 由于新项目涉及Vue3,本着探究问题的本质研究所不会的疑问 1. 基本知识 ref 是 Vue 3 中用于创建响应式数据的函数 接收一个初始值并返回一个包含了该值的响应式引用对象与 Vue 2.x 中的 data 属性不同,ref 返回的是…

【JAVA入门】Day05 - 面向对象

【JAVA入门】Day05 - 面向对象 文章目录 【JAVA入门】Day05 - 面向对象一、对象的设计和使用1.1 类和对象1.2 类的分类 二、封装三、private 关键字四、this 关键字五、构造方法六、JavaBean七、对象的内存图7.1 一个对象的内存图7.2 两个对象的内存图7.3 两个引用指向同一个对…

一种请求头引起的跨域问题记录(statusCode = 400/CORS)

问题表象 问题描述 当我们需要在接口的headers中添加一个自定义的变量的时候,前端的处理是直接在拦截器或者是接口配置的地方直接进行写,比如下面的这段比较基础的写法: $http({method: "post",url:constants.backend.SERVER_LOGIN…

函数栈帧的创建和销毁(详细理解)

🎁个人主页:我们的五年 🔍系列专栏:c语言课程学习 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 问题: 1.ebp,esp两个寄存器用来维护函数栈帧 2.main函数也一个函数&#…

QCustomPlot的了解

(一)QCustomPlot常见属性设置、多曲线绘制、动态曲线绘制、生成游标、矩形放大等功能实现-CSDN博客 关键代码: QT core gui printsupport 使用上面文章中的代码跑起来的程序效果图: 我的学习过程: 最开始初…

java 项目通用数据权限设计

文章目录 前言一、常见的数据权限二、通用数据权限设计思路通用权限示例(灵活配置最简单方式)两个表业务理解最终拼接出来的sql 为: 总结 前言 权限一般分为操作权限和数据权限 操作权限: 菜单,页面,按钮 数据权限: 能看到的数据,包括各种页面的数据范围 一、常见的数据权限 …

kafka用java收发消息

用java客户端代码来对kafka收发消息 具体代码如下 package com.cool.interesting.kafka;import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecords; i…

MP3解码入门(基于libhelix)

主要参考资料: 【Arduino Linux】基于 Helix 解码库实现 MP3 音频播放: https://blog.csdn.net/weixin_42258222/article/details/122640413 libhelix-mp3: https://github.com/ultraembedded/libhelix-mp3/tree/master 目录 一、MP3文件二、MP3 解码库三、libhelix-mp3库3.1 …

Java 自然排序和比较器排序区别?Comparable接口和Comparator比较器区别?

注:如果你对排序不理解,请您耐心看完,你一定会明白的。文章通俗易懂。建议用idea运行一下案例。 1)自然排序和比较器排序的区别? 自然排序是对象本身定义的排序规则,由对象实现 Comparable 接口&#xff…

思科模拟器--2.静态路由和默认路由配置24.5.15

首先,创建三个路由器和两个个人电脑。 接着,配置两台电脑的IP,子网掩码和默认网关 对Router 0,进行以下命令: 对Router进行以下命令: 对Router2进行以下命令: 本实验完成。 验证:PC…

Leetcode39.组合总和

文章目录 题目描述解题思路重复子集剪枝 代码 题目 参考题解 题目描述 给你一个 无重复元素 的整数数组 candidates 和一个目标整数 target ,找出 candidates 中可以使数字和为目标数 target 的 所有 不同组合 ,并以列表形式返回。你可以按 任意顺序 返…

Android Studio kotlin 转 Java

一. 随笔记录 java代码可以转化成kotlin代码,当然 Kotlin 反过来也可以转java 在Android Studio中 可以很方便的操作 AS 环境:Android Studio Iguana | 2023.2.1 二. 操作步骤 1.步骤 顶部Tools ----->Kotlin ------>Show Kotlin Bytecode 步…

错误: 找不到或无法加载主类问题(已解决)

今天在虚拟机中安装了idea2023.2的版本,运行代码时发现错误找不到主类! 直接说结论: 我先clean了一下target,然后重新build,发现maven报错了,idea2023.2默认使用了内置的maven,然后我切换了一下…

ThreadLocal,一次到位

一、定义 ThreadLocal是线程私有变量&#xff0c;用于保存每个线程的私有数据。 那么什么情况下需要进行线程隔离 二、源码分析 public class ThreadLocalTest01 {ThreadLocal<Integer> t new ThreadLocal<>();public void test() {t.set(1);Integer integer…

MT3036 第一节离数课后

思路&#xff1a; 这道题与之前的表达式求值题目不同的是&#xff0c;有not这个单目运算符。而且如果表达式错误&#xff0c;要输入error。 把true和false成为操作数&#xff0c;把and or not成为运算符。 考虑error的情况&#xff1a; 1.and 和 or是双目运算符&#xff0c…

文心一言指令多样化,你知道的有哪些?

文心一言的指令非常多样化&#xff0c;可以根据用户的需求和场景进行灵活调整。以下是一些常见的文心一言指令示例&#xff1a; 知识问答&#xff1a; 帮我解释一下什么是芯片&#xff1f;中国的历史上有哪些重要的朝代&#xff1f;人工智能在未来会有哪些发展趋势&#xff1f;…

表白成功率百分百的向女朋友表白网页源代码,向女友表白HTML源代码

表白成功率百分百的向女朋友表白网页源代码&#xff0c;向女友表白HTML源代码 效果&#xff1a; 完整代码下载地址&#xff1a;向女友表白HTML源代码 <!DOCTYPE html> <!--STATUS OK--> <html><head><meta http-equiv"Content-Type" c…

P8805 [蓝桥杯 2022 国 B] 机房

P8805 [蓝桥杯 2022 国 B] 机房 分析 是一道lca题目&#xff0c;可以直接套模板 前缀和处理点权 具体思路&#xff1a; 1.n台电脑用n-1条网线相连&#xff0c;任意两个节点之间有且仅有一条路径&#xff08;拆分成各自到公共祖先节点的路径——lca&#xff09;&#xff1b;…