h 파일
//#include "CoreMinimal.h" // 최소 기능만 선언
#include "EngineMinimal.h"
#include "GameFramework/Actor.h"
#include "BlockCollisionActor.generated.h"
UCLASS()
class UNREAL_COLLISIONTEST_API ABlockCollisionActor : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
ABlockCollisionActor();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
virtual void NotifyHit(UPrimitiveComponent *MyComp, AActor *Other, UPrimitiveComponent *OtherComp, bool bSelfMoved, FVector HitLocation, FVector HitNormal, FVector NormalImpulse, const FHitResult &Hit) override;
virtual void NotifyActorBeginOverlap(AActor *OtherActor) override;
virtual void NotifyActorEndOverlap(AActor *OtherActor) override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
UPROPERTY(EditAnywhere)
UStaticMeshComponent *BoxMesh;
};
충돌 이벤트
virtual void NotifyHit(UPrimitiveComponent *MyComp, AActor *Other, UPrimitiveComponent *OtherComp, bool bSelfMoved, FVector HitLocation, FVector HitNormal, FVector NormalImpulse, const FHitResult &Hit) override;
오버랩 시작 이벤트
virtual void NotifyActorBeginOverlap(AActor *OtherActor) override;
오버랩 종료 이벤트
virtual void NotifyActorEndOverlap(AActor *OtherActor) override;
cpp 파일
#include "BlockCollisionActor.h"
// Sets default values
ABlockCollisionActor::ABlockCollisionActor()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
BoxMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("BoxMesh"));
RootComponent = BoxMesh;
}
// Called when the game starts or when spawned
void ABlockCollisionActor::BeginPlay()
{
Super::BeginPlay();
}
// Called every frame
void ABlockCollisionActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
AActor *tempActor;
void ABlockCollisionActor::NotifyHit(UPrimitiveComponent *MyComp, AActor *Other, UPrimitiveComponent *OtherComp, bool bSelfMoved, FVector HitLocation, FVector HitNormal, FVector NormalImpulse, const FHitResult &Hit)
{
if (tempActor != Other)
{
UE_LOG(LogTemp, Warning, TEXT("NotifyHit %s"), *HitNormal.ToString());
tempActor = Other;
}
}
void ABlockCollisionActor::NotifyActorBeginOverlap(AActor *OtherActor)
{
UE_LOG(LogTemp, Warning, TEXT("BeginOverlap %s"), *OtherActor->GetFullName());
}
void ABlockCollisionActor::NotifyActorEndOverlap(AActor *OtherActor)
{
UE_LOG(LogTemp, Warning, TEXT("EndOverlap %s"), *OtherActor->GetFullName());
}
Simulate Physics 체크를 하면 피직스 테스트를 하게 되어 중력이 적용 됩니다.
Simulation Generates Hit Events 체크를 하면 충돌 이벤트 검사를 합니다.
Generate Overlap Events 체크를 하면 오버랩 이벤트 검사를 합니다.
'Unreal' 카테고리의 다른 글
[Unreal] Spring Controller (0) | 2020.12.01 |
---|---|
[Unreal] LOD (레벨 오브 디테일) (0) | 2020.12.01 |
[Unreal] 마우스 좌표를 이용해 LineTrace로 WorldSpace 좌표 가져오기 (0) | 2020.11.23 |
[Unreal] 해당 Actor 키보드 인풋 가능하게 하기 (0) | 2020.11.23 |
[Unreal] C++ 클래스 생성 및 기초 프로퍼티 설명 (0) | 2020.11.06 |