목차
- C++ 파괴 가능한 액터 만들기
- 블루프린트 파괴 가능한 액터 만들기
1. C++ 파괴가능한 액터 만들기
현재 우리는 파괴가능한 매시, 지오메트리콜렉션을 만들었고 이를 기반으로 액터를 생성하려고 한다.
액터로 만드는 이유는 이 매시에 여러가지 기능을 주기위해서인데 대표적으로 전에 말했던 파괴시 카메라 충돌 방지등을 구현할 것이다.
해당 콜렉션을 AI든 플레이어든 소유할 일이 없으니 그냥 Actor 기반 C++ 클래스로 만들면 된다.
클래스를 생성하고 가장 먼저 필요한 것은 구성요소 일 것이다.
private:
UPROPERTY(VisibleAnywhere)
class UGeometryCollectionComponent* GeometryCollection;
이제 생성자에서 실제로 할당해주자.
#include "GeometryCollection/GeometryCollectionComponent.h"
ABreakableActor::ABreakableActor()
{
PrimaryActorTick.bCanEverTick = false;
GeometryCollection = CreateDefaultSubobject<UGeometryCollectionComponent>(TEXT("GeometryCollection"));
SetRootComponent(GeometryCollection);
GeometryCollection->SetGenerateOverlapEvents(true);
}
지오메트리콜렉션을 생성하고 이것을 루트컴포넌트로 설정한 뒤 오버랩 이벤트를 발생시키도록 해주었다.
이제 이대로 컴파일 하면 컴파일에 실패한다. 실패원인을 찾으려고 몇십분 뻘짓을 했는데 원인은 아주 간단한데 있었다. (챗GPT가 5초만에 알려줬다...)
언리얼 문서에 들어가면 모듈이 필요한 것을 볼 수 있다.
빌드cs 파일로 들어가서 모듈을 추가해주자.
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "EnhancedInput", "GeometryCollectionEngine" });
이제 컴파일이 무사히 성공하는 것을 볼 수 있다.
이제 C++ 클래스를 만들었으니 이를 기반으로 블루프린트 클래스도 만들자.
2. 블루프린트 파괴 가능한 액터 만들기
블루프린트 클래스를 만들면 디테일 패널에서 RestCollection을 볼 수 있다.
이곳에서 우리가 만든 지오메트리 콜렉션을 설정할 수 있다.
이제 카메라 충돌을 방지할 것이다.
생성자에 아래 구문을 추가하자.
GeometryCollection->SetCollisionResponseToChannel(ECollisionChannel::ECC_Camera, ECollisionResponse::ECR_Ignore);
현재는 단순하게 액터에 카메라를 충동하지 않게 설정하였다. 처음부터 충돌을 안하는 것이 아닌 부서진 후 충돌 방지도 물론 구현할 수 있다.
부시전 후 반응을 어떻게 적용해주어야 할까?
현재 우리의 클래스에는 인터페이스가 존재하고 그곳에서 히트반응 GetHit() 함수가 존재한다.
인터페이스를 상속받아보자.
// ...
#include "Interface/HitInterface.h"
#include "BreakableActor.generated.h"
class PRACTICE_API ABreakableActor : public AActor, public IHitInterface
{
// ...
}
이제 GetHit 함수를 오버라이드 하자.
public:
ABreakableActor();
virtual void Tick(float DeltaTime) override;
virtual void GetHit(const FVector& ImpactPoint) override;
함수의 구현은 이어서 하도록 하겠다.
'게임프로그래밍 > 실습1' 카테고리의 다른 글
[언리얼 실습] 39. 액터가 부셔질 때 효과음을 내고 사라지게 하기 (0) | 2024.10.31 |
---|---|
[언리얼 실습] 38. C++와 블루프린트에서 설정가능한 함수 만들기 (0) | 2024.10.31 |
[언리얼 실습] 36. 무기로 필드 시스템 생성하기 (0) | 2024.10.31 |
[언리얼 실습] 35. 필드 시스템 액터 (0) | 2024.10.30 |
[언리얼 실습] 34. 부실 수 있는 오브젝트 만들기 (0) | 2024.10.30 |