【塔防】1,游戏架构

news2024/11/26 5:35:58

游戏架构

  • 一,StoneDefence核心架构分析
    • 1,安装
    • 2,核心框架
      • 2.1创建核心核心环境
        • 2.1.1游戏中的核心元素(GameCore)
          • Apawn
          • GameInstance
          • GameState
          • PlayerState
          • PlayerController
          • GameUserSettings
        • 2.1.2大厅中的核心元素(HallCore)
          • GameModeBase
          • PlayerController
          • GameStateBase
          • Pawn
        • 2.1.3核心元素
          • GameModeBase
        • 2.1.4核心元素
          • WorldSettings
      • 2.2文件夹操作
        • 2.2.1调换文件内容
        • 2.2.2更改文件夹名称
        • 2.2.3合并文件夹
      • 2.3游戏框架
  • 二,StoneDefence_UI架构分析
    • HUD
    • UserWidget
    • UI_RuleOfTheWidget
    • UI_RuleOfTheWidget
  • 三,StoneDefence角色架构分析
    • Character
    • RuleOfTheCharacter
    • AIController
    • Acter
    • 插件的创建
    • Acter
    • ToolBase
  • 四,StoneDefence核心资源和数据架构分析
    • Object
  • 五,扩展到整个游戏架构设计与分析
    • CheatManager
    • 总结

使用UE4.27.2
VS2019

一,StoneDefence核心架构分析

1,安装

UE4.27.2,空文件C++创建新项目(包含初学者内容包)
(出现报错问题,显示无法编译,去.net官网下载6.0,VS下载管理器下载.net内容)

2,核心框架

2.1创建核心核心环境

UE4游戏核心框架包括
Controller:控制
GameMode:游戏世界的逻辑,及整个游戏的玩法规则
PlayerState:存储玩家状态的类
GameState:游戏数据管理,如任务进度,游戏活动等
HUD:用户界面组件,用于显示游戏信息和提供交互性
Player:玩家

按下列顺序依次创建

2.1.1游戏中的核心元素(GameCore)
Apawn

APawn:组成UE世界的角色,提供角色的物理表现
在这里插入图片描述
命名:TowerDefenceGameCamera
路径:(新增)GameCore
不要忘记点击公共(Public)

GameInstance

GameInstance:正在运行的游戏实例的高级管理器对象。在游戏创建时生成并且不会因关卡切换销毁
在这里插入图片描述命名:TowerDefenceGameInstance
路径:bishe/Source/bishe/Public/GameCore

GameState

GameState:存储游戏数据,存在于服务端也存在于客户端
在这里插入图片描述
命名:TowerDefenceGameState
路径:GameCore

PlayerState

PlayerState:游戏中玩家状态
命名:TowerDefencePlayerState
路径:GameCore

PlayerController

PlayerController:玩家控制器
下含有HUD,上含有PlayState,联网功能
命名:TowerDefencePlayerController
路径:GameCore

GameUserSettings

GameUserSettings:掌管游戏设置(音量大小,相机的FOA、背景音乐的控制)
命名:TowerDefenceGameUserSettings
路径:GameCore

2.1.2大厅中的核心元素(HallCore)
GameModeBase

在这里插入图片描述
命名:TowerDefenceHallGameMode
路径:HallCore

PlayerController

在这里插入图片描述命名:TowerDefenceHallPlayerController
路径:HallCore

GameStateBase

命名:TowersDefenceHallGameState
路径:HallCore

Pawn

命名:TowersDefenceHallPawn
路径:HallCore

2.1.3核心元素
GameModeBase

命名:TowerDefenceSelectLevelGameMode
路径:SelectLevel

2.1.4核心元素
WorldSettings

命名:TowerDefenceWorldSettings
路径:Settings

2.2文件夹操作

2.2.1调换文件内容

打开文件,找到TowerDefenceGameUserSettings,剪切想要更换位置的文件到目标文件夹Settings,注意需要更换两次,一次.cpp一次.h
点击下图
请添加图片描述

