Skip to content

Latest commit

 

History

History
111 lines (68 loc) · 7.68 KB

GameplayAbilitySystem.md

File metadata and controls

111 lines (68 loc) · 7.68 KB

GameplayAbilitySystem

이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템을 포함한 추가 정리..

액션 RPG로 알아보는 게임플레이 어빌리티 시스템(GAS) | Unreal Fest 2022

유튜브 링크

  • GAS는 기본적으로 엔진용 플러그인이다.
  • 캐릭터에 ASC(Ability System Component)를 추가하면 GAS를 사용할 수 있다. 즉, 캐릭터의 모든 어트리뷰트에 접근할 수 있다.
  • 확장하여 파괴 가능한 오브젝트가 같은 체력을 공유하고, 데미지를 받으면 체력이 감소하는 등의 기능을 구현할 수 있다.
  • 어트리뷰트 세트는 float숫자의 집합으로 현재값과 베이스값을 따로 가진다.
    • 베이스 값이 100이더라도 현재값이 120을 가질 수 있다. (잠깐 1.2배로 스케일 조절하는 모디파이러를 사용하여)
  • 게임플레이 어빌리티는 GA라고 부르며 블루프린트로 구현하는 것이 유리하다. (C++로 가능하지만, 팀원도 사용할 수 있게 하려면 블루프린트로 구현하는 것이 좋다.)
  • 게임플레이 이펙트는 꼭 GA에서 나올 필요는 없지만 일반적으론 GA에서 나온다.
    • 캐릭터나 액터의 어트리뷰트를 수정하거나 태그를 적용해준다. (무적모드로 만든다?)
    • 즉각적인 효과나 지속적인 효과로 나뉜다.
    • 또한 GE는 데이터 오브젝트이다.
  • 게임플레이 태그는 액터 태그와 비슷한 기능이다.
    • 한 번 만들어서 프로젝트 세팅에 추가하면 디폴트 gameplaytags.ini에 남는다는 것이다.
    • 이후에는 드롭다운 박스로 간편하게 사용할 수 있다.
    • 태그에는 계층구조가 있다.
    • 엔진과는 별개이므로 GAS없이도 사용가능하다. (강력한 기능)

Unreal GAS(GameplayAbilitySystem) Documentation 번역글 1부

블로그 링크

잘 정리된 문서.. 보고 정리

라일라 프로젝트

에픽게임즈 GAS시스템을 활용한 게임(오픈소스)

GAS 이득우 교수님 질문내용

제가 만들고 싶은 게임을 토이프로젝트로 우선 BP를 이용해 GAS로 만들어 본 후, 토이프로젝트를 참고하여 만드는 건 어떤가요? 개발 규모가 어느정도일 때 이 방법이 좋을까요?비효율적인 과정일까요? 제 예상은 기획 단계와 개발 속도가 오히려 더 빨라질 것이라고 예상하는데,그리고 GAS 시스템 분석과 프로젝트 확장성 높은 설계에 도움이 될 것이라고 기대하는데, 이렇게 프로젝트를 진행했을 때 단점이 있을까요?

케바케로 간단한 코어미캐닉부터 만들어보면 좋다. part2 와 part4강의와 비교 해보면 part4가 더 좋았다.

시스템이 커지면서 더 복잡해진다. 따라서 정해진 프레임워크에 도입하는 것이 더 좋을 것 같다.

게임 프레임웍은 학습하고 넘어가는 것이 좋다.

Attribute Set으로 관리할 데이터와 그렇지 않은 데이터는 Type으로 구분하는지? ( float와 그 외) 아니면 기준이 있는지?모든 데이터를 어트리뷰트로 두는 건지? 현재 사용하는 인게임 데이터는 없는건가요?

별도의 데이터가 필요하다.

상태관련 정보는 Tag를 써서 관리하는 것 같다.

따로 관리하는 것이 좋을 것 같다. (string) float을 넘어가는 값들은 별도로 생각.. 어차피 사용하는 float값이 변할 때 마다 전처리와 후처리를 통해 다른 데이터의 확장이 가능하다.

