Hi!
I changed SetWorldLocation to AddActorWorldOffset. But it was not worked.
OnHit not called.
//-------------------------------------------------------------------------------------------------------------------------------
MyActor::MyActor(const FObjectInitializer& ObjectInitializer)
: Super(ObjectInitializer)
{
CollisionComponent = ObjectInitializer.CreateDefaultSubobject(this, TEXT(“CollisionComponent”));
CollisionComponent->InitSphereRadius(30.0f);
CollisionComponent->SetNotifyRigidBodyCollision(true);
CollisionComponent->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
CollisionComponent->SetCollisionObjectType(ECollisionChannel::ECC_PhysicsBody);
CollisionComponent->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Block);
CollisionComponent->bGenerateOverlapEvents = true;
RootComponent = CollisionComponent;
PrimaryActorTick.bCanEverTick = true;
}
void MyActor::init()
{
…
OnActorHit.AddDynamic(this, &MyActor::OnHit);
ActorPosition = FVector(0.0f, 0.0f, 0.0f);
…
}
void MyActor::OnHit()
{
MessageBox(NULL, TEXT(“Hit OK!”), TEXT(“COMMENT”), MB_OK);
}
void MyActor::Tick(float DeltaTime)
{
…
/----------------------------------------------------------------------------------------------------------/
RootComponent->SetWorldLocation(ActorPosition);
→ RootComponent->AddActorWorldOffset(ActorPosition - GetActorLocation());
RootComponent->SetWorldLocation(ActorPosition + FVector(0.0f, 0.0f, 10000.0f);
→ RootComponent->AddActorWorldOffset(ActorPosition + FVector(0.0f, 0.0f, 10000.0f) - GetActorLocation());
RootComponent->SetWorldLocation(ActorPosition + FVector(0.0f, 0.0f, -10000.0f);
→ RootComponent->AddActorWorldOffset(ActorPosition + FVector(0.0f, 0.0f, -10000.0f) - GetActorLocation());
/----------------------------------------------------------------------------------------------------------/
}
Engine Version : 4.6.1
OS : Windows 7