【问题标题】:How to pass information into Unreal Engine from outside source如何从外部源将信息传递到虚幻引擎
【发布时间】:2017-06-28 03:20:07
【问题描述】:

问题: 我想要一个我在另一个应用程序上构建并运行的模拟的高质量可视化。虚幻引擎 4 的模型可以正常工作,并且渲染得很好,足以满足我的需求。唯一的问题是,我需要告诉正在运行的虚幻引擎项目实例一些我的模拟正在创建的信息,例如移动对象。

可能的解决方案:

rpc 插件?

我对 grpc 相当熟悉,而且我的模拟设置为发送和接收 grpc 消息,但我不知道如何通过 unreal_engine 实现 grpc。互联网上的其他几个人编写了 rpc 插件,这可能满足我的需要。例如... https://github.com/PaddleCreekGames/Proto3RPC_UE4 但是,不知道如何完成那一堆工作并实际使用我想要的东西。不用说,该特定项目的文档对非编写它的用户不友好。

还有什么?

如果您有任何想法,或者如果您过去曾以特定方式将信息传递给虚幻引擎,任何指向正确方向的指针/代码 sn-ps/指向我可能错过的内容的链接将不胜感激。

【问题讨论】:

  • 这必须实时运行吗?例如,您不能将其作为烘焙的 FBX 或 Alembic 文件发送到虚幻引擎?

标签: rpc grpc unreal-engine4


【解决方案1】:

我对theodox也有同样的疑问, 如果输入不必立即/实时发生。 例如,您可以为您的模拟更新一个参数文件并读取您的虚幻引擎应用程序中的参数。 下面是创建 readFile bluemix 函数以读取和解析外部 JSON 文件的示例:

在/Source/[项目名称]/MyBlueprintFunctionLibrary.h中,定义输出结构和函数头

USTRUCT(BlueprintType)
struct FResultStruct
{
    GENERATED_USTRUCT_BODY()


    UPROPERTY(EditAnywhere,BlueprintReadWrite,Category = "Result Struct")
    float fieldname1;

    UPROPERTY(EditAnywhere,BlueprintReadWrite,Category = "Result Struct")
    FString fieldname2;


    //Constructor
    FResultStruct()
    {
        fieldname1 = 0;
        fieldname2 = "string";
    }
};

UCLASS()
class EXPERIMENTALPROJECT_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary
{
    GENERATED_BODY()

public:

    UFUNCTION(BlueprintCallable, Category = "MyBPLibrary")
    static FResultStruct ReadFile(FString fileName);
};

在 /Source/[Project name]/MyBlueprintFunctionLibrary.cpp 中实现你的参数文件解析器,例如:

// Read the  results file
FResultStruct UMyBlueprintFunctionLibrary::ReadFile(FString fileName)
{
    FString saveFilePath = FPaths::ConvertRelativePathToFull(FPaths::GameDir());
    fileName = saveFilePath + fileName;

    FResultStruct Result;

    FString jsonString;
    FFileHelper::LoadFileToString(jsonString, *fileName);

    TSharedPtr<FJsonObject> JsonParsed;
    TSharedRef<TJsonReader<TCHAR>> JsonReader = TJsonReaderFactory<TCHAR>::Create(jsonString);

    if (FJsonSerializer::Deserialize(JsonReader, JsonParsed))
    {
        Result.fieldname1 = JsonParsed->GetNumberField("fieldname1");
        Result.fieldname2 = JsonParsed->GetStringField("fieldname2");
    }
    return Result;
}

在你的虚幻引擎蓝图中你可以调用这个文件读取函数并在你的应用程序中使用它的解析内容: example

如果您需要实时输入,您可能需要在 UE4 中创建 HUD 并为您的所有参数创建输入字段,这对 imo 来说是更加劳动密集型的。

【讨论】:

    猜你喜欢
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-08-24
    • 2018-09-01
    • 2020-05-18
    • 2020-09-04
    • 2020-11-25
    • 2020-07-16
    相关资源
    最近更新 更多