UE蓝图与Puerts协作流程:可视化编程与TypeScript结合

UE蓝图与Puerts协作流程:可视化编程与TypeScript结合

【免费下载链接】puerts PUER(普洱) Typescript. Let's write your game in UE or Unity with TypeScript. 【免费下载链接】puerts 项目地址: https://gitcode.com/GitHub_Trending/pu/puerts

在虚幻引擎(Unreal Engine,简称UE)开发中,蓝图(Blueprint)可视化编程与TypeScript脚本的结合能兼顾开发效率与代码灵活性。Puerts作为UE与TypeScript的桥接工具,通过自动生成类型声明、双向调用机制,实现蓝图逻辑与脚本逻辑的无缝协作。以下是具体实施流程及最佳实践。

一、环境配置与声明文件生成

1.1 安装与启用Puerts

确保项目已集成Puerts插件,具体步骤参考官方安装文档。插件启用后,需通过编辑器菜单或控制台命令生成TypeScript声明文件,使UE的C++/蓝图API在TypeScript中获得类型提示。

1.2 生成TypeScript声明

点击UE编辑器工具栏的"生成TypeScript声明"按钮,或执行控制台命令:

Puerts.Gen

生成过程会扫描项目中的UCLASS、UFUNCTION、USTRUCT等,生成对应的.d.ts文件。声明文件默认路径为unreal/Puerts/Typing/ue/,示例如下: 声明文件生成界面

声明文件确保了TypeScript调用UE API时的类型安全,例如可直接访问UE.VectorUE.Actor等类型。

二、蓝图与TypeScript双向通信

2.1 TypeScript调用蓝图/引擎API

通过生成的声明文件,TypeScript可直接实例化蓝图类、调用方法或访问属性。

示例1:加载并调用蓝图类
// 加载蓝图类
const bpClass = UE.Class.Load('/Game/StarterContent/TestBlueprint.TestBlueprint_C');
// 生成蓝图实例
const actor = world.SpawnActor(bpClass) as UE.TestBlueprint_C;
// 调用蓝图方法
actor.SetHealth(100);
console.log('当前生命值:', actor.Health);

蓝图类的加载路径需使用UE资源引用格式,具体语法见脚本调用引擎API

示例2:操作UE容器类型

Puerts支持UE的TArrayTMap等容器类型,可通过UE.NewArrayUE.NewMap创建:

// 创建TArray<int>并添加元素
const arr = UE.NewArray(UE.BuiltinInt);
arr.Add(10);
arr.Add(20);
console.log('数组长度:', arr.Num()); // 输出: 2

2.2 蓝图调用TypeScript函数

通过动态委托(Dynamic Delegate)静态脚本方法,蓝图可主动触发TypeScript逻辑,适用于事件回调、数据处理等场景。

方式1:动态委托绑定
  1. C++定义委托(如无C++基础,可通过蓝图函数库间接实现):
DECLARE_DYNAMIC_DELEGATE_OneParam(FOnButtonClicked, FString, Message);

UCLASS()
class UUIHandler : public UObject {
    UPROPERTY()
    FOnButtonClicked OnButtonClicked;
};
  1. TypeScript绑定回调
// 绑定按钮点击事件
uiHandler.OnButtonClicked.Bind((message: string) => {
    console.log('蓝图传递消息:', message);
    return true;
});
  1. 蓝图触发委托
    在蓝图中调用Broadcast节点,传递参数给TypeScript回调。
方式2:静态脚本方法

通过继承BlueprintFunctionLibrary,TypeScript函数可直接暴露给蓝图:

import * as UE from "ue";

class TsMathUtils extends UE.BlueprintFunctionLibrary {
    // 静态方法可被蓝图直接调用
    public static Add(a: number, b: number): number {
        return a + b;
    }
}
export default TsMathUtils;

在蓝图中,通过"调用静态函数"节点选择TsMathUtils.Add即可执行TypeScript逻辑。

三、协作流程最佳实践

3.1 功能拆分原则

  • 蓝图负责:UI布局、动画状态机、简单逻辑(如碰撞检测)。
  • TypeScript负责:复杂数据处理(如JSON解析)、网络请求、业务逻辑(如任务系统)。

3.2 性能优化建议

  • 避免频繁跨语言调用:将批量操作(如数组遍历)放在TypeScript中执行,减少引擎与脚本的通信开销。
  • 使用 blittable 类型:传递大型数据时,优先使用FVectorFColor等 blittable 类型,避免内存拷贝。

四、常见问题与工具链

4.1 调试工作流

  • TypeScript调试:通过VS Code连接UE进程,在TypeScript代码中设置断点,具体配置见VS Code调试文档
  • 蓝图调试:利用UE的蓝图调试器逐步执行,结合TypeScript日志输出定位问题。

4.2 声明文件更新

当蓝图或C++ API变更后,需重新生成声明文件:

Puerts.Gen FULL  // 强制全量生成,解决增量更新遗漏问题

五、总结

Puerts架起了UE蓝图与TypeScript之间的协作桥梁,通过类型声明自动化双向通信机制,既保留了蓝图的可视化开发优势,又发挥了TypeScript在复杂逻辑处理上的灵活性。实际开发中,建议按功能边界拆分职责,并利用调试工具链提升问题排查效率。

完整技术细节可参考:

【免费下载链接】puerts PUER(普洱) Typescript. Let's write your game in UE or Unity with TypeScript. 【免费下载链接】puerts 项目地址: https://gitcode.com/GitHub_Trending/pu/puerts

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值