※ 해당 기록은 Unreal 5.5.3 버전을 기준으로 작성되었습니다.
보스의 마지막 패턴인 장판 패턴을 구현했다. 뭔가 기록할게 많아서 두 개로 나눈건 아니지만, 적당히 만드는데 이틀 정도 걸렸으므로 각 날에 구현한 부분을 나눠서 쓴다.
나이아가라 시스템을 스폰시키기 위해서 두 가지 방법이 있다. 하나는 Boss가 패턴을 실행할 때 Boss가 직접 시스템을 스폰하는 방법과, 나머지는 나이아가라 시스템을 갖고 있는 빈 액터를 패턴을 실행할 때 액터를 스폰시키는 방법이다. 이 중에 나는 후자를 사용하였다.
인터넷을 참고하여 만드는 것은 크게 어렵지 않았는데, 이 점은 찾는데 좀 걸렸다.
//Project_Pluto.Build.cs 에서
public class Project_Pluto : ModuleRules
{
public Project_Pluto(ReadOnlyTargetRules Target) : base(Target)
{
...
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore",
"EnhancedInput", "UMG", "Niagara" });
...
}
}
C++에서 나이아가라 시스템을 스폰하려면 이렇게 프로젝트의 build.cs의 AddRange()함수 안에다가 "Niagara"를 선언해주어야 한다.
//APlateActor.cpp에서
APlateActor::APlateActor(){
...
SceneComp = CreateDefaultSubobject<USceneComponent>(TEXT("SceneComp"));
SetRootComponent(SceneComp);
ConstructorHelpers::FObjectFinder<UNiagaraSystem> NS(TEXT("/Script/Niagara.NiagaraSystem'/Game/MagicCircleVFX/VFX/NS_TP-Circle_22.NS_TP-Circle_22'"));
if (NS.Succeeded())
{
SpawnFXSystem = NS.Object;
}
...
}
void APlateActor::BeginPlay()
{
Super::BeginPlay();
SpawnFXComponent = UNiagaraFunctionLibrary::SpawnSystemAtLocation(GetWorld(), SpawnFXSystem, GetActorLocation(), FRotator::ZeroRotator, FVector(5.f, 5.f, 1.f), true, true);
SpawnFXComponent->Activate();
...
}
생성자에서SceneComponent를 붙여서 씬에서도 테스트를 할 수 있게 만들었다. Boss가 PlateActor를 스폰할 때 그 위치를 지정하기 때문에, GetActorLocation()으로 그 위치에 나이아가라 시스템을 스폰할 수 있다. 함수의 인자로, Location, Rotation, Scale을 지정할 수 있고, 그 다음의 두 bool변수는 각각 bool bAutoDestroy, bool bAutoActivate이다.
처음 만들었을 때, 스폰도 잘 되고, 생성자도 잘 만들어지는데 이펙트가 보이지 않는 이슈가 있었다. 갈아 엎고 Boss가 직접 스폰시켜야 하나 했지만, 알고보니 Scale 설정할 때 바보처럼 FVector(5.f,5.f,0.f) 이렇게 주고 있었다.
// Boss::SpawnPlate()에서
GetWorld()->SpawnActor <APlateActor>(PlateFactory,FVector(playerLocation.X, playerLocation.Y, 0.f), FRotator::ZeroRotator);
기본적인 스폰은 위와 같다. 장판을 기본적으로 4개씩 5번을 찍어내는데, 4개 중의 한 개는 플레이어가 현재 서 있는 곳에 찍고자 했다. 구현 결과는 다음과 같다. 전부를 완성하고 찍은 사진이라 더 나왔지만, 이러한 느낌임을 봐달라.

장판을 한 개만 생성하는게 아니라, 근처에 랜덤한 위치로 3개를 더 찍어줘야한다. 장판 패턴을 하나 더 구현한다. 현재는 장판이 사라지는 부분은 구현되어있지 않으므로, 일정 시간 후에 장판이 사라지도록 해야한다. 이제 이것으로 모든 패턴의 구현이 끝났으므로, 플레이어와 데미지를 주고 받는 기능을 구현해야 한다.