1. 콜리전 세팅
Object Channels에 Player와 Obstacle(장애물) 채널을 기본 블록으로 세팅하고, Preset에 Player와 Obstacle 서로 겹침 설정하였습니다.
장애물과 겹침처리하고 BeginOverlap 함수를 이용해 플레이어와 닿으면 게임오버 시킬 계획입니다.
2. 트리거박스 제작
게임에 핵심이 되는 코딩입니다.
장애물 이동, 문 열기, 다음 레벨로 이동 등 전부 트리거박스로 구현해야합니다.
액터를 상속받아서 클래스를 생성하고, 그 클래스를 상속받아서 블루프린트 클래스를 생성합니다.
멤버로 박스 컴포넌트를 선언하고, 비긴오버랩과 엔드오버랩 함수를 선언합니다.
protected:
UPROPERTY(Category = TriggerBox, VisibleAnywhere, BlueprintReadOnly, meta = (AllowPrivateAccess = "true"))
UBoxComponent* TriggerBox;
public:
UFUNCTION()
void TriggerBeginOverlap(
UPrimitiveComponent* OverlappedComponent,
AActor* OtherActor,
UPrimitiveComponent* OtherComp,
int32 OtherBodyIndex,
bool bFromSweep,
const FHitResult& SweepResult);
UFUNCTION()
void TriggerEndOverlap(
UPrimitiveComponent* OverlappedComponent,
AActor* OtherActor,
UPrimitiveComponent* OtherComp,
int32 OtherBodyIndex);
생성자에서는 아래와 같이 세팅해줍니다.
ATriggerBoxNextLevel::ATriggerBoxNextLevel()
{
// 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;
TriggerBox = CreateDefaultSubobject<UBoxComponent>(TEXT("TriggerBox"));
SetRootComponent(TriggerBox);
TriggerBox->SetCollisionProfileName(TEXT("Obstacle"));
TriggerBox->SetBoxExtent(FVector(20.f, 20.f, 20.f));
TriggerBox->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics);
}
비긴플레이에서 델리게이트 함수를 등록해줍니다.
void ATriggerBoxNextLevel::BeginPlay()
{
Super::BeginPlay();
// 델리게이트에 함수 등록
TriggerBox->OnComponentBeginOverlap.AddDynamic(this, &ATriggerBoxNextLevel::TriggerBeginOverlap);
TriggerBox->OnComponentEndOverlap.AddDynamic(this, &ATriggerBoxNextLevel::TriggerEndOverlap);
}
로그를 출력해서 비긴오버랩과 엔드오버랩이 잘 되는지 확인해보겠습니다.
void ATriggerBoxNextLevel::TriggerBeginOverlap(
UPrimitiveComponent* OverlappedComponent,
AActor* OtherActor,
UPrimitiveComponent* OtherComp,
int32 OtherBodyIndex,
bool bFromSweep,
const FHitResult& SweepResult)
{
LOG(TEXT("BeginOverlap"));
}
void ATriggerBoxNextLevel::TriggerEndOverlap(
UPrimitiveComponent* OverlappedComponent,
AActor* OtherActor,
UPrimitiveComponent* OtherComp,
int32 OtherBodyIndex)
{
LOG(TEXT("EndOverlap"));
}
잘 나오는 것을 확인했습니다.
앞으로 이 기본 베이스로 여러가지 기능을 구현하게 될 것입니다.
'게임 개발 (언리얼 엔진)' 카테고리의 다른 글
UE4 게임 개발 EscapeGame - 6 : 디스트럭터블 메시(Destructible Mesh) (0) | 2020.12.01 |
---|---|
UE4 게임 개발 EscapeGame - 5 : 트리거 클래스 구성 (0) | 2020.11.26 |
UE4 게임 개발 EscapeGame - 4 : 트리거 활용 (0) | 2020.11.23 |
UE4 게임 개발 EscapeGame - 2 : 캐릭터 및 게임모드 기본 세팅 (0) | 2020.11.05 |
UE4 게임 개발 EscapeGame - 1 : 컨텐츠 구상 (0) | 2020.11.02 |