我试图使用iTween (通过C++,而不是BP)来旋转一个演员来面对另一个演员,但它在Actor.h中抛出了一个异常,上面写着:

我使用下面的代码来启动tween:
AActor* actorToRotate = Cast<AActor>(this);
if (actorToRotate != nullptr && CharacterToAttack != nullptr)
{
FRotator rotationFrom = actorToRotate->GetActorRotation();
FRotator rotationTo = CharacterToAttack->GetActorRotation();
FName tweenName = TEXT("turret");
AiTweenEvent* TurretTween = UiTween::ActorRotateFromToSimple(tweenName, actorToRotate, rotationFrom, rotationTo, CoordinateSpace::world, false, 2.0f, easeInAndOutQuartic);
}我没有使用actorToRotate变量,而是尝试在ActorRotateFromToSimple()中使用this,但是我得到了相同的错误。
if (CharacterToAttack != nullptr)
{
FRotator rotationFrom = GetActorRotation();
FRotator rotationTo = CharacterToAttack->GetActorRotation();
FName tweenName = TEXT("turret");
AiTweenEvent* TurretTween = UiTween::ActorRotateFromToSimple(tweenName, this, rotationFrom, rotationTo, CoordinateSpace::world, false, 2.0f, easeInAndOutQuartic);
}如果有比我聪明的人在这个问题上有所了解,我们将不胜感激。
我认为更多的信息可能很重要:
actorToRotate是从AActor扩展的自定义ATDWeapon类型。CharacterToAttack是从ATDCharacter扩展的自定义ATDAICharacter类型。GetWorldTimerManager().SetTimer()调用。#include "iTween/iTween.h"添加到TDWeapon.cpp文件的顶部发布于 2016-10-22 01:44:31
问题不在密码里。我在UE4编辑器中使用的是“模拟编辑器”,而不是“在编辑器中播放”。
看来AiTweenEvent* UiTween::SpawnEvent(AiTAux* aux)需要一个播放器控制器,并使用GetWorldLocal()->GetFirstPlayerController()->GetPawn()->GetTransform()来获得它的转换。在我的例子中,“在编辑器中模拟”不会产生一个播放器,因此GetPawn()返回GetTransform()不喜欢的nullptr。
太棒了。
https://stackoverflow.com/questions/40187111
复制相似问题