ue4 c ++ destory on hit if if specificc actor

时间:2016-03-26 18:04:47

标签: c++ unreal-engine4

我正在制作一个射弹,我想要摧毁敌人的物体,这些物体将是基本的浮动物体。我如何得到它,以便在被特定演员击中时两个物体都被摧毁。

 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语句,但我不确定如何编写它。
提前致谢

1 个答案:

答案 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
};

改编自:https://en.wikibooks.org/wiki/C%2B%2B_Programming/RTTI