Unity Visual Scripting是一个插件,它为Unity编辑器添加了一个可视化的脚本环境。使用Visual Scripting,开发者可以通过拖放节点和连接它们来创建游戏逻辑,这种方式被称为节点式编程。
⭕ 文章入口
📂 系列教程索引
📄(1)基础知识
📄(2)使用if语句、按键输入和协程显示 “Hello World“
📄(3)连击游戏:如何计算时间和分数
📄(4)连击游戏:切换场景和显示分数
📄(5)对象基本操作:使用 AddForce 和 TransForm
📄(6)使用 Collision 添加碰撞检测
📄(7)使用 Raycast 和 List 创建目标游戏(第 1 部分)
📄(8)使用 Raycast 和 List 创建目标游戏(第 2 部分)
本文分为两部分,介绍如何使用 Raycast 和 List 创建目标射击游戏。
您将在这部分(第 1 部分)中学到以下内容:
- 向 List 添加元素
- 随机函数
- For 循环
- Instantiate 创建对象
💯 示例展示
💯 使用 Random 函数创建随机坐标
Random 函数输出指定范围内的随机数。
单击 Hierarchy 中的 + 按钮并创建一个空游戏对象。
将其命名为 [AimLabManager]。
将脚本机附加到 [AimLabManager],在名为 Macros 的文件夹中创建一个新图表,并将其保存在该文件夹中。
将图形命名为 [AimLabGraph]。
由于我们想每隔几秒钟生成一次 target,因此我们需要设置一个计时器。
添加变量以测量时间。将浮点变量 [Time] 添加到 [AimLabManager] 中的 Variables,并将 [Time] 添加到 Graph Editor。
将以下节点添加到 Graph Editor。
- Get Delta Time
- Add
- If
- Greater
- Set Object Variable ×2
- Float Literal
※ 仅提供不清晰的节点图像。
连接节点,如下所示。
这一次,我们将每 0.5 秒生成一个 target,因此在 Greater 中输入 0.5。
如果时间超过 0.5 秒,[Time] 将重置为零。因此,准备了两个 Set Object Variable (设置对象变量) 节点。
接下来,我们将创建随机坐标。将 Random Range 和 Vector3 Create(X, Y, Z) 添加到 Graph Editor。
选择 带结果的随机范围(浮点输出(Random Range with Result (Float Output))。
如果选择 Int 类型,则随机数将为整数。
这一次,我们将使用 Float 变量添加随机性。
此外,由于我们想向 X 轴和 Y 轴添加随机性,因此请创建两个 Random Range 节点。
连接节点,如下所示。
Random Range (随机范围) 中的上限变量是最小值,下限变量是最大值,它将在该范围内生成一个随机数。
这一次,将 X 轴设置为 -4 到 4,将 Y 轴设置为 0 到 3。
💯 使用 Instantiate 创建对象并将其添加到列表中
我们可以使用 Instantiate 来创建对象,因此我们将使用它来创建目标。
首先,为目标创建一个 Prefab。单击 Hierarchy 中的 + 按钮,然后单击 3D Object → Sphere 创建一个 Sphere。
将其命名为 [Target]。
将 Target 拖放到 Project 窗口中的 Asset 文件夹中,以将其转换为预制件。
将其转换为 Prefab 后,从 Hierarchy 中删除 Target。
将 Prefabbed Target 拖放到 Graph Editor 中,当出现以下窗口时,按 Enter 键添加它。
将 Instantiate 和 Get Identity 添加到 Graph Editor。
连接节点,如下所示。以下是 Instantiate 节点上每个端口的说明:
端口 | 描述 |
---|---|
Original Port | 连接要实例化的对象的 Prefab。 |
Position Port (Vector3 变量) | 连接要实例化的对象的位置。 |
Rotation Port (Quaternion 变量) | 连接要实例化的对象的旋转。 |
获取身份包含四元数值 (0,0,0,1)。
运行程序。现在,将在随机坐标处生成 [Target]。
💯 使用 For 循环为列表中的对象分配编号
添加 Aot List 类型 List 变量。将其命名为 [TargetList] 并将其添加到 Graph Editor。
将以下节点添加到 Graph Editor:
- Add Item
- Count Item
- For Loop
- Get List Item
- Integer To String
- Set Name
※ 仅提供不清晰的节点图像。
连接节点,如下所示。
实例化的对象是从 Instantiate 的右下角端口输出的,因此请使用 Add Item 将其添加到列表中。
Add Item 的左中间端口连接到要添加到的列表,而较低的端口连接到要添加到列表中的对象。
之后,重命名 目标 在列表中。
For 循环将连接到 Body 的过程重复指定次数。
First port (第一个端口) 具有初始值 input。
Step 端口中的值在每次迭代时都会添加到 First 值,当它等于 Last 值时,For 循环结束,进程通过 Exit 端口退出。
以下是 Body 之后发生的事情:
Index 将当前循环计数输出为 Int。
To String 用于将 Index 转换为 String。
该列表根据项目的存储顺序从 0 开始编号。
Get Item 检索存储在列表中连接到 Index 的数字处的信息。
最后,Set Name 用于重命名对象。
要重命名的对象连接到从顶部开始的第二个端口,新名称连接到其下方的端口。
运行程序。生成的对象现在可以从 0 开始按顺序编号。
💯 限制生成的目标数量
将 [Target List] 变量添加到 Graph Editor。
将以下节点添加到 Graph Editor:
- Count Items
- Greater
- If
※ 仅提供不清晰的节点图像。
在 On Update 之后添加这些节点。
这一次,我们将生成最多 4 个对象。
在 Greater 中输入 3(计数从 0 开始,因此 0 到 3 计为 4 项)。
当 [Target List] 中的元素超过 4 个时,Greater 将返回 True,从而阻止 If 之后的进程执行。
运行场景。您现在可以将生成的目标数量限制为 4。
以下是这次使用的所有 Visual Scripting 节点的概述。
📂 《初探 Unity 可视化脚本》系列文章索引:
📄(1)基础知识
📄(2)使用if语句、按键输入和协程显示 “Hello World“
📄(3)连击游戏:如何计算时间和分数
📄(4)连击游戏:切换场景和显示分数
📄(5)对象基本操作:使用 AddForce 和 TransForm
📄(6)使用 Collision 添加碰撞检测
📄(7)使用 Raycast 和 List 创建目标游戏(第 1 部分)
📄(8)使用 Raycast 和 List 创建目标游戏(第 2 部分)
🍉🍉🍉 如果觉得这篇文对你有帮助的话,请点个赞👍、收藏⭐️下吧,非常感谢! 💕💕💕
【博主简介】:10年以上软件开发经验,精通C语言
、C++
、C#
、Java
等开发语言,开发过大型 Android 项目,现主要自主开发经营 休闲益智类小游戏。
【粉丝福利】:博主收藏了大量游戏开发资源和素材。这些资源经过博主多年整理沉淀,现筛选一批精品资源,分享给大家学习研究。
Unity打怪军团 广招天下勇士加入 Unity学习互助小组 有意进群的同学联系我,互3互推也请联系我…