您当前的位置: 首页 >  ue4

开发游戏的老王

暂无认证

  • 2浏览

    0关注

    803博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

UE4杂文:关于动画蓝图中默认添加的TryGetPawnOwner方法的讨论(6月5日 更新)

开发游戏的老王 发布时间:2020-06-04 17:00:48 ,浏览量:2

后记:一觉醒来,突然觉得像下文这么做有点多此一举,所以大家还是使用TryGetPawnOwner吧。

新建一个动画蓝图,总是会默认提供一个TryGetPawnOwner方法的节点,这意味着该方法很常用。

在这里插入图片描述

它的原型如下:

//AnimInstance.h
	UFUNCTION(BlueprintCallable, Category = "Animation", meta=(NotBlueprintThreadSafe))
	virtual APawn* TryGetPawnOwner() const;
//AnimInstance.cpp
APawn* UAnimInstance::TryGetPawnOwner() const
{
	USkeletalMeshComponent* OwnerComponent = GetSkelMeshComponent();
	if (AActor* OwnerActor = OwnerComponent->GetOwner())
	{
		return Cast(OwnerActor);
	}

	return NULL;
}
  1. 先获取到动画蓝图所属的组件(OwnerComponent
  2. 然后再获取OwnerComponent的所属OwnerActor
  3. 最后还要把OwnerActor(AActor类型)向下强制类型转换成APawn

知道了原理以后,看上面这段蓝图,感觉非常别扭。 应该是为了借用APawn里的GetMovementComponent所以才用了一个“下行转换”。

我把它改成下面这样,至少在自己看来,舒服多了。

在这里插入图片描述

  1. 先获取到动画蓝图所属的组件(OwnerComponent
  2. 然后再获取OwnerComponent的所属OwnerActor
  3. 然后通过GetComponentByClass找到NavMovement Component
补充

如果觉得这种方法麻烦,可以参考《UE4基础:派生一个AnimInstance类》

关注
打赏
1656935939
查看更多评论
立即登录/注册

微信扫码登录

0.2866s