Table of Contents

教程:创建轨迹

中级 美术 程序员

本教程演示如何使用粒子为剑挥砍创建轨迹效果。

1. 创建项目

  1. 在 Stride Launcher 中,点击 Start 并选择 New Game。

  2. 在 Create a new game 对话框中,在 Asset Packs 下选择 Animated Models。Animated Models 资源包包含本示例中我们将使用的资源。(注意我们将从头开始制作粒子效果。)

    创建新游戏

  3. 为项目命名(例如 MyTrailEffect)并点击 OK。Game Studio 会加载一个包含几个实体的简单场景。

  4. 本教程不需要 Sphere 实体,所以直接删除它(选中它并按 Delete)。

2. 设置模型和动画

  1. 在 Asset View 中,打开 Models 文件夹并将 mannequinModel 拖放到场景中。mannequinModel 包含一个骨骼资源,我们将用它来制作剑挥砍动画。

  2. 选中 mannequinModel 后,在 Property Grid 中选择 Add component > Animations。这会为模型添加一个 Animation 组件。

    添加 Animations

  3. 在 Animations 组件下,点击 绿色加号按钮(添加)。

    添加动画

  4. 为动画输入一个名称。

  5. 在 Clip 旁边,点击 手形图标(选择资源)。

    选择动画资源

  6. 浏览到 Animations 文件夹,选择 Sword_R 动画,然后点击 OK。这是我们的从右向左挥砍动画。

    选择动画资源

  7. 要在运行时播放动画,我们需要添加一个动画脚本。我们可以使用预制的 AnimationStart 脚本。在 Asset View(默认在底部窗格)中,点击 Add asset 并选择 Script > Animation start。

    添加动画脚本

  8. 指定脚本的名称并点击 Create script。

    创建脚本

    9a. 如果 Game Studio 询问是否要保存脚本,请点击 Save script。

    9b. 如果 Game Studio 询问是否要重新加载程序集,请点击 Reload assemblies。

  9. 选中 mannequinModel 后,在 Property Grid 中点击 Add component 并选择 AnimationStart 脚本。

    添加 AnimationStart 脚本

    Note

    如果动画脚本不在组件列表中,请在任务栏中保存项目并点击 Reload game assemblies and update scripts。

  10. 在 Animation 组件下,在 Item 0 下,点击 手形图标(选择资源)。

    选择动画资源

  11. 浏览到 Animations 文件夹并再次选择 Sword_R 动画。

    选择动画资源

  12. 现在我们给人体模型一把武器。在 Asset View 中,浏览到 Models 文件夹并将 SwordModel 拖到 Entity Tree 中的 mannequinModel 上。这会使 SwordModel 成为 mannequinModel 的子实体。

  13. 在 Entity Tree 中展开 mannequinModel 以查看其子实体,并选择 SwordModel。

    SwordModel 子实体

  14. 在 Property Grid 中点击 Add component 并选择 Model Node Link。在某些版本的 Stride 中这被称为 Bone Link。

    添加 Model Node Link

    我们可以用它把 SwordModel 链接到 mannequinModel 骨骼中的某个点。无需指定目标,因为实体默认使用其父实体(mannequinModel)。

    更多信息请参见模型节点链接页面。

  15. 在 Model Node Link 下,在 Node Name(或 Bone)字段中选择 weapon_bone_R。这会把模型附加到骨骼中右手持武器的位置。

  16. 让我们看看目前的进展。点击 Play 运行游戏并查看效果。记住你可以使用鼠标和 WASD 键移动摄像机,从不同角度观察动画。

我们有了一个挥剑动画。接下来,让我们添加轨迹效果。

3. 创建基本轨迹

首先,我们将构建一个基本的轨迹,只是为了看看它的效果。

  1. 在 Game Studio 中,选择 SwordModel。在 Property Grid 中点击 Add component 并选择 Particle System。

    添加 Particle System

    这会为模型添加一个粒子系统组件,我们将用它来构建轨迹效果。

  2. 点击 Source 以展开其属性。

    展开 Source 属性

  3. 在 Emitters 旁边,点击 绿色加号按钮(添加)。这会添加一个新的粒子发射器。

  4. 在发射器属性下,将 Shape 设置为 Trail。

    将 Shape 设为 Trail

  5. 不幸的是,由于 Stride 中的一个 bug,我们需要做一个短暂的变通。在 Shape 属性下,将 Axis 设置为 Center。(形状实际上应该设置为 Edge,但 Edge 和 Center 设置在 UI 中是颠倒的。这将在 Stride 1.9.3 中修复。)

    将 Axis 设为 Center

  6. 在 Spawners 旁边,点击 绿色加号按钮(添加)并选择 Per frame。

    添加逐帧生成器

    这会为发射器添加一个逐帧生成器,它每帧生成 X 个粒子(而不是,比如说,每秒)。

  7. 在 Initializers 旁边,点击 绿色加号按钮(添加)并选择 Velocity。

    添加速度初始化器

    这会为发射器添加一个速度初始化器。

    此时,你可以抓取人体模型并在场景中移动它,看看粒子的行为。它们看起来像一团方块状的烟雾。

  8. 在速度初始化器下,将 Velocity min 和 Velocity max 值都设置为 0, 5, 0。

    设置 velocity min 和 max

    这会把粒子限制在 Y 轴上,就像一张无限薄的纸。

  9. 在 Initializers 旁边,点击 绿色加号按钮(添加)并选择 Direction。

    添加方向初始化器

    这会为发射器添加一个方向初始化器。

  10. 展开方向初始化器以查看属性。将 Direction min 和 Direction max 都设置为 0, 0, -1。这会将轨迹与挥砍动画的方向对齐。

  11. 运行游戏,看看粒子配合挥剑动画的效果。