GA에서 게임 어빌리티 1개를 구성하기 위해서 어빌리티 Task로 구분된다고 하셨는데, 어빌리티 Task하나는 어떤 단위로 만든는지(하나의 책임? SRP)그 어빌리티 Task에서 사용하는 값들은 어떻게 가져오는지?

자기 자신의 포인터를 넘겨주기에 해당 포인터로 접근하여 값을 조절한다.

hit된 상대의 정보를 가져오는 것을 참고하면 좋다. 특정 어빌리티 클래스에만 동작하긴 하지만 유용하다.

멀티플레이에서 GAS를 적용할 때 유의하여 설계해야 할 점 (확장성 측면 설계 방법)예. 멀티플레이에서 캐릭터의 ASC는 플레이어 캐릭터보단 서버에서 클라이언트로 배포되는 액터가 적합하다.예를 들어, 다른 캐릭터의 현 위치, 행동 상태를 모든 클라이언트에 실시간으로 표현해야 할 때

데이터는 다 서버가 가지고 있고, 클라이언트는 허상 데이터만 가지고 있어야 한다. GAS는 리플레케이션이 되어 클라와 서버와 공유하지만, 모든 클라에게 줄 필요는 없다. (적게 써야함) 플레이어 스테이트에 가스를 넣는 것이 가장 많이 사용한다. 시각적인 부분은 폰으로 구분 껍데기이기 때문에 클라에서 가져가고?

실제 중요한 로직은 감추고 클라로는 애니메이션만 보이게 설계하는 것이 유리하다.

Part3강의 듣고 다음 링크를 통해서 공부하기 링크

GAS에서 게임어빌리티인 GA를 설계할 때, 블루프린트로 설계하는 것이 좋다고 생각했는데강의에선 C++로 만드는게 좋다고 한 이유가 GAS에 대한 이해 때문인지?GAS 시스템은 블루프린트를 사용한다고 했는데 코드로 작성하는 것에 비해 성능 저하가 없는지

C++을 써야하는 영역이 분명히 존재하기에 C++로 공부하는 것이 좋다. 블루프린트 에셋을 가지고 설정의 영역이 존재하기에 C++은 필수적 어트리뷰트 셋은 무조건 C++, 게임플레이 어빌리티도 간단한건 블루프린트로 가도 된다. 이펙트는 C++로 안하는 걸 권장한다. (계산식이 복잡할 때만)

게임 플레이 태그 계층 구조의 복잡함을 보완하기 위해 사용할 수 있는 기능이 있는지

오히려 필요함

GAS의 설계는 데이터 기반이라고 하는데, 제작에 사용되는 코드는 객체지향적인 책임주도가 되어야 하는게 아닌지? 처음부터 모든 데이터를 엑셀에 적고 모든 데이터를 예상하는 것이 가능한지

게임 데이터 기반이 적당하다. 서버나 클라이언트 구조를 봐도 데이터 구조가 더 적합하다.

순환 구조에서 사용된 Level에 대한 생각

기본 아키텍처에 있다.

게임 플레이 태그를 엑셀 등으로 정리하고 관리하는 것이 보편적인지?csv와 같은 파일로 import 가능한지요

ini에 넣어줘야 한다

게임 이펙트를 시퀀스 형태로 구성이 가능한가? (1번은 3초동안 데미지를 주고, 1번 이후에 큰 데미지를 준다. 이것이 디커플링 되어 시퀀싱이 가능한지)어빌리티 레벨과 같이 이펙트도 레벨이 설정 가능한지?

시퀀스 옵션은 없었다. 태그 컨테이너에 따라서 조절하는 ASC에 넣어서 특정 어벌리티가 ASC에 콜해서 여러개로 실행하는 오더를 만들 수 있다.

GAS의 순서를 대략적으로 표현하면 표현 ,동작, 데이터 처리의 확장으로 보면 좋을지 (디커플링)

조건에 맞는 동작 => 산식 설계 (데이터 처리) => 반영한다.

태그는 FName, 컨테이너로 구성되어 UENUM보다 무거울 것 같은데 성능 차이가 있는지

이렇게 미니멀한 내용은 무시하고 진행