我目前正在使用虚幻引擎 4,似乎无法避免一些演员表。
AController* c = this->GetController();
APlayerController* p = (APlayerController*)c;
有没有办法在我做演员之前检查是否c
是 a ?PlayerController
我目前正在使用虚幻引擎 4,似乎无法避免一些演员表。
AController* c = this->GetController();
APlayerController* p = (APlayerController*)c;
有没有办法在我做演员之前检查是否c
是 a ?PlayerController
和很多游戏引擎一样,出于性能原因,虚幻引擎编译时没有使用 RTTI,因此dynamic_cast
无法正常工作。
虚幻引擎提供了自己的替代方案,简称为Cast
. 我现在找不到任何文档,但是这个问题很好地描述了它的使用。
AController* c = this->GetController();
APlayerController* p = Cast<APlayerController>(c);
if (p) {
...
}
AController
还有一个方便的方法CastToPlayerController
可以做同样的事情:
AController* c = this->GetController();
APlayerController* p = c->CastToPlayerController();
if (p) {
...
}
如果你确定这c
总是一个APlayerController
thenCastChecked
更有效:
AController* c = this->GetController();
APlayerController* p = CastChecked<APlayerController>(c);
...
在调试版本中,这将使用Cast
并抛出一个断言,如果它返回 null;在发布版本中,它解析为快速static_cast
.
尽管我觉得你不需要对你的播放器控制器进行检查,使用IsA
函数,你不需要做额外的演员。
AController* c = GetController();
if (c->IsA(APlayerController::StaticClass()))
{
//bla bla
}
作为个人建议检查您的代码设计