选型

客户端引擎:UE5.6+PuerTS。不选5.7的原因,主要是稳定,我的目的是实践动画相关的。PuerTS选个puerts_v8_94版本,兼容性稍微好点?

服务器:大概率是NodeJS+TS。

其实Unrealsharp我也想试试,之前做一个Unity的项目的时候,感觉作为游戏开发确实挺顶的。而且能通吃服务端客户端。

PuerTS

PuerTS官网的介绍相对简单,刚接触游戏开发或者TS的同学会有点困难。下面几点是我过程中碰过的一些坑:

  1. 尽量不要用git-master安装的方式,用Release包。可以避免配置Backend引擎的问题。例如文档上写的v8_10.6.194实际上在master是被移除掉了。而新的V11版本binrary目录又变了,看起来在调整中
  2. UE最高目前支持到5.6。5.7因为某些接口变了,编译静态绑定会报错。
  3. 插件的目录要注意不要嵌套多一层。不然调用enable_puerts_module.js会报错
  4. 安装Node和NPM、进入到Puerts\插件目录,调用node enable_puerts_module.js,脚本会安装依赖和生成tsconfig。这个居然文档没有说,而且getting started.md的中文版居然是空的。
  5. 如果你使用VsCode,需要再添加一些Task,具体可以参考:UE5 从零搭建UE的puerts开发环境
  6. 如果你使用Rider可以将Typescript添加的工程,类似这样: Pasted%20image%2020251214011638.png 顺便开启tsc自动编译,如下: Pasted image 20251214014329.png

那基本上环境的配置完了。Rider基本能完美识别符号,后续看开发过程再继续评估Rider是否适合作为AIO的IDE。 7. 要测试PuerTS是否已经work,可以创建一个GameInstance类:

#include "ARDTsGameInstance.h"  
  
void UARDTsGameInstance::OnStart()  
{  
    JsEnv = MakeShared<puerts::FJsEnv>();  
    TArray<TPair<FString, UObject*>> Arguments;  
    Arguments.Add(TPair<FString, UObject*>(TEXT("GameInstance"), this)); // 可选步骤  
    JsEnv->Start("QuickStart", Arguments);  
    UE_LOG(LogLoad, Display, TEXT("GameInstance::OnStart"));  
    }  
void UARDTsGameInstance::Shutdown()  
{  
    UARDGameInstance::Shutdown();  
    JsEnv.Reset();  
}

然后在Typescript目录(跑上面js脚本时候生成的),建一个TS脚本(QuickStart.ts):

import * as UE from 'ue'  
import {argv} from 'puerts';  
  
let world = (argv.getByName("GameInstance") as UE.GameInstance).GetWorld();  
console.log("World Name: " + world.GetName());
  1. 最后在编辑器点ProjectsSettings替换GameInstancce为UARDTsGameInstance。点击Play运行,观察Log是否输出World Name:xxxx,输出成功的话,整个PuerTS的开发环境就准备好了。下一步就是正式开发逻辑了。