언리얼 엔진 - 게임 프로젝트/GAS 프레임워크 RPG 프로젝트

GameplayAbility - 최종) 어빌리티를 통한 투사체 생성

monstro 2025. 8. 11. 23:37
728x90
반응형

- 개요

입력을 통해 GameplayAbility를 발동하고 투사체를 생성하는 작업을 구현한다

 

1) 투사체 오브젝트 - AuraProjectile 클래스

 

프로젝트에서 사용하는 투사체 오브젝트들의 조상 클래스인 AuraProjectile 클래스를 생성하였다

프로퍼티의 구성은 다음과 같다

  • ProjectileMovement : 투사체의 이동을 관리하기 위한 ProjectileMovementComponent 컴포넌트
  • Sphere : Collision을 통한 충돌 처리를 관리하기 위한 SphereComponent 컴포넌트
  • LifeSpan : 투사체 오브젝트의 생명 주기

 

 

생성자는 위와 같이 3개의 로직으로 나눠서 구성하였다

  • 첫 번째 로직 : 투사체 오브젝트의 Tick을 비활성화하고, 투사체 오브젝트를 Replication하도록 설정
  • 두 번째 로직 : SphereComponent를 생성하고, 충돌처리와 관련한 설정
  • 세 번째 로직 : ProjectileComponent를 생성하고, 속성값을 설정

 

 

BeginPlay 함수의 로직은 위와 같다

부모 버전의 함수를 호출한 후에, 투사체 오브젝트의 생명주기프로퍼티 값으로 설정한다

SetReplicateMovement 함수를 호출하여 MovementReplicate하도록 설정하고

Sphere 컴포넌트Overlap이 발생하면 OnSphereOverlap 함수를 호출하도록 설정하였다

 

2) 캐릭터의 위치에서 투사체를 생성

2 - 1) CombatInterface 클래스

 

GetCombatSocketLocation 함수를 추가하여 캐릭터의 특정 Bone의 위치를 반환할 수 있도록 설정한다

 

2 - 2) AuraCharacterBase 클래스

 

CombatInterface에서 추가한 추상 함수를 오버라이드한다

 

 

또, 캐릭터의 특정 Bone의 위치를 지정하기 위한 프로퍼티를 추가한다

 

 

GetCombatSocketLocation 함수를 오버라이드한 로직은 위와 같다

SkeletalMeshComponent 멤버 변수에서 프로퍼티로 갖고 있는 특정 Bone의 위치를 반환한다

 

3) 투사체를 발사하는 어빌리티 - AuraProjectileSpell 클래스

 

AuraProjectile 클래스의 구성은 위와 같다

ActivateAbility 함수를 오버라이드하여 어빌리티가 발동되면 해당 함수를 호출한다

또, AuraProjectile의 Subclass를 프로퍼티로 추가하여 발사할 투사체를 설정할 수 있다

 

 

ActivateAbility 함수의 로직은 위와 같다

투사체의 생성은 반드시 서버에서만 수행하도록 로직을 구성하였다

어빌리티를 발동한 대상으로부터 CombatInterface를 가져와 GetCombatSocketLocation 함수를 호출한다

호출한 함수로부터 투사체를 생성할 위치를 설정하고

SpawnActorDeferred 함수 ~ FinishSpawning 함수의 조합으로 투사체 오브젝트를 Spawn한 후에 생성한다

 

4) 언리얼 에디터

 

투사체를 생성하는 GameplayAbility 블루 프린트를 생성하고,

생성할 투사체와 해당 어빌리티를 발동하기 위한 Tag를 설정하였다

따라서 커서가 타겟을 가리키는 동안 좌클릭하면 투사체를 생성한다

 

 

플레이어 캐릭터의 블루프린트에 해당 어빌리티를 사용하도록 추가한다

 

- 최종 실행 결과

 

728x90
반응형