void FMovieSceneSkeletalAnimationTrackInstance::RefreshInstance( const TArray<TWeakObjectPtr<UObject>>& RuntimeObjects, IMovieScenePlayer& Player, FMovieSceneSequenceInstance& SequenceInstance ) { UpdateRefreshBones(RuntimeObjects); // When not in preview playback we need to stop any running animations to prevent the animations from being advanced a frame when // they are ticked by the engine. for ( TWeakObjectPtr<UObject> RuntimeObjectPtr : RuntimeObjects ) { if ( ShouldUsePreviewPlayback( Player, RuntimeObjectPtr.Get() ) == false ) { USkeletalMeshComponent* SkeletalMeshComponent = GetSkeletalMeshComponentFromRuntimeObjectPtr( RuntimeObjectPtr ); if ( SkeletalMeshComponent != nullptr ) { UAnimInstance* AnimInstance = SkeletalMeshComponent->GetAnimInstance(); if ( AnimInstance ) { UAnimSingleNodeInstance * SingleNodeInstance = SkeletalMeshComponent->GetSingleNodeInstance(); if ( SingleNodeInstance ) { SingleNodeInstance->SetPlaying( false ); } // TODO: Anim montage? } } } } }
void FGameplayAbilityActorInfo::InitFromActor(AActor *InOwnerActor, AActor *InAvatarActor, UAbilitySystemComponent* InAbilitySystemComponent) { check(InOwnerActor); check(InAbilitySystemComponent); OwnerActor = InOwnerActor; AvatarActor = InAvatarActor; AbilitySystemComponent = InAbilitySystemComponent; // Look for a player controller or pawn in the owner chain. AActor *TestActor = InOwnerActor; while (TestActor) { if (APlayerController * CastPC = Cast<APlayerController>(TestActor)) { PlayerController = CastPC; break; } if (APawn * Pawn = Cast<APawn>(TestActor)) { PlayerController = Cast<APlayerController>(Pawn->GetController()); break; } TestActor = TestActor->GetOwner(); } if (AvatarActor.Get()) { // Grab Components that we care about USkeletalMeshComponent * SkelMeshComponent = AvatarActor->FindComponentByClass<USkeletalMeshComponent>(); if (SkelMeshComponent) { this->AnimInstance = SkelMeshComponent->GetAnimInstance(); } MovementComponent = AvatarActor->FindComponentByClass<UMovementComponent>(); } else { MovementComponent = NULL; AnimInstance = NULL; } }
PyObject *py_ue_get_anim_instance(ue_PyUObject *self, PyObject * args) { ue_py_check(self); if (!self->ue_object->IsA<USkeletalMeshComponent>()) return PyErr_Format(PyExc_Exception, "uobject is not a USkeletalMeshComponent"); USkeletalMeshComponent *skeletal = (USkeletalMeshComponent *)self->ue_object; UAnimInstance *anim = skeletal->GetAnimInstance(); if (!anim) { Py_INCREF(Py_None); return Py_None; } Py_RETURN_UOBJECT((UObject *)anim); }