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;

}
相关推荐
小雪崩16 小时前
嵌入式学习 day61-62:IMX6ULL驱动——系统移植
学习
一隅论数智16 小时前
OWL(Web Ontology Language)介绍与使用举例(二)
大数据·经验分享·笔记·学习·自然语言处理·学习方法·政务
我命由我1234516 小时前
Photoshop - Photoshop 使用内容识别填充移除对象
学习·职场和发展·产品运营·求职招聘·职场发展·学习方法·photoshop
梓雨枔17 小时前
JavaScript+快速学习,简单好用~
javascript·学习
老王爱玩车18 小时前
自定义类型:结构体
c语言·开发语言·学习
JWASX19 小时前
Java 转 go 学习 - GRPC(1)
学习·golang
鬼手点金19 小时前
opencode-全能开发者配置
java·linux·服务器·前端·javascript·学习·前向传播
代码山河20 小时前
Java学习路线图:2026年最新版,从入门到架构师
java·学习·架构·教程·面向对象·项目
sunoo-22920 小时前
【嵌入式Linux驱动学习】Day1-Day2 全流程梳理:环境搭建→U-Boot→内核→根文件系统→驱动基础
linux·运维·驱动开发·笔记·学习·阿里云·恩智浦
我命由我1234520 小时前
Photoshop - Photoshop 使用简单的选择工具
学习·职场和发展·产品运营·求职招聘·职场发展·学习方法·photoshop