DontSpawnIfColliding 不检查 SpawnActor 函数生成的 actor
DontSpawnIfColliding doesn't check actor spawn by the SpawnActor function
void USpawner::Spawn(TSubclassOf<AMyActor> myactor)
{
UWorld* World = GEngine->GameViewport->GetWorld();
ACharacter* myCharacter = UGameplayStatics::GetPlayerCharacter(World, 0);
FVector loc = myCharacter->GetActorLocation();
FActorSpawnParameters ActorSpawnParameters;
ActorSpawnParameters.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::DontSpawnIfColliding;
AMyActor* NewActor = World->SpawnActor<AMyActor>(myactor, loc, FRotator::ZeroRotator, ActorSpawnParameters);
}
此代码可以很好地生成第一个 actor 并检查现有对象,因此它不会在可能与某些东西发生碰撞的地方生成。然而,我第二次生成一个对象时,我注意到在检查碰撞时没有考虑从此函数生成的对象。
我做错了什么?
当使用SpawnActor
方法时,有时默认的策略是没有用的。相反,您应该同时设置 Collision Preset 和(为了安心)Collision Channel,仔细检查 Collision Response 不会忽略来自同一 class.
的演员
void USpawner::Spawn(TSubclassOf<AMyActor> myactor)
{
UWorld* World = GEngine->GameViewport->GetWorld();
ACharacter* myCharacter = UGameplayStatics::GetPlayerCharacter(World, 0);
FVector loc = myCharacter->GetActorLocation();
FActorSpawnParameters ActorSpawnParameters;
ActorSpawnParameters.SpawnCollisionHandlingOverride = ESpawnActorCollisionHandlingMethod::DontSpawnIfColliding;
AMyActor* NewActor = World->SpawnActor<AMyActor>(myactor, loc, FRotator::ZeroRotator, ActorSpawnParameters);
}
此代码可以很好地生成第一个 actor 并检查现有对象,因此它不会在可能与某些东西发生碰撞的地方生成。然而,我第二次生成一个对象时,我注意到在检查碰撞时没有考虑从此函数生成的对象。
我做错了什么?
当使用SpawnActor
方法时,有时默认的策略是没有用的。相反,您应该同时设置 Collision Preset 和(为了安心)Collision Channel,仔细检查 Collision Response 不会忽略来自同一 class.