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

GAS 프레임워크 도입 - 최종) OwnerActor와 AvatarActor 설정

monstro 2025. 6. 30. 01:40
728x90
반응형

- 개요

ASC를 사용하는 경우ASC를 실질적으로 소유하고 설정하는 주체Owner Actor

ASC를 통해 보여지는 효과만을 연출하는 주체Avatar Actor를 설정할 필요가 있다

 

AbilityActorInfo를 설정하는 작업ASC의 InitAbilityActorInfo 함수를 호출함으로써 이뤄진다

이때 ASC를 갖고 있는 주체가 무엇인지에 따라 해당 함수를 호출하는 시점이 달라진다

 

 1) AI가 컨트롤 - ASC는 Pawn에 의해 소유

 

AI가 컨트롤하는 경우ASC는 Pawn이 소유하고 있고,

서버클라이언트 모두 BeginPlay 함수에서 InitAbilityActorInfo 함수를 호출하여

OwnerActorAvatarActor를 설정하면 된다

 

 2) 플레이어가 컨트롤 - ASC를 Pawn이 소유한 경우

 

플레이어가 컨트롤하는 경우, 그리고 ASC가 Pawn에 의해 소유된 경우에는

서버PossessedBy 함수 안에서 InitAbilityActorInfo 함수를 호출하고

클라이언트서버의 Possess가 완료된 Pawn을 설정하는 AcknowledgePossession 함수 안에서 호출한다

 

만약, 2)의 상황에서 Replication 모드를 Mixed로 설정하여 사용하는 경우

ASC를 소유한 Pawn에서 SetOwner 함수를 호출하여 Owner를 반드시 PlayerController로 설정해야 한다

 

3) 플레이어가 컨트롤 - ASC를 PlayerState가 소유한 경우

 

플레이어가 컨트롤하는 경우, 그리고 ASC가 PlayerState에 의해 소유된 경우에는

서버는 2)의 경우와 동일하게 PossessedBy 함수 안에서 InitAbilityActorInfo 함수를 호출하고

클라이언트 서버가 PlayerState의 정보를 클라이언트와 동기화하는 OnRep_PlayerState 함수 안에서 호출한다

 

1) AuraCharacterBase 클래스

 

 

조상 캐릭터 클래스InitAbilityActorInfo 함수를 추가하여

자식 클래스들에서 해당 함수를 오버라이드하여 OwnerActorAvatarActor를 설정하도록 한다

 

2) AuraEnemy 클래스

 

적 캐릭터 클래스에 InitAbilityActorInfo 함수를 추가하고 오버라이드한다

 

 

 

BeginPlay 함수에서 오버라이드한 InitAbilityActorInfo 함수를 호출하여

적 캐릭터가 소유한 ASCOwnerActor AvatarActor를 설정한다

 

3) AuraCharacter 클래스

 

 

서버에서 ASC의 OwnerActor AvatarActor를 설정하는 PossessedBy 함수를 추가하고,

클라이언트에서 동일한 동작을 수행하기 위한 OnRep_PlayerState 함수를 추가한다

 

 

 

플레이어 캐릭터의 경우, 적과는 다르게 Owner는 PlayerState이고 Avatar는 Character이다

따라서 InitAbilityActorInfo 함수에서 PlayerState를 가져오고

가져온 PlayerState로부터 ASC를 가져와 InitAbilityActorInfo 함수를 호출하여 OwnerAvatar설정한다

이어서 ASCAttributeSet 역시 PlayerState로부터 가져와 설정한다

728x90
반응형