更新文档

This commit is contained in:
小李xl 2023-04-01 02:21:34 +08:00
parent ffd1045883
commit 4adcd9f24f

View File

@ -9,18 +9,18 @@
* [2.项目资源](#2项目资源)
* [2.1.目录结构](#21目录结构)
* [2.2.脚本获取资源](#22脚本获取资源)
* [2.3.重新生成`ResourcePath`](#23重新生成-resourcepath)
* [2.3.重新生成ResourcePath](#23重新生成resourcepath)
* [3.游戏框架](#3游戏框架)
* [3.1.简述](#31简述)
* [3.2.游戏核心系统](#32游戏核心系统)
* [3.2.1.什么是`ActivityObject`](#321什么是-activityobject)
* [3.2.2.什么是`Activity模板场景`](#322什么是-activity模板场景)
* [3.2.3.如何创建`ActivityObject`](#323如何创建-activityobject)
* [3.2.1.什么是ActivityObject](#321什么是activityobject)
* [3.2.2.什么是Activity模板场景](#322什么是activity模板场景)
* [3.2.3.如何创建ActivityObject](#323如何创建activityobject)
* [第一步, 创建模板场景:](#第一步-创建模板场景-)
* [第二步, 创建脚本:](#第二步-创建脚本-)
* [实例化`ActivityObject`](#实例化-activityobject)
* [3.2.4.自定义`RegisterActivity`](#324自定义-registeractivity)
* [3.2.5.`ActivityObject`常用功能](#325-activityobject-常用功能)
* [实例化ActivityObject](#实例化activityobject)
* [3.2.4.自定义RegisterActivity](#324自定义registeractivity)
* [3.2.5.ActivityObject常用功能](#325activityobject常用功能)
* [自定义组件](#自定义组件)
* [运动控制](#运动控制)
* [垂直方向运动](#垂直方向运动)
@ -31,8 +31,8 @@
* [创建模板房间](#创建模板房间)
* [绘制房间](#绘制房间)
* [配置房间门生成位置](#配置房间门生成位置)
* [`ActivityMark`标记](#activitymark-标记)
* [扩展`ActivityMark`标记](#扩展-activitymark-标记)
* [ActivityMark标记](#activitymark标记)
* [扩展ActivityMark标记](#扩展activitymark标记)
* [3.4.UI系统](#34ui系统)
* [3.4.1.UI系统概述](#341ui系统概述)
* [3.4.2.UI代码生器](#342ui代码生器)
@ -76,7 +76,7 @@ public const string resource_theme_mainTheme_tres = "res://resource/theme/mainTh
var resource = ResourceManager.Load<Theme>(ResourcePath.resource_theme_mainTheme_tres);
```
### 2.3.重新生成`ResourcePath`
### 2.3.重新生成ResourcePath
如果项目中有资源变动, 则可以使用`Tools`页签下的`重新生成ResourcePath.cs文件`
![](文档资源/image_6.png)
@ -97,7 +97,7 @@ var resource = ResourceManager.Load<Theme>(ResourcePath.resource_theme_mainTheme
在`Main/ViewCanvas/SubViewportContainer/SubViewport`的子节点将开启4倍缩放, 并且启用完美像素
该节点放置除UI以外的任何节点
#### 3.2.1.什么是`ActivityObject`
#### 3.2.1.什么是ActivityObject
定义: 游戏内所有可活动物体的基类叫做`ActivityObject`
源代码: [ActivityObject.cs](../DungeonShooting_Godot/src/framework/activity/ActivityObject.cs)
@ -115,7 +115,7 @@ var resource = ResourceManager.Load<Theme>(ResourcePath.resource_theme_mainTheme
通过下面这张图可以了解游戏中的物体与`ActivityObject`的关系 (注意: 该图为早期开发版本的继承关系图, 后面开发可能会有修改)
![](文档资源/2023-03-26_030144.png)
#### 3.2.2.什么是`Activity模板场景`
#### 3.2.2.什么是Activity模板场景
定义: `Activity模板场景`是指可以可以被实例化出`ActivityObject`对象的场景, 但是场景根节点必须是`ActivityObjectTemplate`节点
上面定义看起来有矛盾: `ActivityObjectTemplate`没有继承`ActivityObject`, 为啥以它为根节点的场景却能实例化出`ActivityObject`?
@ -127,7 +127,7 @@ var resource = ResourceManager.Load<Theme>(ResourcePath.resource_theme_mainTheme
通过下面这张图可以更好的立即`Activity模板场景`和`ActivityObject`的关系
(缺张图...)
#### 3.2.3.如何创建`ActivityObject`
#### 3.2.3.如何创建ActivityObject
这里的创建分为两步:
##### 第一步, 创建模板场景:
创建一个空场景, 并且添加`ActivityObjectTemplate`节点
@ -164,13 +164,13 @@ public partial class YourActivity : ActivityObject
[RegisterActivity(ActivityIdPrefix.Enemy + "0001", ResourcePath.prefab_role_Enemy_tscn)]
```
##### 实例化`ActivityObject`
##### 实例化ActivityObject
可通过`ActivityObject.Create(id)`创建物体, 这个`id`可以结合`ActivityIdPrefix`, 那么创建敌人最终可以这样写
```csharp
var enemy = ActivityObject.Create<Enemy>(ActivityIdPrefix.Enemy + "0001");
```
#### 3.2.4.自定义`RegisterActivity`
#### 3.2.4.自定义RegisterActivity
某些情况下需要更改`RegisterActivity`的参数, 或者需要对实例化出来的`ActivityInstance`进行统一的操作, 那么就需要我们自己写一个子类来继承`RegisterActivity`.
操作`ActivityInstance`需要重写:
```csharp
@ -185,7 +185,7 @@ public virtual void CustomHandler(ActivityObject instance)
例子: 注册武器, [RegisterWeapon.cs](../DungeonShooting_Godot/src/game/item/weapon/RegisterWeapon.cs)
由于创建武器必须指定武器属性数据, 那么原来的`[RegisterActivity()]`就不适用了, `RegisterWeapon`重写了构造函数, 改变了初始化参数, 并且重写`CustomHandler()`, 对`ActivityInstance`进行初始化属性操作
#### 3.2.5.`ActivityObject`常用功能
#### 3.2.5.ActivityObject常用功能
##### 自定义组件
这个功能类似于`Unity`的`MonoBehaviour`, 组件必须继承`Component`类, 组件的作用是拆分功能代码, 开发者可以将相同功能的代码放入同一个组件中, 与`Godot`的`Node`不同的是, 挂载到`ActivityObject`上的组件并不会生成一个`Node`节点, 它相比于`Node`更加轻量
@ -400,7 +400,7 @@ private IEnumerator StartRotation()
* 配置好一个房间的门生成区域后, 如果绘制房间时改变了房间的大小或者位置, 则编辑器会清空配置的门区域
* 编辑门区域功能属于扩展编辑器功能, 因此单纯改变门区域数据不会在场景页签上标`*`(编辑器不会认为该资源有修改), 修改后需要及时按下`ctrl`+`s`保存, 以免造成数据丢失
##### `ActivityMark`标记
##### ActivityMark标记
`ActivityMark`用于模板房间中创建`ActivityObject`对象, 并支配置指定的物体, 第几波生成该物体以及生成物体延时时间
源代码: [ActivityMark.cs](../DungeonShooting_Godot/src/framework/map/mark/ActivityMark.cs)
@ -443,7 +443,7 @@ public int WaveNumber = 1;
public float DelayTime = 0;
```
###### 扩展`ActivityMark`标记
###### 扩展ActivityMark标记
项目中提供了以下几个扩展`ActivityMark`属性的节点:
* [WeaponMark](../DungeonShooting_Godot/src/framework/map/mark/WeaponMark.cs): 创建武器设置弹药等
* [EnemyMark](../DungeonShooting_Godot/src/framework/map/mark/EnemyMark.cs): 创建敌人并设置武器和弹药