我们有了轨迹,但它看起来还不太好。它太长了,是一整块颜色,粒子之间奇怪地相互连接,而且它从不消失。

4. 对粒子排序

因为粒子是作为公告板渲染的,轨迹的各段会奇怪地相互连接。要创建合适的轨迹效果,我们需要通过添加生成顺序初始化器来对粒子进行排序。

  1. 在 SwordModel 属性中,在 Particle System > Source > Emitters 下,在 Initializers 旁边点击 绿色加号按钮(添加)并选择 Spawn Order。

    Note

    确保不要选择 Spawn Order (Parent) 或 Spawn Order (Group)。

    添加生成顺序初始化器

    这会为发射器添加一个生成顺序初始化器。它没有任何属性,但它为粒子提供了一个我们可以据此排序的 SpawnID。

  2. 在 Emitters 下,在 Sorting 中选择 ByOrder。

    按顺序排序

  3. 在 Initalizers 下,在 Velocity 初始化器中,将 Velocity min 和 Velocity max 值都改为 0,0.5,0。

    更改速度

  4. 运行游戏。

现在粒子移动得很连贯了。

5. 改变长度

在 SwordModel 属性中,在 Particle System > Source > Emitters 下,将 Lifespan 改为 0.2, 0.2。

更改发射器寿命

在场景中移动人体模型,注意轨迹消失得更快了。

6. 添加纹理

为了修正颜色,我们将给粒子一个"嗖嗖"纹理:

Swoosh.png 纹理

  1. 将上面的纹理图片(swoosh.png)保存到磁盘。

  2. 将其导入项目。为此,在 Asset View 中点击 Add asset > Textures > Color 并选择 swoosh.png。

    添加纹理

  3. 在 SwordModel 属性中,展开 Emitters > Material。点击 手形图标(选择资源)。浏览到 Textures 文件夹并选择 swoosh.png。

    添加材质纹理

  4. 将 Alpha-Add 条设置为 1,使其 100% 自发光。

    Alpha add 条

  5. 在粒子发射器属性下,展开 Shape 并将 UV Coords 设置为 Stretched,UV Factor 设置为 1。

    设置 UV

  6. 展开 UV Rotate。在 Clockwise 下,选择 90 度。这会将纹理顺时针旋转 90 度,使"嗖嗖"线条指向正确的方向。

    旋转材质

  7. 运行游戏。

我们越来越接近了。但轨迹不会消失,所以看起来它像是附着在剑上。我们需要让效果在人体模型挥剑时出现,然后在挥砍结束时消失。

7. 将粒子效果制作成预制件

到目前为止,我们通过将粒子效果作为组件附加到剑上来创建它。现在我们要把效果从剑上分离出来,做成一个可以随时开关的独立实体。为此,我们将创建一个预制件(prefab)。有关预制件的更多信息,请参见预制件文档。

  1. 右键单击 SwordModel 并选择 Create prefab from selection。

    从选择创建预制件

    Game Studio 会根据 SwordModel 创建一个预制件并将其添加到 Asset View。通过从选择创建预制件,我们可以快速复制到目前为止设置的选项。

  2. 我们不想让 SwordModel 本身成为预制件——我们只是用它作为创建预制件的模板。它应该与我们的新粒子效果预制件分开,所以右键单击它并选择 Break link to prefab。

    断开与预制件的链接

  3. 因为正确命名会让一切更容易,我们将预制件重命名为 SwordTrail。为此,在 Asset View 中右键单击 SwordModel 预制件,选择 Rename,并输入 SwordTrail。

    重命名预制件

  4. 双击 SwordTrail 预制件,在 Prefab Editor 中打开它。我们将在这里自定义预制件。

    Prefab Editor

  5. 此预制件只包含一个实体 SwordModel。它不会再作为模型了,所以我们将此实体重命名为 SwordTrail(与其所属的预制件同名)。

  6. 从 SwordTrail 实体中移除 Model 和 Model Node Link(或 Bone Link)组件。我们不再需要它们了——此预制件将只是一个粒子效果。

  7. 同样,在 Particle System > Source > Emitters > Initializers 下,删除 Velocity 初始化器。目前,我们希望预制件效果保持静止。

    删除速度初始化器

  8. 在 SwordTrail 属性中,在 Particle System > Source > Emitters > Spawners 下,将 Loop 设置为 One shot,并将 Duration 改为 0.2, 0.2。

    设置初始化器的循环和持续时间

  9. 现在我们已经为粒子效果创建了单独的预制件,就不需要在剑的模型上保留粒子效果了。在主场景中,选择 SwordModel 并删除 Particle System 组件。

