Add Movement Task | Unity RTS Engine Documentation (gamedevspice.com)
目录
5.4.2 提示工具处理器(Tooltip UI Handler)编辑
5.5 设置单元创建器(Setup Unit Creator)
5.5.3 挂起任务处理程序(Pending Tasks Handler)
5.4 添加移动任务(Add Movement Task)
5.4.1 配置任务界面面板
基本UI管理组件
任务面板UI处理器
Categories:为任务面板定义多个类别。demo这边是分为了4个类别
比如第一排就是单位,第二排是升级,第三排是建筑升级;右边就是集结点,移动目标,采集等等的任务
Task UI Prefab:任务面板中用作基本任务的任务预制件
5.4.2 提示工具处理器(Tooltip UI Handler)![](https://i-blog.csdnimg.cn/blog_migrate/d427802a6f53286d3d429cbc69e857eb.png)
鼠标停留在任务(或其他UI元素)上时,该组件处理显示信息文本
- Panel: 工具提示文本出现时启用的UI对象
- Message Display: 消息显示:显示提示文本的文本。
- Duration: 使用 Use Duration 以使工具提示始终只在默认持续时间内显示。禁用则保持可见,只要鼠标悬停在实际任务上就显示
例如:当鼠标悬停在“农场”(下图中标红的区域)上时,上方的文字即为提示
5.4.3 配置任务管理器
在 GameManager → Essential → Task,它处理从UI面板到实体组件的中继任务。
- Change Mouse Cursor:以便允许设置目标(如UnitMovement)的实体组件在活动时覆盖默认的鼠标光标
- Custom Cursor:允许覆盖玩家在没有实体组件任务处于活动状态时始终看到的默认鼠标光标图像。
- 这个hotspot没明白什么意思
- Tasks Queue Key:当按下此键时,允许将命令添加到实体的任务队列中,而不是立即启用它。这里绑定的是左Shift键,也就是执行命令的队列,比如红警中的路径点,其他一些rts中的shift移动指令
5.4.4 创建实体组件任务UI
打开 tutorial_unit 预制,选择 unit_movement 子节点中的 Setting Target 选项卡
要分配字段 Set Target Task UI 。为此,我们将首先为Unit Movement组件创建一个实体组件任务UI资产,该资产将定义在任务面板中绘制运动任务所需的数据。
- Code: 唯一代码标识
- Enabled: 确保启动此项,以允许在任务面板上绘制任务
- Display Type: 选择 Hetero Multiple Selection 选项
- Single Selection:只有当包含组件的实体被选中而没有选择其他实体时,任务才可用
- Multiple Selection:允许在选择多个实体时显示任务,这些实体具有使用相同任务的组件
- Homo:代表所有实体都是同一类型的要求
- Hetero:则允许任务出现,即使使用同一任务的实体是不同类型的
- Icon: 在任务面板中指定一个将绘制在任务上的精灵。在Demo文件中,选择cursorHand_grey
- Panel Category: 面板类别。也就是上边那4块。对于移动任务,我们可以选择ID为3的类别,它指的是我们在地图场景中的杂项任务面板类别
- Force Slot/Slot Index: 强制插槽索引:指定一个位置使该task始终在该位置。我们可以启用Force Slot字段并将Slot Index赋值为1,这样移动任务将始终绘制在杂项面板的第二个位置
- Tooltip: 当玩家在任务面板中悬停在一个活动任务上时,工具提示允许你显示一个关于任务的信息文本。Description 为任务描述,Hide Tooltip On Click 为点击时提示隐藏。但是对于用于创建单位的任务,我们可能希望禁用Hide Tooltip On Click,因为只要玩家的鼠标在面板中悬停任务,我们就希望继续显示任务的描述
- Reload Time: 此字段仅与需要一段时间才能完成的任务相关。例如,用于创建单位的任务可以有一个计时器,当玩家点击面板上的任务时,计时器就会启动,当计时器完成时,任务就会被标记为完成,然后单位就会被创建。在移动任务的情况下,这个字段被Unit movement组件忽略,玩家只要点击面板中的任务就可以选择移动的目的地
- Cursor: 向玩家突出显示他们当前正在选择一个与任务相关的目标。如果光标图标的热点不在中心,那么您可以在热点字段中手动输入它。在我们的例子中,热点的值应该是(12,9),它适合我们分配的图标的尖端。这边的 hotspot 仍然不知道是什么意思
- Control Type: 为此任务UI资产分配控件类型,以便本地播放器可以使用控件类型中分配的键来启用任务
将 tutorial_movement_task 放到 Setting Target 选项卡中的 Set Target Task UI 字段中
到这里这个单位即可以右键点击移动又可以通过UI进行移动,且有提示
5.5 设置单元创建器(Setup Unit Creator)
5.5.1 概述
简单来说就是如何实现动态创建可移动单位的过程。
5.5.2 UnitCreator
给建筑添加一个 UnitCreator 脚本
Entity Component (Source: IFactionEntity)
该组件可以用于派系实体(任何实现IFactionEntity接口的实体),包括单位和建筑
5.5.2.1 General
- Code: 唯一代码标识
- Is Active: 确保该选项处于活动状态以启用组件
- Spawn Transform: 创建该预制的子对象确保它被放置在你想要单位生成的地方
5.5.2.2 Tasks
定义实际的任务,当tutorial_building任务面板被选中以允许创建单元时,这些任务将出现在tutorial_building任务面板上。
![](https://i-blog.csdnimg.cn/blog_migrate/758de7dd66c1056b3bde75a29f0ba5dc.png)
![](https://i-blog.csdnimg.cn/blog_migrate/78c46cb0abc085c72fc733d3eedcb492.png)
添加一个常规任务属性(General Task Properties)
并设置如下
返回到 Unit Creator 并选择该选项
-
Allowed Faction Types: 选择允许执行此任务的派系类型。如果派系实体没有匹配的派系类型,任务将被隐藏。
-
Required Resources: 所需资源。一旦我们在后面的教程中完成了资源,我们将回到这个领域。现在保持这个数组为空。
-
demo中城镇中心农民的所需
-
-
Faction Entity Requirements: 派系实体要求。允许您定义一系列派系实体(单位或建筑物),派系槽必须在尝试创建与任务相关的单位之前创建。当你的游戏要求之一是在生产其他类型的单位或建筑之前为一个阵营创造某些单位或建筑时,这一点尤其有用。为了保持本教程的简单性,我们也将保持这个数组为空。(没看懂,demo中的建筑也没有用到这个参数的)
-
Missing Requirement Data: 当玩家没有所需的资源或阵营实体要求来启动任务时,该字段会影响任务面板上任务的视觉方面。
-
Icon:修改任务UI资产中定义的图标。
-
Color:当Icon字段未被分配时,颜色将用于改变原始任务UI的颜色。
-
创建单元任务属性(Unit Creation Task Properties)
- Prefab Object: 将此建筑要生成的单位预制体放置在此处。这定义了将通过单元创建任务产生的实际单元。
-
Squad Data:单位小队设置。这个参数没有做详细说明,不过在demo的城镇中心有设置,没看懂是干啥用的
-
enabled :Create a squad of this unit type? Enable and then set the count in the next field
-
count:When creating in squad mode, specify the initial count of the squad
-
- Limit: 可定义每个单元创建任务的限制
- None: 无限制
- Launch Times: 启动次数。单位创建任务只能启动有限次数,可以在 Max Amount 中定义
- Active Instances: 一旦当前派系的活跃单位数量达到一定数量,单位创建任务将被禁用,否则任务仍然可以启动。该金额在Max amount字段中定义。
升级目标创建任务(Upgrade Target Creation Tasks)
该数组保留用于在其中一个单元升级时重新定义单元创建任务的数据。现在不涉及会在以后回到这个问题。
5.5.3 挂起任务处理程序(Pending Tasks Handler)
Unit Creator 是通过启动待处理任务来创建单元,这些任务在实际生成单元之前需要时间运行和完成。因此,Pending Tasks Handler组件必须附加到主建筑的预制对象或其任何子对象上,以便能够处理挂起的任务。
Max Count:实体在任何给定时间可以拥有的待处理任务的最大总数。
5.5.4 测试(Test)
运行场景,点击场景中的该建筑,会显示一个配置的单元创建任务。将鼠标停在上边会看到描述性测试出现在任务上方。
点击任务,任务将启动,并在底部右侧面板上的待处理任务槽中可用(只要建筑物仍处于选中状态)。如果您单击挂起任务(有进度条),您可以取消其进度,单元将不会被创建。当3秒的重新加载时间过去后,单位将在我们之前分配的相对于tutorial_building实例位置的刷出位置上刷出。
5.6 设置集结点(Setup Rallypoint)
5.6.1 概述
让新创建的单位在生产完成后立即移动到指定的目的地。
同上一节在建筑的 building_components 子节点上添加 Rallpoint 组件
Entity Component (Source: IFactionEntity - Target: Entity/Vector3):
指该组件可附属于派系实体(包括单位和建筑),并且它可以将IEntity(所有实体类型上使用的接口,包括单位,建筑和资源)或Vector3(地图中的位置)作为目标。如果目标被设置为地图上的一个位置,生成的单位会在生成后立即移动到该位置。而在目标是实体的情况下,生成的单位将在实体生成时尝试与之交互。
5.6.2 集结点组件
5.6.2.1 General Tab
- Code:代码唯一标识
- Is Active: 确保该选项处于活动状态以启用组件
- Priority: 代码中的注释译为“具有最低值的活动组件将被考虑用于鼠标右键单击目标集”
-
The active component with the lowest value will be considered for the right mouse click target set
-
5.6.2.2 Setting Target Tab
- Set Target Task UI: 允许通过出现在专用UI任务面板中的专用任务来设置目标。可以通过右键单击目标位置或实体来调整rallypoint,也可以通过单击任务面板上的任务来调整rallypoint。
- Order Audio: 分配一个或多个音频剪辑
- Set Target Resource Of Same Type On Dead: 如果rallypoint的最后一个目标是已耗尽的资源实体,则启用此选项允许rallypoint自动瞄准资源实体。这里的条件是新的目标资源实体具有与最后一个相同的资源类型。新资源实体的搜索范围可以在“Set Target Resource On Dead Range”中设置。
5.6.2.3 Rallypoint Tab![](https://i-blog.csdnimg.cn/blog_migrate/bded8a74eab2d43ea67d367f4b874bc4.png)
- Goto Transform: 创建一个子节点命名为 rallypoint_goto_position 然后将其拖放到此字段中。这个就是集结点的 Transform。如果用了demo文件可以搜“flagBlue”作为其视觉对象。可以在派系实体选项卡上将旗帜对象渲染器组件添加到主建筑组件的彩色渲染器数组中,并分配适当的材料,以便集结点旗帜获得与建筑派系颜色相同的颜色。
- Forced Terrain Areas: 定义建筑物的集结点位置所在的地形区域类型。如果将此字段保留为空,则集结点可以在任何地形区域类型上运行。
- Forbidden Terrain Areas: 定义建筑物不允许将其集会点放置在哪些地形区域类型。
- Max Distance: 定义rallypoint到达位置的最大距离。启动后会出现一个 Max Distance 属性
- Reposition To Valid Terrain Area: 重新定位到有效地形区域。当启用时,此组件将尝试在实体半径周围的建筑位置上重新定位rallypoint对象,以尝试找到满足rallypoint强制地形区域的位置。
- Reposition Size:当在这个阵营实体的半径周围重新定位集会点时的偏移大小。越小,需要采样的潜在位置就越多。
- Attack Move Enabled: 当启用时,使用集结点的创建单位可以攻击敌人实体,它们将向集结点目的地移动,并在遇到敌人实体时停止战斗,然后恢复移动到原始集结点目的地。
5.6.3 测试
启动场景,点击建筑后出现蓝色旗帜,创建单位后,单位会自动移动到集结位置