我正在制作一个射弹,我想要摧毁敌人的物体,这些物体将是基本的浮动物体。我如何得到它,以便在被特定演员击中时两个物体都被摧毁。
void APrimaryGun::NotifyHit(UPrimitiveComponent* MyComp, AActor* Other, UPrimitiveComponent* OtherComp, bool bSelfMoved, FVector HitLocation, FVector HitNormal, FVector NormalImpulse, const FHitResult& Hit)
{
if (GEngine)
{
GEngine->AddOnScreenDebugMessage(-1, 1.5, FColor::Red, "Hit");
}
Destroy();
Other->Destroy();
}
以上是我现在所拥有的东西,但是它会摧毁任何不是我想要的东西。
我认为它应该是一个简单的if语句,但我不确定如何编写它。
提前致谢
答案 0 :(得分:0)
其他是任何AActor,所以每当你击中AActor时,你就会摧毁射弹和其他物质。我假设你想要发生的事情是,如果你的射弹击中任何东西,射弹就会被摧毁,如果它击中的物体是正确的类型,那么该物体也会被摧毁。
据推测,你想要被射弹摧毁的物体来自AActor。类似的东西:
class DestroyableEnemy : public AActor
{ //class definition
};
所以你知道你的另一个是指向AActor的指针,你知道它是什么,特别是,它是指向DestroyableEnemy(或者你已经命名的任何东西)的指针。在C ++中可以这样做的两种方法是dynamic_cast和typeid运算符。我知道如何随意做的方式是使用dynamic_cast。您将进行TRY并将通用AActor转换为DestroyableEnemy。如果它是一个DestroyableEnemy,你会得到一个指向它的指针。如果它不是,你只需要一个空指针。
DestroyableEnemy* otherEnemy = dynamic_cast<DestroyableEnemy*>(Other);
if( otherEnemy ){
//if otherEnemy isn't null, the cast succeeded because Other was a destroyableEnemy, and you go to this branch
otherEnemy->Destroy();
}else{
// otherEnemy was null because it was some other type of AActor
Other->SomethingElse(); //maybe add a bullet hole? Or nothing at all is fine
};