UE4 iTween C++ 抛出 "this was nullptr"
UE4 iTween C++ throws "this was nullptr"
我正在尝试使用 iTween(通过 C++,而不是 BP)将一个演员旋转到另一个演员面前,但它在 Actor.h
中抛出一个异常:
我正在使用以下代码启动补间:
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);
}
我尝试在 ActorRotateFromToSimple()
中使用 this
而不是使用 actorToRotate
变量,但我得到了同样的错误。
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
文件的顶部
啊,问题不在代码中。我在 UE4 编辑器中使用 "simulate in editor" 而不是 "play in editor".
AiTweenEvent* UiTween::SpawnEvent(AiTAux* aux)
似乎需要播放器控制器并使用 GetWorldLocal()->GetFirstPlayerController()->GetPawn()->GetTransform()
进行转换。在我的例子中,"simulate in editor" 不会生成玩家,所以 GetPawn()
returns nullptr
GetTransform()
不喜欢。
太棒了。
我正在尝试使用 iTween(通过 C++,而不是 BP)将一个演员旋转到另一个演员面前,但它在 Actor.h
中抛出一个异常:
我正在使用以下代码启动补间:
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);
}
我尝试在 ActorRotateFromToSimple()
中使用 this
而不是使用 actorToRotate
变量,但我得到了同样的错误。
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
扩展而来的 CharacterToAttack
是从ATDCharacter
扩展而来的 - 执行这段代码的函数被
GetWorldTimerManager().SetTimer()
调用
- 我已将
#include "iTween/iTween.h"
添加到我的TDWeapon.cpp
文件的顶部
ATDWeapon
的自定义类型
ATDAICharacter
的自定义类型
啊,问题不在代码中。我在 UE4 编辑器中使用 "simulate in editor" 而不是 "play in editor".
AiTweenEvent* UiTween::SpawnEvent(AiTAux* aux)
似乎需要播放器控制器并使用 GetWorldLocal()->GetFirstPlayerController()->GetPawn()->GetTransform()
进行转换。在我的例子中,"simulate in editor" 不会生成玩家,所以 GetPawn()
returns nullptr
GetTransform()
不喜欢。
太棒了。