Newer
Older
DungeonShooting / DungeonShooting_Document / 项目帮助文档.md
@小李xl 小李xl on 26 Mar 2023 3 KB 更新帮助文档

前言: 该文档仅针对DungeonShooting_Godot目录下的Godot工程


1.启动项目

Godot版本: Godot4x
.net版本: .net6.0
使用Godot打开project.godot, 如果是第一次打开项目会弹出一个找不到资源的提示, 这是因为项目没有编译过, 点击Godot右上角build, 然后打开项目设置, 在插件这一个页签下启用DungeonShooting_plugin这个插件, 然后项目就可以正常运行了


2.项目资源

所有资源严格划分类别, 并放入指定的文件夹
项目目录结构如下:

  • ./addons: 项目插件目录
  • ./prefab: 预制体资源目录
  • ./resource 美术,音乐,配置文件等资源放置路径
  • ./scene 场景资源
  • ./src 代码资源

3.游戏框架

3.1.简述

游戏框架分为三部分:

  1. 游戏核心系统
  2. UI模块系统
  3. 代码生成系统

游戏核心系统: 以游戏玩法为中心的逻辑代码, 包括玩家, 敌人, 武器, 被动, 道具, 地牢生成, 房间规则, 存档逻辑等
UI模块系统: 用户操作界面的逻辑代码
代码生成系统: 自动生成便于开发的资源的逻辑代码, 包括生成UI模板, 生成地牢模板, 生成代码等

3.2.游戏核心系统

3.2.1.什么是ActivityObject

定义: 游戏内所有可活动物体的基类叫做ActivityObject

ActivityObject的意由来: 为了方便统一管理物体, 并且减少子类代码沉积, 因此将所有活动物体都需要用到的逻辑抽到一个统一的类中, 并命名为ActivityObject, 所有的活动物体都需要继承该类

ActivityObject提供的基础功能:

  • Component组件管理
  • 协程功能
  • 外力控制运动
  • 纵轴运动模拟 (自由落体, 投抛物体等)
  • 数据标记
  • 对象归属区域
  • 互动逻辑接口

通过下面这张图可以了解游戏中的物体与ActivityObject的关系 (注意: 该图为早期开发版本的继承关系图, 后面开发可能会有修改)

3.2.2.什么是Activity模板场景

定义: Activity模板场景是指可以可以被实例化出ActivityObject对象的场景, 但是场景根节点必须是ActivityObjectTemplate节点

上面定义看起来有矛盾: ActivityObjectTemplate没有继承ActivityObject, 为啥以它为根节点的场景却能实例化出ActivityObject?
这就得提到一个概念: 场景与脚本分离, 顾名思义, 场景中的节点与ActivityObject的脚本是完全分离的, 场景中的节点并没有挂载ActivityObject脚本, 在编辑器中它们是两互不干涉的. 在ActivityObject脚本代码中指定该物体的模板场景, 那么游戏运行中, 如果需要实例化ActivityObject, 游戏会先实例化出模板场景, 再用ActivityObject的实例顶替掉模板场景的根节点, 因此就能打到最终的效果. 为什么要这么做? 原因很简单, 因为我们的游戏是一个Roguelite游戏, 因此游戏中肯定会有大量的武器道具和敌人来填充内容, 但是总会有类似功能或者类似场景结构的物体, 这样就没有必要每一个物体都新建一个单独的场景, 而是让功能让这些类似功能或者结构的物体使用同一个场景, 但为了因对有不同行为逻辑的物体, 我们就设计了一套场景与脚本分离的设计模式来因对上述情况
总结: Activity模板场景是不挂载逻辑脚本的, 但是ActivityObject必须包含使用的模板场景, 并由统一的Api来实例化ActivityObject对象, 至于ActivityObject如何绑定模板场景, 请看: 3.2.3.如何创建一个ActivityObject

通过下面这张图可以更好的立即Activity模板场景ActivityObject的关系

3.2.3.如何创建ActivityObject

这里的创建分为两步