ue 获取动画参数数据

USkeletalMeshComponent

cpp 复制代码
void AMyActor::read_q(USkeletalMeshComponent* CurrentMesh)
{

	// Create a JSON object
	TSharedPtr<FJsonObject> JsonObject = MakeShareable(new FJsonObject());

	// Set fields for the JSON object
	JsonObject->SetNumberField(TEXT("start"), 0.0f);
	JsonObject->SetNumberField(TEXT("end"), 5.0f);

	// Serialize JSON object to string
	FString JsonStr_w;
	TSharedRef<TJsonWriter<>> Writer = TJsonWriterFactory<>::Create(&JsonStr_w);
	if (FJsonSerializer::Serialize(JsonObject.ToSharedRef(), Writer))
	{
		JsonQueue.Enqueue(JsonStr_w);
		UE_LOG(LogTemp, Log, TEXT("Simulated message added to queue: %s"), *JsonStr_w);
	}
	else
	{
		UE_LOG(LogTemp, Warning, TEXT("Failed to serialize JSON"));
	}

	if (!CurrentMesh || JsonQueue.IsEmpty())
	{
		bIsPlayingSegment = false;
		return;
	}

	FString JsonStr;
	JsonQueue.Dequeue(JsonStr);

	//TSharedPtr<FJsonObject> JsonObject;
	TSharedRef<TJsonReader<>> Reader = TJsonReaderFactory<>::Create(JsonStr);

	if (!FJsonSerializer::Deserialize(Reader, JsonObject) || !JsonObject.IsValid())
	{
		UE_LOG(LogTemp, Warning, TEXT("Invalid JSON message, skipping"));
		return;
	}

	float Start = JsonObject->GetNumberField(TEXT("start"));
	float End = JsonObject->GetNumberField(TEXT("end"));

	if (End <= Start)
	{
		UE_LOG(LogTemp, Warning, TEXT("Invalid start/end times"));
		return;
	}

	UE_LOG(LogTemp, Warning, TEXT("Start: %f, End: %f"), Start, End);
	bIsPlayingSegment = true;

	/*CurrentMesh->GlobalAnimRateScale = 0.6f;

	CurrentMesh->SetAnimationMode(EAnimationMode::AnimationSingleNode);
	CurrentMesh->PlayAnimation(TalkSeq, true);
	CurrentMesh->SetPosition(Start, false);*/

	float PlayLength = End - Start;

	if (CurrentMesh)
	{
		// 获取当前的 AnimInstance
		UAnimInstance* AnimInstance = CurrentMesh->GetAnimInstance();

		if (AnimInstance)
		{
			/*FName CurrentState = AnimInstance->GetCurrentStateName();
			UE_LOG(LogTemp, Warning, TEXT("Current Animation State: %s"), *CurrentState.ToString());
			*/
			// 获取曲线值(例如 Ctrl_L_Mouth_Corner_Pull)
			float MouthCornerPull = AnimInstance->GetCurveValue(FName("Jaw Open Alpha"));
			float Mouth_Corner = AnimInstance->GetCurveValue(FName("Ctrl_L_Mouth_Corner_Pull"));

			// 打印值到屏幕
			if (GEngine)
			{
				FString DebugMessage = FString::Printf(TEXT("Mouth Corner Pull: %f %f"), MouthCornerPull, Mouth_Corner);
				GEngine->AddOnScreenDebugMessage(-1, 1.0f, FColor::Green, DebugMessage);
			}

			// 或者打印到日志
			UE_LOG(LogTemp, Warning, TEXT("Mouth Corner Pull: %f %f"), MouthCornerPull, Mouth_Corner);
		}
	}
	bIsPlayingSegment = false;

}
相关推荐
码农的小菜园3 小时前
gradle常用指令使用笔记
笔记
鸟电波4 小时前
硬件笔记——示波器篇
笔记
Don.TIk4 小时前
SpringCloud学习笔记
笔记·学习·spring cloud
red_redemption4 小时前
自由学习记录(131)
学习
Shining05964 小时前
推理引擎方向(二)《大模型原理与结构》
人工智能·rnn·深度学习·学习·其他·大模型·infinitensor
WJSKad12354 小时前
ECA瓶颈改进YOLOv26通道注意力与残差学习深度融合突破
深度学习·学习·yolo
咕噜咪5 小时前
OpenLayers 入门教程:从零开始学习Web地图开发
前端·学习
cd11840515 小时前
AutoCAD Electrical 2020学习笔记
笔记·学习
ADHD多动联盟5 小时前
当孩子上课小动作多,如何有效改善学习困难?
学习·学习方法·玩游戏
Sarvartha6 小时前
递归、回溯与动态规划学习笔记
笔记·学习·动态规划