Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

3강: 캐릭터의 입력 처리 #116

Closed
Tracked by #16 ...
fkdl0048 opened this issue Apr 30, 2024 · 0 comments · Fixed by #124
Closed
Tracked by #16 ...

3강: 캐릭터의 입력 처리 #116

fkdl0048 opened this issue Apr 30, 2024 · 0 comments · Fixed by #124
Assignees
Labels
Study pertaining to teaching and learning

Comments

@fkdl0048
Copy link
Collaborator

fkdl0048 commented Apr 30, 2024

3강: 캐릭터의 입력 처리

  • 강의 목표
    • 플레이어 캐릭터의 게임플레이 어빌리티 시스템 설정 방법의 학습
    • 플레이어 캐릭터의 입력에 따른 게임플레이 어빌리티 발동의 구현
    • 어빌리티 태스크의 활용 방법의 학습
    • 게임플레이 어빌리티 시스템의 디버깅 방법의 학습

어빌리티 태스크

플레이어 캐릭터의 ASC 설정

  • 일반적으로 플레이어에 ASC를 설정할 때, Owner를 PlayerState로 설정하고, Avatar를 Character로 설정한다.

게임플레이 어빌리티 스펙

  • 게임플레이 어빌리티에 대한 정보를 담고 있는 구조체
  • ASC는 직접 어빌리티를 참조하지 않고 스펙 정보만 가지고 있다.
  • 스펙은 어빌리티의 현재 상태와 같은 다양한 정보를 가지고 있다.
  • ASC로부터 어빌리티를 다루고자 할 경우 스펙에 있는 Handle을 사용해 컨트롤함
  • 핸들 값은 전역으로 설정되어 있으며 스펙 생성시 자동으로 1씩 증가함. 기본값 -1
  • 어빌리티 정보: 스펙
  • 어빌리티 인스턴스에 대한 레퍼런스: 스펙 핸들

어빌리티 시스템 컴포넌트의 입력 처리

  • 게임 어빌리티 스펙에는 입력 값을 설정하는 필드 InputID가 제공된다.
  • ASC에 등록된 스펙을 검사해 입력에 매핑된 GA를 찾을 수 있음: FindAbilitySpecFromInputID
  • 사용자 입력이 들어오면 ASC에서 입력에 관련된 GA를 검색함
  • 해당 GA를 발견하면, 현재 발동 중인지를 판별
    • GA가 발동 중이면 입력이 왔다는 신호를 전달: AbilitySpecInputPressed
    • GA가 발동하지 않았으면 새롭게 발동시킴: TryActivateAblity
  • 입력이 떨어지면 동일하게 처리
    • GA에게 입력이 떨어졌다는 신호를 전달: AbilitySpecInputReleased

게임플레이 어빌리티의 인스턴싱 옵션

  • 상황에 따라 다양한 인스턴스 정책을 지정할 수 있다.
  • NonInstanced: 인스턴싱 없이 CDO에서 일괄 처리
  • InstancedPerActor: 액터마다 하나의 어빌리티 인스턴스를 만들어 처리
  • InstancePerExecution: 발동시 인스턴스를 생산함

어빌리티 태스크의 활용

  • 어빌리티 태스크를 줄여 AT라고 함
  • 게임플레이 어빌리티의 실행은 한 프레임에서 일어나고
  • 게임플레이 어빌리티가 시작되면 EndAbility함수가 호출되기 전에는 끝나지 않음
  • 애니메이션 재생 같이 시간이 소요되고 상태를 관리해야 하는 어빌리티의 구현 방법
    • 비동기적으로 작업이 수행하고 끝나면 결과를 통보받는 형태로 구현
    • 이를 위해 GAS는 어빌리티 태스크를 제공함
  • 어빌리티 태스크의 활용 패턴
    • 어빌리티 태스크에 작업이 끝나면 보르드캐스팅되는 종료 델리게이트를 선언
    • GA는 TA를 생성한 후 바로 종료 델리게이트를 구독함
    • GA의 구독 설정이 완료되면 AT를 구동: AT의 ReadyForActivation 함수 호출
    • AT의 작업이 끝나면 델리게이트를 구독한 GA의 콜백 함수가 호출됨
    • GA의 콜백함수가 호출되면 GA의 EndAbility 함수를 호출해 GA종료
  • GA는 필요에 따라 다수의 AT를 사용해 복잡한 액션 로직을 설계할 수 있다

GA의 블루프린트 상속 및 게임플레이 태그 설정

  • 꼭 필요한 상황이 아니라면 GA와 TA는 가급적 자기 역할만 충실하게 구현하는 것이 좋다.
  • 게임플레이 태그를 C++에서 설정하는 경우 기획 변경때마다 소스코드 컴파일을 수행해야 함
  • 게임플레이 태그 설정은 블루프린트에서 설정하는 것이 의존성 분리에 도움이 된다.
  • 게임플레이 태그 설정 기획
  • 점프 GA의 ActivationOwendTags에 Character.IsJumpimng 게임플레이 태그 설정과 같이 사용

정리

  • 플레이어 캐릭터의 GAS 설정 방법
    • 오너액터와 아바타액터의 개념의 이해
    • 플레이어 스테이트에서 ASC를 설정하는 이유
  • 게임플레이 어빌리티 스펙의 이해
  • GAS에 관련된 입력을 범용적으로 처리하는 방식의 학습
  • GA의 다양한 인스턴싱 옵션의 확인
  • GA에서 다양한 인스턴싱 옵선의 확인
  • GAS의 디버깅 방법
@fkdl0048 fkdl0048 added the Study pertaining to teaching and learning label Apr 30, 2024
@fkdl0048 fkdl0048 self-assigned this Apr 30, 2024
@fkdl0048 fkdl0048 added this to Todo May 1, 2024
@fkdl0048 fkdl0048 moved this to In Progress in Todo May 1, 2024
@fkdl0048 fkdl0048 moved this from In Progress to Two-Week Plan in Todo May 13, 2024
@fkdl0048 fkdl0048 moved this from Two-Week Plan to In Progress in Todo May 16, 2024
@fkdl0048 fkdl0048 linked a pull request May 22, 2024 that will close this issue
@github-project-automation github-project-automation bot moved this from In Progress to Done in Todo May 22, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Study pertaining to teaching and learning
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant