[Unreal] 2차 프로젝트 - 장판 패턴 구현 (1)

Cassis_Soda·2025년 2월 18일

2차 프로젝트

목록 보기
6/10

※ 해당 기록은 Unreal 5.5.3 버전을 기준으로 작성되었습니다.


0. 서론

     보스의 마지막 패턴인 장판 패턴을 구현했다. 뭔가 기록할게 많아서 두 개로 나눈건 아니지만, 적당히 만드는데 이틀 정도 걸렸으므로 각 날에 구현한 부분을 나눠서 쓴다.

1. 나이아가라 시스템

     나이아가라 시스템을 스폰시키기 위해서 두 가지 방법이 있다. 하나는 Boss가 패턴을 실행할 때 Boss가 직접 시스템을 스폰하는 방법과, 나머지는 나이아가라 시스템을 갖고 있는 빈 액터를 패턴을 실행할 때 액터를 스폰시키는 방법이다. 이 중에 나는 후자를 사용하였다.

2. 구현

     인터넷을 참고하여 만드는 것은 크게 어렵지 않았는데, 이 점은 찾는데 좀 걸렸다.

//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.csAddRange()함수 안에다가 "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. 앞으로 할 일

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

0개의 댓글