Crypt Raider#8

Kimbab1004·2024년 2월 14일
0

UnrealEngine

목록 보기
12/35


콜리젼의 종류는 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을 추가해 석상이 들어오는 것을 감지 할 수 있게 해주었다.

TriggerComponent.cpp

// 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"));
}

TriggerComponent.h

// 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;

};

0개의 댓글