unreal-c++教程-第七章:控制你角色的动画

演示效果

link

1.控制动画

1.1 获取动画实例

在这里插入图片描述

1.2 在c++中设置动画蓝图的值

	auto animIns = this->GetMesh()->GetAnimInstance();
	UProperty* Property = animIns->GetClass()->FindPropertyByName("XAxis");
	if (Property)
	{
		float* ptrValue = Property->ContainerPtrToValuePtr<float>(animIns);
		if (ptrValue)
		{
			*ptrValue = val*30;
		}
	}

我们的动画蓝图
在这里插入图片描述

1.3 获取角色前进速度,前进方向,右向

	auto velocity = GetVelocity();
	auto fd = GetActorForwardVector();
	auto fr = GetActorRightVector();

1.4 调用c++中的基础函数库(dot)

计算速度在正向和右向上的投影
	auto fp = UKismetMathLibrary::Dot_VectorVector(velocity, fv);
	auto rp = UKismetMathLibrary::Dot_VectorVector(velocity, rv);

1.5 完整的移动控制代码

void ABaseRole::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

	auto velocity = GetVelocity();
	auto fv = GetActorForwardVector();
	auto rv = GetActorRightVector();
	//正向投影
	auto fp = UKismetMathLibrary::Dot_VectorVector(velocity, fv);
	auto rp = UKismetMathLibrary::Dot_VectorVector(velocity, rv);

	auto animIns = this->GetMesh()->GetAnimInstance();
	UE_LOG(LogTemp, Warning, TEXT("%f,%f"), fp, rp);
	UProperty* Property = animIns->GetClass()->FindPropertyByName("YAxis");
	if (Property)
	{
		float* ptrValue = Property->ContainerPtrToValuePtr<float>(animIns);
		if (ptrValue)
		{
			*ptrValue = fp;
		}
	}

	Property = animIns->GetClass()->FindPropertyByName("XAxis");
	if (Property)
	{
		float* ptrValue = Property->ContainerPtrToValuePtr<float>(animIns);
		if (ptrValue)
		{
			*ptrValue = rp;
		}
	}
}

2. 警告

如果你在这一章中出现bug不妨检测下:

BlendSpace文件中轴限值

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值