Inflearn brand logo image

인프런 커뮤니티 질문&답변

WALKING님의 프로필 이미지
WALKING

작성한 질문수

이득우의 언리얼 프로그래밍 Part4 - 게임플레이 어빌리티 시스템

게임어빌리티를 멀티플레이로 동기화하는 방법을 알고 싶습니다.

작성

·

120

0

PlayerState 클래스의 생성자에 ASC->SetIsReplicated(true);를 추가하고

캐릭터의 SetCharacterControl 함수에 if (!IsLocallyControlled()){return;}를 추가한 뒤

캐릭터의 PossessedBy 함수에 SetupGASInputComponent();를 넣었는 데 이걸로는 공격 어빌리티가 완전히 동기화되지는 않더라고요

서버역할도 하는 클라이언트(A)에서 공격키를 누르면 다른 클라이언트(B)에서 동기화되는데 클라이언트(B)에서 공격키를 눌렀을 때는 아무일도 일어나지 않습니다.

OnRep_PlayerState 함수 안에서도 어빌리티를 등록해줘야 하는 걸까요?

 

 

답변 2

0

이득우님의 프로필 이미지
이득우
지식공유자

음 지금 어디까지 강의를 들으셨는지 모르겠습니다.
우선 서버에서 클라이언트로의 동기화는 구조상 쉽게 진행가능하지만, 클라이언트에서 서버로 명령을 보내고, 이 명령을 받은 서버가 다시 다른 클라이언트에 명령을 보내 동기화하는 작업은 고려할 내용이 많습니다. 강의 중 후반부에 관련해서 자세히 다루고 있으니 강의를 꾸준히 들어보심이 어떠실까요?

0

안녕하세요, 인프런 AI 인턴입니다. WALKING님.

게임어빌리티 시스템(GAS)을 사용하여 멀티플레이로 어빌리티를 동기화하려는 과정에서 겪고 있는 문제에 대해 설명해 드리겠습니다.

언리얼 엔진의 GAS를 활용할 때, 가장 중요한 부분 중 하나는 각 클라이언트와 서버 사이의 동기화입니다. 다음은 이러한 동기화를 원활하게 하기 위한 몇 가지 일반적인 팁입니다:

  1. ASC와 PlayerState: ASC(AbilitySystemComponent)를 PlayerState에 연결하고 이를 복제하도록 설정한 것은 잘하셨습니다. 이를 통해 서버와 클라이언트 간 상태가 공유됩니다. 이 설정은 GAS 시스템을 사용하는 데 있어서 필수적이죠.

  2. SetupGASInputComponent 호출: PossessedBy 함수 내에서 SetupGASInputComponent를 호출하는 것 역시 적절한 방식입니다. 이는 캐릭터가 소유된 직후에 입력을 설정하도록 보장합니다.

  3. OnRep_PlayerState: 이 함수는 PlayerState의 복제가 완료된 후 호출됩니다. 따라서 이 시점에 어빌리티를 설정할 수 있습니다. 네트워크 환경에서는 클라이언트 측에서 필요한 어빌리티를 등록하거나 필요한 초기화를 하는 것이 일반적입니다.

  4. LocallyControlled와 네트워크 조건: IsLocallyControlled 조건을 이용하여 클라이언트에서만 실행하도록 설정한 부분이 있는데, 이는 클라이언트에서만 실행되어야 하는 코드를 분리하기 위함입니다. 하지만 멀티플레이에서는 서버에 의해 제어되어야 하는 동작들도 고려되어야 합니다. 클라이언트 B의 공격이 동기화되지 않는 문제는 아마도 서버에게 해당 이벤트가 전달되지 않기 때문일 가능성이 있습니다. 따라서 서버로의 요청을 적절히 전달하고 서버에서 해당 동작을 수행하도록 하는 것이 필요합니다.

기존에 다른 질문들과 유사한 질문들이 있었으니, 다음 링크들을 참고하여 보다 구체적인 설명을 확인해보세요:

  1. SetupGASInputComponent 호출 부분 질문입니다.

    • 이 질문에서는 SetupGASInputComponent의 역할과 중복 호출 이유에 대해 다루고 있습니다.
  2. SetupGASInputComponent() 함수 2군데에 작성 질문..

    • 중복 호출이 시스템에 미치는 영향에 대해 설명하는 댓글이 포함되어 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

WALKING님의 프로필 이미지
WALKING

작성한 질문수

질문하기