Announcement

Collapse
No announcement yet.

MoveIgnoreActors doesn't work / have any effect?

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    MoveIgnoreActors doesn't work / have any effect?

    For some reason, I can't seem to stop my Ordnance Object colliding with the object it's fired from (causing me to be pushed back/around on firing). The object firing it is a physics enabled object, and the 'Instigator' property is being set correctly. Am I missing something here?

    I want it to collide with everything other than it's owner... I'm following ShooterGames' example for Projectiles, but not having any luck :/ The weapon sets the ordnances Instigator before it's spawned in the world.

    Ordnance CPP
    Code:
    AShooterProjectile::AShooterProjectile(const FObjectInitializer& ObjectInitializer) : Super(ObjectInitializer)
    {
    	CollisionComp = ObjectInitializer.CreateDefaultSubobject<USphereComponent>(this, TEXT("SphereComp"));
    	CollisionComp->InitSphereRadius(5.0f);
    	CollisionComp->AlwaysLoadOnClient = true;
    	CollisionComp->AlwaysLoadOnServer = true;
    	CollisionComp->bTraceComplexOnMove = true;
    	CollisionComp->SetCollisionEnabled(ECollisionEnabled::QueryOnly);
    	CollisionComp->SetCollisionObjectType(COLLISION_PROJECTILE);
    	CollisionComp->SetCollisionResponseToAllChannels(ECR_Ignore);
    	CollisionComp->SetCollisionResponseToChannel(ECC_WorldStatic, ECR_Block);
    	CollisionComp->SetCollisionResponseToChannel(ECC_WorldDynamic, ECR_Block);
    	CollisionComp->SetCollisionResponseToChannel(ECC_Pawn, ECR_Block);
    	RootComponent = CollisionComp;
    
    	ParticleComp = ObjectInitializer.CreateDefaultSubobject<UParticleSystemComponent>(this, TEXT("ParticleComp"));
    	ParticleComp->bAutoActivate = false;
    	ParticleComp->bAutoDestroy = false;
    	ParticleComp->AttachParent = RootComponent;
    
    	MovementComp = ObjectInitializer.CreateDefaultSubobject<UProjectileMovementComponent>(this, TEXT("ProjectileComp"));
    	MovementComp->UpdatedComponent = CollisionComp;
    	MovementComp->InitialSpeed = 2000.0f;
    	MovementComp->MaxSpeed = 2000.0f;
    	MovementComp->bRotationFollowsVelocity = true;
    	MovementComp->ProjectileGravityScale = 0.f;
    
    	PrimaryActorTick.bCanEverTick = true;
    	PrimaryActorTick.TickGroup = TG_PrePhysics;
    	SetRemoteRoleForBackwardsCompat(ROLE_SimulatedProxy);
    	bReplicates = true;
    	bReplicateInstigator = true;
    	bReplicateMovement = true;
    }
    
    void AShooterProjectile::PostInitializeComponents()
    {
    	Super::PostInitializeComponents();
    	MovementComp->OnProjectileStop.AddDynamic(this, &AShooterProjectile::OnImpact);
    	CollisionComp->MoveIgnoreActors.Add(Instigator);
    
    	AShooterWeapon_Projectile* OwnerWeapon = Cast<AShooterWeapon_Projectile>(GetOwner());
    	if (OwnerWeapon)
    	{
    		OwnerWeapon->ApplyWeaponConfig(WeaponConfig);
    	}
    
    	SetLifeSpan( WeaponConfig.ProjectileLife );
    	MyController = GetInstigatorController();
    }

    Edit: Ended up modifying the code to use 'Overlap' on the collision sphere, and just did a check when it overlaps to see if it's the Instigator, same way that Unreal Tournament 4 does it. Perhaps MoveIgnore only works for Overlaps...
    Last edited by TheJamsh; 01-17-2015, 07:02 AM.
Working...
X