vs2019跳出弹窗,点击全部重新加载

2.2.2更改文件夹名称

在Public下把文件夹SelectLevel重命名为SelectLevelCore
在Private下把文件夹SelectLevel重命名为SelectLevelCore
点击下图
请添加图片描述

vs2019跳出弹窗,点击全部重新加载

2.2.3合并文件夹

在Public下文件夹创建新文件Core,直接把三个文件夹GameCore、HallCore、SelectLevelCore放入Core中
SelectLevel,注意需要更换两次,一次.cpp一次.h
点击下图
请添加图片描述

vs2019跳出弹窗,点击全部重新加载

以上都需要更改为更改后的正确代码路径
如:TowerDefenceSelectLevelGameMode.cpp
更改前

#include "TowersDefenceSelectLevelGameMode.h"

更改后

#include "Core/SelectLevelCore/TowersDefenceSelectLevelGameMode.h"

2.3游戏框架

登录大厅
TowerDefenceHallGameMode(定义大厅里的规则)
TowersDefenceHallGameState(大厅里数据交互)

TowerDefenceHallPlayerController(控制,按键响应)
TowersDefenceHallPawn(提供视口)

游戏内核心元素
StoneDefenceGameModeBase(联网状态下充当服务器,非联网状态下是整个游戏的规则限定)
TowerDefenceGameState(游戏中所有数据)

TowerDefencePlayerState(游戏中玩家的数据)
TowerDefencePlayerController(玩家控制器)

TowerDefenceGameCamera(提供一个视口,摄像机(左移右移等))

选择关卡的定义
TowerDefenceSelectLevelGameMode(关卡选择)

存在于整个游戏
TowerDefenceGameInstance(游戏什么时候开始它就什么时候生成实例,游戏什么时候结束它就什么时候销毁)

设置
TowerDefenceGameUserSettings(游戏中的设置)

level
TowerDefenceWorldSettings(level的状态)
在这里插入图片描述

二,StoneDefence_UI架构分析

制作各种UI

HUD

UMG是HUD的基类

命名:RuleofTheHUD
路径:bishe/Public/UI/GameUI/Core

命名:TowerDefenceHallHUD
路径:bishe/Public/UI/HallUI/Core

命名:TowersDefenceSelectLevelHUD
路径:bishe/Public/UI/SelectLevelUI/Core

UserWidget

命名:UI_RuleOfTheWidget
路径:bishe/Public/UI/Core
上述HUD都需要继承于此

UI_RuleOfTheWidget

命名:UI_MianScreen
路径:bishe/Public/UI/GameUI/UMG
作用:整个游戏界面(当作容器,包括所有元素)

命名:UI_MianScreen
路径:bishe/Public/UI/HallUI/UMG

命名:UI_SelectLevelMain
路径:bishe/Public/UI/SelectLevelUI/UMG

MainHall作为一个根,由次生成MainHall和MainScreen里有各个元素拼接
在这里插入图片描述

UI_RuleOfTheWidget

命名:UI_RucksackSystem
路径:bishe/Public/UI/GameUI/UMG
作用:背包系统UI

命名:UI_Inventory
路径:bishe/Public/UI/GameUI/UMG/Inventory
作用:物品栏UI

命名:UI_InventorySlot
路径:bishe/Public/UI/GameUI/UMG/Inventory
作用:物品栏小格子UI

命名:UI_PlayerSkillSystem
路径:bishe/Public/UI/GameUI/UMG
作用:技能栏UI

命名:UI_SkillSlot
路径:bishe/Public/UI/GameUI/UMG/Skill
作用:每个技能UI

命名:UI_GameInfoPrintSystem
路径:bishe/Public/UI/GameUI/UMG
作用:打印说明(如创建一个塔,跳出创建了一个塔)

