如何动态地将C++内数据输出到AnimGraph

数据是从port端口接受的,暴露的父类是一个blueprintlibrary代码如下:

.h

#pragma once

#include "CoreMinimal.h"
#include "Kismet/BlueprintFunctionLibrary.h"
#include "mainBP.generated.h"

/**
 * 
 */
UCLASS()
class MYPJT_API UmainBP : public UBlueprintFunctionLibrary
{
	GENERATED_BODY()
		UFUNCTION(BlueprintCallable, BlueprintPure, Category = Game)
		static FString BodyTurn
		(
			FString& LX_uparm,
			FString& LY_uparm,
			FString& LZ_uparm,
			FString& LZ_lowarm,
			FString& LX_hand,
			FString& LY_hand,
			FString& RX_uparm,
			FString& RY_uparm,
			FString& RZ_uparm,
			FString& RZ_lowarm,
			FString& RX_hand,
			FString& RY_hand
			);

};

.cpp

FString UmainBP::BodyTurn(
    FString& LX_uparm,
    FString& LY_uparm,
    FString& LZ_uparm,
    FString& LZ_lowarm,
    FString& LX_hand,
    FString& LY_hand,
    FString& RX_uparm,
    FString& RY_uparm,
    FString& RZ_uparm,
    FString& RZ_lowarm,
    FString& RX_hand,
    FString& RY_hand
)
 
{
    int32_t wTempList[20] = { 0 }, i = 0;
    HANDLE hCom1 = init_com("COM4");
    char readBuf[1000] = { 0 }, bufTemp1[1024] = { 0 }, bufTemp2[1024] = { 0 };
    DWORD readsize;
    int n = 2;
    string str = "";
    int index = 0;
    while (n--) 
    {
        ReadFile(hCom1, readBuf, 256, &readsize, NULL);
        str += readBuf;
        memset(readBuf, 0, sizeof(readBuf));
        index = str.find('\n');
        if (index < 0) {}
        else if (index == 113)
        {
            string p = str.substr(0, index + 1);

            if (p[0] == ':' && p[113] == '\n')
            {
                for (i = 0; i < 14; i++)
                {
                    wTempList[i] = strtoul(p.substr(i * 8 + 1, 8).c_str(), NULL, 16);
                }
                uint32_t crcData = wTempList[13];
                uint32_t crcRes = crc32_in_c(0, (uint8_t*)wTempList, 52);

            }
            index = 0;
            float lz_uparm = 180*wTempList[1]/32768;
            float ly_uparm = 180*wTempList[2]/32768;
            float lx_uparm = 180*wTempList[3]/32768;
            float lz_lowarm = 180*wTempList[4]/32768;
            float lx_hand = 180*wTempList[5]/32768;
            float ly_hand = 180*wTempList[6]/32768;
            float rz_uparm = 180*wTempList[7]/32768;
            float ry_uparm = 180*wTempList[8]/32768;
            float rx_uparm = 180*wTempList[9]/32768;
            float rz_lowarm = 180*wTempList[10]/32768;
            float rx_hand = 180*wTempList[11]/32768;
            float ry_hand = 180*wTempList[12]/32768;
            LZ_uparm = FString::SanitizeFloat(lz_uparm); 
            LY_uparm = FString::SanitizeFloat(ly_uparm);
            LX_uparm = FString::SanitizeFloat(lx_uparm);
            LZ_lowarm = FString::SanitizeFloat(lz_lowarm);
            LX_hand = FString::SanitizeFloat(lx_hand);
            LY_hand = FString::SanitizeFloat(ly_hand);
            RZ_uparm = FString::SanitizeFloat(rz_uparm);
            RY_uparm = FString::SanitizeFloat(ry_uparm);
            RX_uparm = FString::SanitizeFloat(rx_uparm);
            RZ_lowarm = FString::SanitizeFloat(rz_lowarm);
            RX_hand = FString::SanitizeFloat(rx_hand);
            RY_hand = FString::SanitizeFloat(ry_hand);
            int32 MyVar = CVarRefractionQuality.GetValueOnGameThread();
        }
        else
        {
            str.erase(0,index + 1);
            LZ_uparm = "0";
            LY_uparm = "0";
            LX_uparm = "0";
            LZ_lowarm = "0";
            LX_hand = "0";
            LY_hand = "0";
            RZ_uparm = "0";
            RY_uparm = "0";
            RX_uparm = "0";
            RZ_lowarm = "0";
            RX_hand = "0";
            RY_hand = "0";

        }
    }
    return "0";
}

AnimGraph蓝图:

 

你好,我是有问必答小助手。为了技术专家团更好地为您解答问题,烦请您补充下(1)问题背景详情,(2)您想解决的具体问题,(3)问题相关代码图片或者报错信息。便于技术专家团更好地理解问题,并给出解决方案。

您可以点击问题下方的【编辑】,进行补充修改问题。