info8995 님의 블로그

발사체 구현하기 본문

TIL(Today I Learned)/Unreal Engine

발사체 구현하기

info8995 2025. 2. 17. 21:32

3.1 - 게임에 발사체 추가하기

3.2 - 슈팅 구현하기

3.3 - 발사체 콜리전 및 수명 구성하기

3.4 - 발사체가 월드와 상호작용하도록 만들기

3.5 - 뷰포트에 조준선 추가하기

 

발사 액션 매핑 추가하기

발사체 클래스 추가하기

1.C++ 클래스가 생성될 경우 Visual Studio 가 FPSProjectile.h 헤더 파일 및 FPSProjectile.cpp 구현 파일이 열린 상태로 자동으로 나타납니다.

 

2.FPSProjectile.h 클래스 헤더 파일로 이동합니다.

 

3.다음과 같이 SphereComponent 헤더 파일을 추가합니다.

FPSProjectile.h

4.FPSProjectile 인터페이스의 USphereComponent 에 레퍼런스를 추가할 경우, FPSProjectile.h 의 public 액세스 지정자 아래에 다음 코드를 추가합니다.

FPSProjectile.h

5.FPSProjectile.cpp 의 AFPSProjectile 생성자( PrimaryActorTick.bcanEverTick 이후)에 다음을 추가합니다.

FPSProjectile.cpp

발사체 이동 컴포넌트 추가하기

1.FPSProjectile.h 클래스 헤더 파일로 이동합니다.

 

2.ProjectileMovementComponent 헤더 파일을 추가합니다.

FPSProjectile.h

#include "GameFramework/ProjectileMovementComponent.h"

 

3.다음 코드를 FPSProjectile.h 의 public 액세스 지정자 아래에 추가합니다.

FPSProjectile.h

// 발사체 이동 컴포넌트입니다.

UPROPERTY(VisibleAnywhere, Category = Movement)

UProjectileMovementComponent* ProjectileMovementComponent;\

 

4.다음 코드 줄을 FPSProjectile.cpp 의 AFPSProjectile 생성자에 추가합니다.

FPSProjectile.cpp

 

발사체의 초기 속도 설정하기

FPSProjectile.h 클래스 헤더 파일로 이동합니다.

 

다음 함수 선언을 FPSProjectile.h 의 public 액세스 지정자 아래에 추가합니다.

 

FPSProjectile.h

// 발사 방향으로의 발사체 속도를 초기화하는 함수입니다.

void FireInDirection(const FVector& ShootDirection);

 

다음 함수 정의를 FPSProjectile.cpp 에 추가합니다.

FPSProjectile.cpp

// 발사 방향으로의 발사체 속도를 초기화하는 함수입니다.

void AFPSProjectile::FireInDirection(const FVector& ShootDirection)

{

ProjectileMovementComponent->Velocity = ShootDirection * ProjectileMovementComponent->InitialSpeed;

}

발사 입력 액션 바인딩하기

Visual Studio 의 Solution Explorer 로 이동하여 FPSCharacter.h 클래스 헤더 파일을 엽니다.

 

다음 함수 선언을 FPSCharacter.h 의 public 액세스 지정자 아래에 추가합니다.

FPSCharacter.h

// 발사체 발사를 처리하는 함수입니다.

UFUNCTION()

void Fire();

 

Fire 함수를 바인딩하려면 FPSCharacter.cpp: 의 SetupPlayerInputComponent 함수에 다음 코드를 추가합니다.

FPSCharacter.cpp

PlayerInputComponent->BindAction("Fire", IE_Pressed, this, &AFPSCharacter::Fire);

PlayerInputComponent->BindAction("Fire", IE_Pressed, this, &AFPSCharacter::Fire);

 

다음 함수 정의를 FPSCharacter.cpp 에 추가합니다.

FPSCharacter.cpp

void AFPSCharacter::Fire()

{

}

 

발사체 스폰 위치 정의하기

FPSProjectile 액터를 스폰하는 경우, OnFire 함수를 구현할 때 고려할 점이 2개 있습니다.

 

발사체 스폰 위치

발사체 클래스(이를 통해 FPSCharacter 및 그 파생 블루프린트가 어떤 발사체를 스폰할지 알 수 있음)

카메라 스페이스 오프셋 벡터를 사용하여 발사체의 스폰 위치를 결정합니다. 이 파라미터를 편집 가능하게 만들어 BP_FPSCharacter 블루프린트에서 설정하고 미세조정할 수 있도록 합니다. 결과적으로 이 데이터를 기반으로 발사체의 초기 위치를 계산할 수 있습니다.

 

FPSCharacter.h 클래스 헤더 파일로 이동합니다.

 

다음 코드를 FPSCharacter.h 의 public 액세스 지정자 아래에 추가합니다.

 

FPSCharacter.h

 

// 카메라 위치로부터의 총구 오프셋입니다.

UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Gameplay)

FVector MuzzleOffset;

// 카메라 위치로부터의 총구 오프셋입니다. UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Gameplay) FVector MuzzleOffset;

EditAnywhere 를 사용하면 블루프린트 에디터의 디폴트 모드 내에서나 캐릭터의 아무 인스턴스의 디테일 탭 내에서 총구 오프셋 값을 변경할 수 있습니다. BlueprintReadWrite 지정자를 사용하면 블루프린트 내에서 총구 오프셋의 값을 구하고 설정할 수 있습니다.

 

다음 코드를 FPSCharacter.h 의 protected 액세스 지정자 아래에 추가합니다.

 

FPSCharacter.h

 

protected:

 

// 스폰할 발사체 클래스입니다.

UPROPERTY(EditDefaultsOnly, Category = Projectile)

TSubclassOf<class AFPSProjectile> ProjectileClass;

protected: // 스폰할 발사체 클래스입니다. UPROPERTY(EditDefaultsOnly, Category = Projectile) TSubclassOf<class AFPSProjectile> ProjectileClass;

EditDefaultsOnly 는 발사체 클래스를 블루프린트의 각 인스턴스가 아닌 블루프린트에서만 디폴트로 설정할 수 있다는 의미입니다.

 

FPSCharacter.h 는 다음과 같아야 합니다.

FPSCharacter.h

FPSCharacter.cpp 는 다음과 같아야 합니다.

FPSCharacter.cpp

FPSProjectile.h는 다음과 같아야 합니다.

FPSProjectile.h

FPSProjectile.cpp는 다음과 같아야 합니다.

FPSProjectile.cpp