命名:UI_GameMenuSystem
路径:bishe/Public/UI/GameUI/UMG
作用:游戏内菜单(通常游戏按ESC跳出的)

命名:UI_MiniMapSystem
路径:bishe/Public/UI/GameUI/UMG
作用:小地图

命名:UI_MissionSystem
路径:bishe/Public/UI/GameUI/UMG
作用:任务栏

命名:UI_ToolBarSystem
路径:bishe/Public/UI/GameUI/UMG
作用:顶部元素

命名:UI_GameSettingsSystem
路径:bishe/Public/UI/Common/UMG
作用:整个游戏设置,对应下面的UI_GameSettingsAudio、UI_GameSettingsGameSettings、UI_GameSettingsOtherSettings、UI_GameSettingsVideo

命名:UI_SaveAndLoadingGameSystem
路径:bishe/Public/UI/Common/UMG
作用:保存游戏,读取游戏,对应下面的UI_SaveAndLoadBar

命名:UI_GameSettingsAudio
路径:bishe/Public/UI/Common/UMG/GameSettings
作用:音乐设置

命名:UI_GameSettingsGameSettings
路径:bishe/Public/UI/Common/UMG/GameSettings
作用:游戏设置

命名:UI_GameSettingsOtherSettings
路径:bishe/Public/UI/Common/UMG/GameSettings
作用:其他设置

命名:UI_GameSettingsVideo
路径:bishe/Public/UI/Common/UMG/GameSettings
作用:图像设置

命名:UI_SaveAndLoadBar
路径:bishe/Public/UI/Common/UMG/SaveLoad
作用:保存游戏,读取游戏的每一小栏

命名:UI_HallMenuSystem
路径:bishe/Public/UI/HallUI/UMG
作用:大厅的开始游戏等按钮

命名:UI_LevelButton
路径:bishe/Public/UI/SelectLevelUI/UMG/Button
作用:选择关卡界面
在这里插入图片描述

三,StoneDefence角色架构分析

角色属性有共同之处,生命值、魔力值、攻击力等,需要一个基类承接

Character

命名:RuleOfTheCharacter
路径:bishe/Public/Character/Core
作用:角色

RuleOfTheCharacter

命名:Towers
路径:bishe/Public/Character/CharacterCore
作用:塔

命名:Monsters
路径:bishe/Public/Character/CharacterCore
作用:怪物

AIController

命名:MonstersAIController
路径:bishe/Public/Character/AIController
作用:控制怪物的AI

命名:TowersAIController
路径:bishe/Public/Character/AIController
作用:控制塔的AI

Acter

命名:RuleOfTheBullet
路径:bishe/Public/Character/Bullet
作用:子弹

五种子弹类型:跟踪,直线(可以穿模),线性(不可穿模),AOE,闪电
请添加图片描述

插件的创建

需要一个工具类,辅助游戏的,如飘动的字、摄像机碰到阻碍视线的自动移动、摄像机的移动差值(可以做成插件)

编辑-》插件-》新插件(NewPlugin)-》空白(Blank)
命名:StoneToolClass

Acter

命名:ToolBase
路径:F:/bishe/Plugins/StoneToolClass/Source/StoneToolClass/Public/Core
作用:当移到低位时,摄像机缓慢下降,当移到高位时,摄像机缓慢上升
在这里插入图片描述

ToolBase

命名:DisplacementTrgger
路径:F:/bishe/Plugins/StoneToolClass/Source/StoneToolClass/Public/Tool
作用:位移触发
请添加图片描述

四,StoneDefence核心资源和数据架构分析

不能把UI和数据写在一起,不能把数据和Controller放在一起,如果写在了一起,后期的扩展维护很难,UE4已经提供了数据架构PlayState和GameState

接下来使用UE4提供的数据架构

View,Controller,Data的关系VCD模式(专业叫做MVC)
View:视口,渲染在屏幕上的UI,看到的信息,显示
Controller:控制,负责场景中交互问题、响应问题、逻辑问题
Data:数据

