Ue4C++编程------AnimationInstance与c++(三)

    前面一文中,我们的动作蓝图已经有了人物的基础行动,即走动,及跳跃,接下来,我们将使我们的人物可以进行攻击。首先进行准备工作,绑定攻击键,如下图所示:

    

    在我们的character类中,添加如下函数:用于对攻击键即上图设置的鼠标左键进行绑定。

	// 攻击函数
	void Attack();

    并在SetupPlayerInputComponent函数中绑定,如下:

	// 绑定攻击
	PlayerInputComponent->BindAction("Attack", IE_Pressed, this, &ABlogProjectCharacter::Attack);

    接下来回到我们的ue4编辑器里,为我们的攻击动作建立蒙太奇,如下图所示:

    

    在打开的动画编辑器里,创建一个slot,并命名为upperbody,这个slot将在接下来中使用,要播放蒙太奇动画,则必须要有该slot,如下图所示:

    

    创建成功后,在上图的defaultslot中,选择为我们创建的upperbody。接下来为这个蒙太奇添加一个曲线,选择下面的addcurve,新创建一个cureve,并命名为AttackFullBody,并添加相关key,得到如下的曲线:

    

    接下来则在动画蓝图里进行对蒙太奇的相关操作,首先将之前创建的状态机,缓存为一个pose,如下图:

扫描二维码关注公众号,回复: 1680796 查看本文章

    

    接着右击选择uselocomotionpose,单击选择slot节点,因为我们要使用之前创建的蒙太奇动画,所以要使用slot节点,并选择为我们之前创建的upperbody,接着cache为一个新的upperbody pose,如下图所示:

    

    要使我们的人物能边跑动边进行射击,则需要使用blendposebyperbone节点,使我们使出动作的上半身和我们奔跑的下半身就行动作的混合,达到看起来像边跑边攻击的效果。我们选择的混合骨骼节点是上半身,即spine_01,混合权重是1,表示上半身和下半身混合。如下图:

    

    现在已经达到了混合的目的,但是又产生了新的问题,即我在静止的状态下是不希望混合的,不然攻击效果会显得不自然,并且我是不希望我的攻击动作在跃起的时候,与下半身进行混合,因为这样看起来会很奇怪,因此,要使用一个叫blendposebybool的节点,用来决定在什么时刻使用什么样的pose,如下图所示:

    

    最终将我们的pose为最终的节点,连接到result,如下图所示:

    

    至此,我们的可攻击的人物动作蓝图就完成了,接着实现我们的attack函数,让我们的人物可以攻击。首先需要在character中添加类成员,即攻击动画的montage:

	UPROPERTY(EditAnywhere, Category = Montage)
	class UAnimMontage* AttackMontage;

然后在Attack函数中做如下实现:

void ABlogProjectCharacter::Attack()
{
	UHeroAnimInstance* AnimInstance = Cast<UHeroAnimInstance>(GetMesh()->GetAnimInstance());
	if (AnimInstance != nullptr)
	{
		if (!AnimInstance->Montage_IsPlaying(AttackMontage)) // 如果该蒙太奇动画未在播放,则进行播放
		{
			AnimInstance->Montage_Play(AttackMontage);
		}
	}
}
    编译代码,然后打开我们的character,选择我们的之前创建的攻击动画,并测试成功。

    

    


猜你喜欢

转载自blog.csdn.net/li2818/article/details/80697647