虚幻引擎中TypeScript入门

您可能听说过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”。

打开虚幻引擎并创建一个新项目。 在此示例中,我创建了一个第三人称蓝图项目。

打开编辑器后,转到“编辑>插件”,并确保已启用“虚幻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编写脚本。 编码愉快!