GameMode,GameState:放置场景中的规则问题

PlayState,GameState:存放许多逻辑并处理许多数据的逻辑,GameState里的数据逻辑包含PlayState里的所有数据

下面创建玩家数据和游戏数据,玩家数据可能被游戏数据所包含,玩家数据的量很大而且后期需要维护,所有可以独立出去

Object

命名:CharacterData
路径:bishe/Public/Data/Core
作用:角色数据
请添加图片描述

命名:PlayerData
路径:bishe/Public/Data/Core
作用:玩家数据

命名:GlobaData
路径:bishe/Public/Data/Core
作用:伪全局数据

命名:TDGameResources
路径:bishe/Public/Resources/Core
作用:资源类,加载资源用,贴图、声音、特效等
在这里插入图片描述
在这里插入图片描述

五,扩展到整个游戏架构设计与分析

CheatManager

命名:CommandLineManager
路径:bishe/Public/Debug
作用:调试,作弊功能

总结

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

手撕Vue-数据驱动界面改变下

经过上一篇的介绍,已经实现了观察者模式的基本内容,接下来要完成的就是将上一篇的发布订阅模式运用到 Nue 中,实现数据驱动界面改变。 在监听数据变化的章节当中,根据指定的区域和数据去编译渲染界面 这个步骤处,我写了…

20.项目开发之量化交易QuantTrade(二)

