
您可能听说过Fortnite和Player Unknown’s Battlegrounds等游戏。 这两款游戏都是在虚幻引擎4中构建的。虚幻引擎一直是AAA游戏开发商和独立工作室的最爱。 自Epic Games于2015年免费提供该引擎以来,许多热心的开发人员和发烧友就开始尝试使用强大的3D引擎创建游戏。 大多数业余爱好者和小型团队选择引擎的内置蓝图编辑器,而不是C ++脚本。 尽管Unreal的蓝图编辑器使用起来非常简单,但是对于某些开发人员而言,在GUI界面中连接许多节点似乎很麻烦。 幸运的是,JavaScript社区总是找到一种将自己喜欢的语言与任何内容配对的方法,从而为我们提供了Unreal.JS。 Unreal.js是虚幻引擎的V8运行时,可以替代现有的C ++和Blueprint脚本,或与之一起运行。 使用JS开发大型3D游戏变得更容易的唯一事情是无限缩放的TypeScript。 在这里,我将向您展示Unreal.js和TypeScript的入门。
首先,如果尚未安装,请通过Epic Games Launcher安装虚幻引擎。 接下来,在启动器中转到市场并找到Unreal.js,然后运行“ Install to Engine”。
- 当今的游戏行业正在发生变化。 – Scott Jorgensen –中
- 制作手机游戏的基本技巧
- 从收藏邮票转变为2D游戏开发的爱好
- Istrolid更新0.46.9 —零件更新
- 认识(rcp)家庭:REDOX Game Labs

打开虚幻引擎并创建一个新项目。 在此示例中,我创建了一个第三人称蓝图项目。
打开编辑器后,转到“编辑>插件”,并确保已启用“虚幻JS”。 如果不是,请启用它,您将看到提示重新启动编辑器。
现在,在项目的内容文件夹中,您应该看到一个名为“脚本”的文件夹。 如果您尚未安装打字稿,请通过运行安装
npm install -g打字稿
接下来,打开您的终端并导航到Scripts文件夹并运行
tsc --init
这将生成一个tsconfig.json文件。 打开文件,然后将设置更改为您的首选项。 在底部,我们将从Unreal.js中排除“ aliases.js”文件。
tsconfig.json
...
...
//“ emitDecoratorMetadata”:true,/ *启用对为装饰器发出类型元数据的实验支持。 * /
},
“排除”:[
“ aliases.js”
]
}
现在,在您喜欢的编辑器中打开Scripts文件夹,并创建一个名为“ helloUnreal.ts”的文件。
现在,我们只添加一条控制台消息。 在文件中添加
console.log('HELLO UNREAL!')
现在,在我们的终端中,运行TypeScript编译器。
tsc helloUnreal.ts
这应该创建一个“ helloUnreal.js”文件。
打开虚幻编辑器,然后在ThirdPersonExampleMap中,转到“蓝图”并打开事件图。 在事件图中,我们将添加一个事件,该事件在游戏启动时触发,称为“ EventBeginPlay”。 添加事件的最简单方法是右键单击蓝图并进行搜索。

接下来,我们将找到使用相同方法添加JavaScript组件的函数,并通过单击和拖动将两个节点连接在一起。 选择JavaScript组件,然后在编辑器右侧的“详细信息”选项卡上,将我们的“ helloUnreal.js”文件添加到“脚本源文件”输入框中。


现在,请确保单击“编译”和“保存”,仅此而已。 现在,我们可以打开我们的JavaScript控制台并测试我们的代码。 转到“窗口>开发人员工具> Javascript控制台”,然后打开控制台。
现在单击“播放”按钮并运行游戏。 在控制台中,您应该看到我们之前添加的“ HELLO UNREAL!”消息。

使用TypeScript创建HUD消息
好的,现在让我们尝试使用Unreal.js对我们的游戏进行一些实际操作。 首先,要启动实时重载开发环境,让我们创建一个名为“ bootstrap.ts”的引导文件,该文件将遵循Unreal.js示例。
/// />
导出默认功能(文件名:字符串){
Context.RunFile('aliases.js')
Context.RunFile('polyfill / unrealengine.js')
Context.RunFile('polyfill / timers.js')
require('devrequire')(文件名)
}
现在,让我们运行TypeScript来观察更改,方法是使用以下命令编辑helloUnreal.ts文件
tsc -w
让我们通过创建一个actor将我们的“ HELLO UNREAL!”消息打印到HUD。 以下是helloCanvas示例。 打开helloUnreal.ts并添加以下代码:
/// />
//查找本地播放器控制器
函数GetPC(){
// out-ref函数返回一个包含out-ref参数并返回参数的对象。
//例如)bool USomeClass :: Func(int a,int * b,int * c); -> {$:{bool},b:{int},c:{int}}
返回PlayerController.C(GWorld.GetAllActorsOfClass(PlayerController).OutActors [0])
}
函数main(){
MyHUD类扩展了HUD {
ctor(){
}
//覆盖ReceiveDrawHUD
ReceiveDrawHUD(){
var text:string ='HELLO UNREAL!';
this.Canvas.DrawText(
GEngine.SmallFont,
文本,
{X:this.Canvas.SizeX / 2,Y:this.Canvas.SizeY / 2},
{R:1,G:1,B:1,A:1},
0,
{R:0,G:0,B:0,A:1},
{X:1,Y:1},
真实,真实,真实,
{R:0,G:0,B:0,A:1}
)
}
}
//注册新的HUD类
让MyHUD_C = require('uclass')()(global,MyHUD);
//并实例化它
GetPC()。ClientSetHUD(MyHUD_C)
//无需清理
返回函数(){
}
}
从“ ./bootstrap”导入引导程序
//引导以启动实时重载dev env。
尝试{
module.exports =()=> {
let cleanup:Function | null = null
//等待地图加载。
process.nextTick(()=> cleanup = main());
// live-reloadable函数应返回其清理函数
return()=>(清理)()
}
}
抓住(e){
bootstrap('helloUnreal')
}
现在,当我们在游戏中点击“播放”时,我们应该在屏幕中央看到“ HELLO UNREAL!”消息。

请注意,此示例包括未使用的清除功能。 如果要在脚本中创建Actor,则此功能非常重要,但是您可以在此处看到其基本示例。
现在我们有了一个带有Unreal.JS的Unreal Engine项目,可以使用TypeScript编写脚本。 编码愉快!