Verse 脚本入门指南:你的第一个 UEFN 设备
什么是 Verse?
Verse 是 Epic Games 专为 UEFN 设计的编程语言。如果你使用过 Python,你会觉得 Verse 很熟悉——它使用基于缩进的语法,读起来几乎像英文。但它也借鉴了 Haskell 等函数式编程语言的思想,使其在处理游戏逻辑方面功能强大。
UEFN 中超出基本 Creative 设备的每一个自定义行为都需要 Verse。计分系统、自定义 UI、装备管理器、回合管理、排名进度——全部依赖 Verse。
设置你的第一个 Verse 设备
在 UEFN 中创建一个新的 Verse 设备:
- 在 UEFN 中打开你的项目
- 前往 Verse 菜单 → Create New Verse File
- 选择 Creative Device 作为模板
- 将其命名为
my_first_device
UEFN 会生成一个如下所示的模板文件:
using { /Fortnite.com/Devices }
using { /Verse.org/Simulation }
using { /UnrealEngine.com/Temporary/Diagnostics }
my_first_device := class(creative_device):
OnBegin<override>()<suspends>:void=
Print("Hello, Fortnite!")让我们逐步解析。
理解基础概念
`using` 语句 ——这些用于导入 API。/Fortnite.com/Devices 让你可以访问 Creative 设备。/Verse.org/Simulation 提供核心模拟功能。/UnrealEngine.com/Temporary/Diagnostics 提供用于调试的 Print() 函数。
类定义 ——my_first_device := class(creative_device) 创建一个继承自 creative_device 的新设备类。这就是你将放置在世界中的自定义设备。
OnBegin ——此函数在游戏开始时运行。<override> 标签表示你正在覆盖父类的 OnBegin。<suspends> 标签表示此函数可以使用异步操作(如 Sleep())。
构建一个击杀计数器
让我们构建一些实用的东西——一个跟踪击杀并显示它们的设备。首先,你需要在关卡中引用一个 UI 设备:
using { /Fortnite.com/Devices }
using { /Fortnite.com/Characters }
using { /Verse.org/Simulation }
kill_counter := class(creative_device):
@editable
EndGameDevice : end_game_device = end_game_device{}
var KillCounts : [agent]int = map{}
OnBegin<override>()<suspends>:void=
# Subscribe to elimination events
GetPlayspace().PlayerAddedEvent().Subscribe(OnPlayerAdded)
OnPlayerAdded(Player : player):void=
if (FortCharacter := Player.GetFortCharacter[]):
FortCharacter.EliminatedEvent().Subscribe(OnEliminated)
OnEliminated(Result : elimination_result):void=
if (Eliminator := Result.EliminatingCharacter):
if (Player := player[Eliminator.GetAgent[]]):
if (set KillCounts[Player] += 1) {}关键 Verse 概念
可失败表达式 ——Verse 使用 if 来处理可能失败的操作。Player.GetFortCharacter[] 如果玩家没有角色可能不返回任何内容。[] 方括号表示一个可失败调用,将其包裹在 if 中可以优雅地处理失败情况。
可变性 ——使用 var 声明的变量可以被修改。没有 var 的情况下,值默认是不可变的。这可以防止意外的状态修改。
事件与订阅 ——Verse 使用事件驱动模式。你订阅事件(PlayerAddedEvent、EliminatedEvent)并提供回调函数。这让你无需轮询即可响应游戏事件。
映射和数组 ——[agent]int 是一种映射类型(字典),将 agent 映射到整数。map{} 创建一个空映射。
常用模式
以下是你在几乎每个 Verse 设备中都会用到的模式:
计时器/延迟:
Sleep(5.0) # 等待 5 秒循环:
loop:
DoSomething()
Sleep(1.0)玩家遍历:
Players := GetPlayspace().GetPlayers()
for (Player : Players):
# 对每个玩家执行操作后续步骤
本指南涵盖了最基础的内容。如需深入学习:
- 阅读 Epic 官方的 Verse 文档
- 研究 GitHub 上的开源 Verse 项目
- 通过用 Verse 重新构建现有 Creative 设备来练习
- 加入 UEFN Discord 社区获取帮助
构建自定义 Verse 设备是区分专业 UEFN 开发者和业余爱好者的关键。如果你的地图需要复杂的自定义机制,我们的团队专注于 Verse 脚本开发——从自定义计分系统到完整的游戏模式框架。
查看我们的作品集,了解 Verse 在 10 张已发布地图中的实际应用,总游玩时间超过 48 亿分钟。
Kaio
Kaio Corporation UEFN 地图开发者
专业 Fortnite UEFN 地图开发者。累计超过 48 亿分钟游玩时长。 了解更多 →
需要定制地图?
联系我们 →