项目开发之量化交易QuantTrade(二) 前后端业务:用户登录 业务实现 MemberController /** * 登录用户 * param member * return */ ApiOperation("登录接口") PostMapping("/login") public ResponseBody RestObject login(RequestBody Memb…

浅谈弧光保护在中低压电力系统中的重要性

【摘要】: 中低压电力系统由于无母线保护、出线多,操作频繁、三相导体线间距离和与大地的距离比较近、易受小动物危害、设备制造质量比高压设备差,使其弧光事故的易发性大大高于高压。基于此,本文首先阐述弧光产生的原因及危害&am…

yolov5 + openvino + c++测试

1.拉取最新yolov5代码,训练自己数据或者直接用官方pt模型来进行转为openvino的格式,当前已经支持直接把pt模型转为openvino。 我拉取的是:2023-10-03 21:46 dd9e3382c9af9697fb071d26f1fd1698e9be3e04 在export.py代码中把default中加…

MySQL高级-01.Linux系统下安装MySQL

1.环境配置 首先要准备好两台centos虚拟机,在高级篇部分可能有数据库主从复制,所以暂时先开两台虚拟机。 两台虚拟机需要更改: mac地址主机名ip地址UUID 1.更改主机名 更改虚拟机的主机名 vim /etc/hostname2.更改静态ip地址 /etc/sysc…

PyQt 问题记录

1.现成的组件不一定线程安全,(包括且不限于数据的修改竞争,和一些组件的崩溃 ) 对于PyQt 的线程使用,可能还需要更谨慎些 保存逻辑 QuestionBox("保存/Save")def Save(self):okFlagFalseerrFlagFalseWriteCmd{}for it in self.Mode…

RAII与智能指针

RAII与智能指针 1.RAII1.1RAII理解1.2RAII的原理1.2.1简单的例子说明局部对象的自动销毁的特性 1.2.2 RAII 过程 2.智能指针2.1 auto_ptr2.1.1auto_ptr的使用构造函数与析构函数拷贝构造函数与赋值提领操作auto ptr其它函数 2.1.2autoptr使用的注意事项 2.2 unique_ptr2.2.1uni…

一元函数极值问题

一元函数极值问题 0 引言 在高等数学课程中,我们应该都学习过一元函数的极值问题,这篇文章我们再来回顾一下相关知识点。为什么要对一元函数的极值问题进行回顾?因为后面我会出一篇非线性规划问题的极值问题,其中会涉及到多元函…

【视觉算法系列1】使用 KerasCV YOLOv8 进行红绿灯检测(下)

提示:免费获取本文涉及的完整代码与数据集,请联系助理老师peaeci122 使用最新“KerasCV YOLOv8”模型进行红绿灯检测的综合指南 YOLO目标检测模型已经进入了无数的应用领域,从监控系统到自动驾驶汽车。那么,如果在KerasCV框架下…

4.DApp-MetaMask怎么连接本地Ganache

题记 用metamask连接本地ganache,以下是全部操作流程 下载Ganache ganache是一个以太坊的个人开发环境,可以在上面部署合约、开发程序和进行测试。 ganache官网:Ganache - Truffle Suite 可以点击下面的按钮直接下载 ,下载速度…

怎样自动开始播放网页视频?

有些视频网站,网页打开后,并不会自动播放视频,需要人工点击视频或者播放器的播放按钮,才能进入视频播放状态。有没有办法一打开页面就自动播放视频呢?下面我们就来分析研究一下。 首先使用浏览器的开发者工具查看&am…

MybatisPlus多表关联分页返回结果异常

1. 按照该博客进行多表关联分页查询: https://blog.csdn.net/code_ang/article/details/116448694 2.在实际测试过程中,发现异常,分页返回的结果时而正确,时而错误。 count函数满足预期 count函数不满足预期 只是count了主表的…

pytorch 入门(二)

本文为🔗小白入门Pytorch内部限免文章 🍨 本文为🔗小白入门Pytorch中的学习记录博客🍦 参考文章:【小白入门Pytorch】教案二🍖 原作者:K同学啊 目录 一、神经网络的组成部分1. 神经元2. 神经网络…

热成像仪的工作原理及在工业设备状态监测中的应用

前面我们介绍过>>热分析技术在工业设备状态监测中的应用,下面我们将深入探讨热成像仪的工作原理及在工业设备状态监测中的应用。 近年来,热成像仪作为一种先进的检测工具,在工业设备状态监测领域得到了广泛的应用。热成像仪能够通过探测…

oauth2和knife4j结合

1.先说knife4j是个什么东西 他是swagger的升级版,在有swagger的调试功能以及接口描述的基础上,让人看着更加一目了然。 这次可能说的比较浅,主要是说怎么使用以及简单配置,还有我自己踩过的坑,因为这个东西我也第一次…

软件环境基础(ROS、CMake)

参考视频:【全】无人驾驶系列知识入门到提高 本文旨在对视频内容规划控制方面做一些学习记录,希望帮助有需要的人学习提高。不对处,望指正。 0 ROS介绍 ROS特点: 点对点设计(比如一个结点读取相机数据,传…

yolo配置(windows)

文章目录 一、下载Anaconda和pycharm1 、Anaconda官方下载地址:1.2 Anaconda 的安装 下载好之后双击打开可执行安装文件:1.3 进入到安装界面:1.4 这里建议两个都勾选(第一个选项是将 Anaconda 添加到环境变量中,不勾选…

火山引擎 ByteHouse:双十一即将到来,直播商家如何用数据“点播成金”?

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 “双十一”电商大促脚步渐近,各大平台的战火又将燃起。直播电商以低成本、高转化率等优势备受商家青睐。据智研咨询数据显示,2022 年我国直播…

iOS——JSONModel的使用与JSONModel的嵌套

什么是JSONModel JSONModel是一个解析JSON数据的开源库,可以将JSON数据直接解析成自定义的model 使用 JSONModel 非常简单,只需要将你的 model 类继承自 JSONModel ,而同时 model 中的属性名又恰巧可以和 JSON 数据中的 key 名字一样的话,那么非常恭喜你,你的工作…

10.16作业

头文件 #ifndef MYWIDGET_H #define MYWIDGET_H#include <QWidget> #include<QDebug> #include<QIcon> #include<QPushButton> #include<QLineEdit> #include<QLabel> #include<QMovie> #include<QCheckBox> #include<QPa…