게임어빌리티를 멀티플레이로 동기화하는 방법을 알고 싶습니다.
166
작성한 질문수 1
PlayerState 클래스의 생성자에 ASC->SetIsReplicated(true);를 추가하고
캐릭터의 SetCharacterControl 함수에 if (!IsLocallyControlled()){return;}를 추가한 뒤
캐릭터의 PossessedBy 함수에 SetupGASInputComponent();를 넣었는 데 이걸로는 공격 어빌리티가 완전히 동기화되지는 않더라고요
서버역할도 하는 클라이언트(A)에서 공격키를 누르면 다른 클라이언트(B)에서 동기화되는데 클라이언트(B)에서 공격키를 눌렀을 때는 아무일도 일어나지 않습니다.
OnRep_PlayerState 함수 안에서도 어빌리티를 등록해줘야 하는 걸까요?
답변 2
0
음 지금 어디까지 강의를 들으셨는지 모르겠습니다.
우선 서버에서 클라이언트로의 동기화는 구조상 쉽게 진행가능하지만, 클라이언트에서 서버로 명령을 보내고, 이 명령을 받은 서버가 다시 다른 클라이언트에 명령을 보내 동기화하는 작업은 고려할 내용이 많습니다. 강의 중 후반부에 관련해서 자세히 다루고 있으니 강의를 꾸준히 들어보심이 어떠실까요?
0
안녕하세요, 인프런 AI 인턴입니다. WALKING님.
게임어빌리티 시스템(GAS)을 사용하여 멀티플레이로 어빌리티를 동기화하려는 과정에서 겪고 있는 문제에 대해 설명해 드리겠습니다.
언리얼 엔진의 GAS를 활용할 때, 가장 중요한 부분 중 하나는 각 클라이언트와 서버 사이의 동기화입니다. 다음은 이러한 동기화를 원활하게 하기 위한 몇 가지 일반적인 팁입니다:
ASC와 PlayerState: ASC(AbilitySystemComponent)를 PlayerState에 연결하고 이를 복제하도록 설정한 것은 잘하셨습니다. 이를 통해 서버와 클라이언트 간 상태가 공유됩니다. 이 설정은 GAS 시스템을 사용하는 데 있어서 필수적이죠.
SetupGASInputComponent 호출:
PossessedBy함수 내에서SetupGASInputComponent를 호출하는 것 역시 적절한 방식입니다. 이는 캐릭터가 소유된 직후에 입력을 설정하도록 보장합니다.OnRep_PlayerState: 이 함수는 PlayerState의 복제가 완료된 후 호출됩니다. 따라서 이 시점에 어빌리티를 설정할 수 있습니다. 네트워크 환경에서는 클라이언트 측에서 필요한 어빌리티를 등록하거나 필요한 초기화를 하는 것이 일반적입니다.
LocallyControlled와 네트워크 조건:
IsLocallyControlled조건을 이용하여 클라이언트에서만 실행하도록 설정한 부분이 있는데, 이는 클라이언트에서만 실행되어야 하는 코드를 분리하기 위함입니다. 하지만 멀티플레이에서는 서버에 의해 제어되어야 하는 동작들도 고려되어야 합니다. 클라이언트 B의 공격이 동기화되지 않는 문제는 아마도 서버에게 해당 이벤트가 전달되지 않기 때문일 가능성이 있습니다. 따라서 서버로의 요청을 적절히 전달하고 서버에서 해당 동작을 수행하도록 하는 것이 필요합니다.
기존에 다른 질문들과 유사한 질문들이 있었으니, 다음 링크들을 참고하여 보다 구체적인 설명을 확인해보세요:
SetupGASInputComponent 호출 부분 질문입니다.
- 이 질문에서는
SetupGASInputComponent의 역할과 중복 호출 이유에 대해 다루고 있습니다.
- 이 질문에서는
SetupGASInputComponent() 함수 2군데에 작성 질문..
- 중복 호출이 시스템에 미치는 영향에 대해 설명하는 댓글이 포함되어 있습니다.
- 중복 호출이 시스템에 미치는 영향에 대해 설명하는 댓글이 포함되어 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
OnInterruptedCallback()으로 몽타주가 중간에 취소될 경우 CancelAbility를 호출하는게 맞을까요 ?
0
36
1
HasMatchingGameplayTag 역활이 조금 이해가 안갑니다.
0
42
1
캐릭터 스탯 초기 설정 방법 질문
0
84
2
언라얼 공식 홈페이지 튜토리얼 강의에 질문 있습니다
0
80
2
StartAbility, StartInputAbility 둘 다 GiveAbility를 호출해야하나요?
0
73
2
AnimNotify 구현 질문
0
101
2
[6강] ShowDebug에서 Attributes for avater가 변하지 않아요..
0
76
2
4강에서 콤보 공격시 다음 공격을 할 경우 ActivateAbility가 자동으로 발동되는 이유
0
111
2
9강 44:59 부분에서 질문이 있습니다.
0
77
2
8강 24:22 CurrentAttributeSet 질문입니다.
0
63
2
ASC 에서 AttributeSet 함수에 대한 mutable 반환 함수가 없는 이유
0
83
2
SetupGASInputComponent 함수 호출위치가 이해가안갑니다.
0
144
3
[GAS] Player State에 대해 궁금한 점이 있습니다.
0
130
2
AnimNotify를 GA에서 받는방법이 있을까요?
0
83
2
ABP의 skeleton 오류
0
113
1
장판스킬을 만들때 콜리전설정
0
171
2
어빌리티의 쿨다운 GameEffect에 대하여
0
255
2
GAS 구조로 멀티 플레이 게임을 제작할려고 하는데요
0
224
2
5.4버전 기준으로 Remove Gameplay Effect With Tags가 안 보입니다.
0
281
3
8강의 수업 내용들 중 이해가 잘 안가는 부분들이 있습니다.
0
206
2
7강 GE로 NonPlayer의 어트리뷰트셋 값을 초기화시키는 것에 질문이 있습니다.
0
107
2
7강 정리했는데 검토부탁드려요
0
121
1
5강 정리해봤는데 검토부탁드립니다.
0
128
2
4강의 CreateTask 함수 질문입니다,
0
153
2





