2017-06-28 2 views
0

Le problème: Je souhaite une visualisation de haute qualité d'une simulation que j'ai créée et exécutée sur une autre application. Unreal Engine 4 a des modèles qui fonctionnent, et rend assez bien pour combler mes besoins. Le seul problème est que je dois indiquer à une instance en cours d'exécution d'un projet Unreal Engine certaines des informations que ma simulation crée, comme des objets en mouvement.Comment transmettre des informations à Unreal Engine à partir d'une source externe

solutions possibles:

plugin? Rpc

Je suis raisonnablement familier avec grpc, et ma simulation est configurée pour envoyer et recevoir des messages grpc, mais je ne sais pas comment implémenter grpc via unreal_engine. Un couple d'autres sur l'interweb ont écrit des plugins rpc, ce qui pourrait fonctionner pour mes besoins. Par exemple ... https://github.com/PaddleCreekGames/Proto3RPC_UE4 Cependant, aucune idée de comment prendre cette pile de travail et d'utiliser réellement ce que je veux. Inutile de dire que la documentation de ce projet spécifique est hostile à un utilisateur qui ne l'a pas écrit.

Quelque chose d'autre? Si vous avez des idées, ou si vous avez historiquement transmis des informations pour induire un moteur d'une manière spécifique, tous les pointeurs dans la bonne direction/extraits de code/liens vers des choses que j'ai peut-être manqués seraient grandement appréciés.

+0

Ceci doit tourner en live? Vous ne pouvez pas par exemple envoyer ceci à irréel comme FBX ou Alambic ficelé des dossiers? – theodox

Répondre

0

J'ai eu la même question avec theodox, si l'entrée ne doit pas se produire instantanément/en temps réel. Vous pouvez par exemple mettre à jour un fichier de paramètres pour votre simulation et lire les paramètres dans votre application moteur irréelle. Voici un exemple pour créer la fonction de l'readFile pour lire et analyser un fichier JSON externe:

dans/Source/[Nom du projet] /MyBlueprintFunctionLibrary.h, définir struct de sortie et en-tête de la fonction

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); 
}; 

dans/Source/[nom du projet] /MyBlueprintFunctionLibrary.cpp mettre en œuvre votre analyseur de fichier de paramètres, par exemple:

// 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; 
} 

Et dans votre plan de moteur irréel, vous pouvez appeler cette fonction de lecture du fichier et utiliser son contenu analysé dans votre application: example

Si vous avez besoin d'entrée en direct, vous devrez peut-être créer HUD dans UE4 et créer des champs d'entrée pour tous vos paramètres, c'est plus laborieux imo.