8. 用脚本控制效果预制件

我们已经创建了剑轨迹效果预制件。接下来,我们将使用脚本在人体模型每次挥剑时生成效果,并在几帧后删除效果。

  1. 在 Visual Studio 中打开项目。为此,在 Game Studio 中点击 Visual Studio 图标(Open in IDE)。

    打开 Visual Studio

  2. 在 Visual Studio 中,右键单击游戏项目并选择 Add > New item。在 Name 字段中,将脚本命名为 SpawnTrail,并点击 Add。

  3. 将脚本内容替换为本脚本中的代码:SpawnTrail.cs

    这是 Stride 附带的 Prefab Instance 脚本的修改版本。它不监听事件或按键,而是监听动画变化——比如我们的挥剑动画。

  4. 在脚本中,确保 namespace 正确。它通常与你的 Stride 项目名称匹配(例如 MyTrailEffect)。

    命名空间

  5. 保存脚本和 Visual Studio 项目(Ctrl + Shift + S)。

  6. 在 Game Studio 中,重新加载程序集。

    重新加载程序集

  7. 在 MainScene 中,选择 SwordModel。

    选择 SwordModel

  8. 在 SwordModel 属性中,点击 Add component 并选择 SpawnTrail 脚本。这会将脚本作为组件添加。

    添加脚本组件

  9. 在 SpawnTrail 组件属性下,在 Source 旁边点击 手形图标(选择资源)。

    选择资源

  10. 在 Entity Picker 中,选择 SwordTrail 预制件。

    选择 swordtrail 预制件

  11. 在 SpawnTrail 组件中,在 Animation 字段中点击手形图标(选择资源)。Select an asset 窗口打开。

    在左侧面板中,选择 mannequinModel 并点击 OK。

    在 Entity Picker 中选择 mannequin 模型

  12. 运行游戏。

多亏了我们的脚本,粒子效果在挥剑动画开始时出现,在结束时消失。

9. 调整轨迹的开始时间

  1. 选中 Sword_R 动画资源后,在右下角的 Asset Preview 中查看挥砍动画。(如果 Asset Preview 没有显示,请勾选 View > Asset Preview。)

    Asset Preview 会显示动画的长度(秒)。如果你仔细观察,可以看到人体模型直到动画大约 0.1 秒时才开始向下挥剑。让我们把轨迹效果设置为正好在人体模型挥剑时生成。

  2. 选择 SwordModel。

  3. 在 SpawnTrail 属性中,将 Start time 设置为 0.06。这意味着轨迹效果要到挥砍动画开始后 0.06 秒才会生成,这样看起来更自然一些。你可以根据自己的喜好调整它。

  4. 运行游戏查看效果。

你可能会注意到我们的轨迹效果看起来有点锯齿状,形成了一种"蜘蛛网"效果。让我们使它更弯曲一些。

10. 使轨迹弯曲

  1. 在 SwordTrail 预制件中,在 SwordTrail 实体上,在 Particle System > Source > Emitters > Shape 下,将 Smoothing 设置为 Best,Segments 设置为 5。

    平滑与段数

    这会在我们轨迹的粒子之间添加三个顶点,这应该足以创造出明显更平滑的效果。

  2. 运行游戏。

剑柄处的内侧曲线更平滑了。但剑刃处的曲线仍然是锯齿状的。

已平滑和未平滑的区域

我们想在更明显的剑刃处平滑效果。为此,我们将翻转粒子的方向。

  1. 仍然在 SwordTrail 预制件中,在 Transform 组件属性中,将 Position 改为 0, 0, -1。

    Swordtrail 位置

    这会将粒子效果的起点移到剑尖。

  2. 运行游戏。

现在我们有了一个新问题。因为我们把粒子效果移到了剑尖,粒子从剑尖飞出。我们需要反转它们的方向,让它们沿着剑刃向下移动到剑柄。

  1. 在 Particle System > Source > Emitters > Initializers 下,在 Direction 初始化器中,将 Direction min 和 Direction max 都改为 0, 0, 1。这会反转轨迹的方向。

    初始化器方向

  2. 运行游戏。

恭喜!你从头开始创建了一个轨迹效果。接下来如何调整它取决于你自己。

示例项目

这里有一个更精细的轨迹,它结合了多个粒子效果:

如果你想看看它是如何工作的,下载项目文件并查看。

另请参阅