본문으로 바로가기

[Unreal Engine 5] Gameplay Ability System - 1

category UnrealEngine/기능 2024. 3. 15. 22:28

Gameplay Ability System의 정보글이 적어 작성하는 포스트

다룰 내용이 많아 장편이 될 것으로 예상

최대한 간단하고, 알아듣기 쉽게 작성하도록 노력하겠다.

 

1. 개요

Gameplay Ability System의 내용은 언리얼 엔진 문서에도 잘 나와있다.

게임플레이 어빌리티 시스템(Gameplay Ability System) 은 RPG나 MOBA 타이틀에서 볼 수 있는 어빌리티 및 어트리뷰트 유형을 구축하기 위한 고도로 유연한 프레임워크입니다. 게임 내 캐릭터가 사용할 액션이나 패시브 어빌리티, 이러한 액션의 결과로 다양한 어트리뷰트를 높이거나 낮추는 상태 이펙트를 만들 수 있고, '재사용 대기 시간' 타이머나 자원 비용을 구현하여 액션의 사용 빈도를 조절하거나, 어빌리티의 레벨과 레벨에 따른 이펙트를 변경하거나, 파티클 및 사운드 이펙트를 활성화하는 등의 작업이 가능합니다. 게임플레이 어빌리티 시스템을 사용하면 점프처럼 단순한 것부터 최신 RPG나 MOBA 타이틀 내 인기 캐릭터의 기술 모음처럼 복잡한 것까지 다양한 인게임 어빌리티를 설계 및 구현하고 효과적으로 연결할 수 있습니다.

 

중요하게 보아야 할 것은 '어빌리티 및 유형을 구축하기 위한 고도로 유연한 프레임워크' 라는 것이다.

Gameplay Ability System은 게임 내 능력을 설계, 구현 하기 쉽게 도와주고 네트워크 게임에서 효율적으로 작동할 수 있게 도와준다.

 

듣기만 하면 꽤 좋아 보이긴 하는데, 약간 모호하기도 하다.

실제로 무엇인지에 대해 조금 이야기 해보도록 하겠다.

 

우리가 RPG 게임을 하나 만든다고 생각해보자

 

RPG 또는 롤플레잉 게임은 일반적으로 다양한 요소를 포함하는 '상당히' 큰 게임이다.

RPG 게임에서는 힘, 지능, 민첩, 체력, 마나와 같은 능력치가 있을 수 있다.

이 들은 게임 플레이에 중요한 방식으로 영향을 미치는 것들이다.

이를 일반적으로 'Attribute' 라고 한다.

 

우리가 어떠한 Attribute에 변화를 가하면, 다른 Attribute들이 영향을 받을 수 있다.

또한 Attribute는 다른 여려 요인의 영향을 받을 수 있다.

 

예를 들어

  • 힘(Str)을 찍으면 캐릭터의 물리 공격력(Damage)이 올라간다.
  • A의 물리 공격력(Damage)으로 B를 공격하면, Armor, CriticalChance 같은 Attribute들에 영향을 받아 최종 데미지가 계산된다.

우리가 Damage라는 Attribute로 어떠한 캐릭터를 공격했을때, 이 공격 이라는 행위는 Ability로 인해 발생한다.

RPG에서 어떠한 캐릭터를 공격하여, 그 캐릭터가 죽었다면 우리는 EXP (경험치) 라는 것을 얻는다.

그리고 어떠한 기준을 넘어서면, 캐릭터는 레벨 업 이라는 것을 하게 된다.

 

또한 우리의 캐릭터는 Buff/DeBuff 같은 것들을 받을 수 있다.

포션을 마시면 체력/마나가 증가하거나, 불 지형에 닿으면 '발화' 같은 디버프에 걸려 체력이 점차 감소한다.

따라서 이러한 효과들은 캐릭터의 Attribute 값을 변경하는데

이러한 Attribute 값을 변경하는 것을 'Effects' 라고 한다.

 

이제 우리가 어떠한 몬스터를 칼로 공격했다고 해보자.

그 몬스터는 칼을 맞고 '으악' 소리를 낼 것이며, '피가 튀는' 파티클이 발생할 것이다.

즉, 우리가 몬스터에 공격을 가하는 작업을 하였다.

이는 우리가 몬스터의 Attribute에 Effect를 적용시킨것이다.

그럼 해당 Effect가 게임 내에서 적절하게 작동하는지 '시각적', '청각적' 으로 확인할 수 있어야 하는데

이를 GameplayCues가 담당한다.

 

이 내용들은 RPG에만 쓰이는 것 뿐만아니라, 잘 생각해보면 여러 장르의 게임에서 많이 사용되고 있다.

대부분의 게임들은 HP/MP같은 Attribute들을 사용하고, 다른 캐릭터에게 Effect를 적용시킨다.

 

요점은, 게임이 다양한 처리를 맡게 됨으로써 많은 효과들로 인해 복잡해질 수 있다는 것이다.

게임이 복잡해질수록, 오브젝트간의 관계는 더 많아진다는 것이고

이런 관계가 많아질수록 관리하기가 어려워질 수 있다는 것이다.

 

Gameplay Ability System은 프레임워크를 제공하여 매우 복잡한 게임을 개발하기 쉽게 만들어준다.

 

Gameplay Ability System은 네트워크와 관련된 정보들이 많이 물려있는데, 이에 대한 내용들도 간단하게 나마 작성할 예정이다. 

네트워크를 몰라도 알 수 있도록 작성할 예정이며 개요는 이렇게 마치겠다.

 

물론 위에 설명한 내용 말고도 GameplayAbility, Ability Task, Gameplay Tag등이 있다. 이 내용은 앞으로 추가되는 문서에서 다룰 예정이다.