콜리젼의 종류는 3가지로 Ignore, Overlap, Block가 있다.
"Ignore" 설정은 충돌을 무시하도록 지정합니다. 두 액터 간에 충돌이 발생할 때, 해당 설정이 적용된 액터는 서로 영향을 주거나 받지 않습니다.
Block (차단):
"Block" 설정은 충돌을 차단하도록 지정합니다. 두 액터 간에 충돌이 발생하면, 해당 설정이 적용된 액터는 서로에게 영향을 주거나 받습니다. 두 액터 중 하나라도 "Block" 설정이 되어 있으면 충돌이 발생하게 됩니다.
"Overlap" 설정은 충돌이 서로에게 영향을 미치지 않고, 겹치기만 할 수 있도록 지정합니다. 겹치는 상태에서는 서로의 영역이 겹치는 것이 감지되지만, 물리적인 힘이나 영향을 주거나 받지 않습니다.
.
.
.
Ignore이 한개라도 있으면 결과적으로 Ignore하게 되고, 둘 모두 Block이지 않는 이상 Overlap으로 정해지며, 둘 모두 Block일때만 Block이 되는 것을 알 수 있다.
혹시 나중에 Overlap을 이용해서 Overlap start 이벤트를 사용했는데, 제대로된 결과가 안나온다면, 하나의 Collision이 Ignore로 되어 있지 않은지 의심해보자
Grabber의 콜리션은 다음과 같이 설정돼있다. Pawn(BP_Player)만을 Overlap설정 해놓은걸 알 수 있다.
만약 Pawn 설정을 Block해놓을 경우 아래와 같이 이상하게 움직일 가능성도 있다. 다음은 석상을 Pawn(BP_Player)아래에 놓게 하니 하늘로 올라가는 모습이다.
석상을 올려놓았을때 Mover 컴포넌트가 작동 할 수 있게 문에 BP를 추가해주었다.
그리고 BoxCollision을 추가해 석상이 들어오는 것을 감지 할 수 있게 해주었다.
// Fill out your copyright notice in the Description page of Project Settings.
#include "TriggerComponent.h"
//생성자
//라이브 코딩에서 생성자를 추가하더라도 적용되지 않는 경우가 있으니 에디터를 닫고 Run Build Task를 꼭 진행하라
UTriggerComponent::UTriggerComponent(){
PrimaryComponentTick.bCanEverTick = true;
UE_LOG(LogTemp, Display,TEXT("Trigger constructing"));
}
void UTriggerComponent::BeginPlay()
{
Super::BeginPlay();
UE_LOG(LogTemp, Display,TEXT("Trigger Component Alive"));
}
void UTriggerComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
{
Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
UE_LOG(LogTemp,Display,TEXT("Trigger Component IS Ticking"));
}
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Components/BoxComponent.h"
#include "TriggerComponent.generated.h"
/**
*
*/
//블루프린트에서 컴포넌트를 생성할 수 있게 도와줌
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class CRYPTRAIDER_API UTriggerComponent : public UBoxComponent
{
GENERATED_BODY()
public:
UTriggerComponent();
protected:
// Called when the game starts
virtual void BeginPlay() override;
public:
// Called every frame
virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
};