프로젝트 중 저주 및 몬스터 동기화에 대한 로직을 정리.
* 현재 프로젝트 내에서 설계한 스팀 세션을 생성 및 참여 했을 때에도 저주와 몬스터에 대한 네트워크 동기화에 문제가 없음을 확인
저주
1. 사람 플레이어들에게 랜덤하게 적용.
2. 플레이어가 죽거나 괴물이 되면 다시 랜덤하게 플레이어에게 적용
3. 저주 적용 상태의 플레이어는 다른 사람에게 저주 넘기기 가능
4. 저주가 걸린 로컬 플레이어에게만 개별적인 임시 UI 보이기
위의 4가지 부분에서 네트워크 동기화 성공
저주 적용 시점과 옮기기까지 과정
1. 저주 객체를 GameState 에서 관리했다. GameState 는 각 pc 별로 1씩 존재 가능하기 때문.
GameState 에서는 무작위로 사람 플레이어를 선택 및 저주를 적용하여준다.
이 함수는 서버에서만 실행되므로 밑에 호출되는 함수들 또한 서버에서만 호출된다.
2. 이제 저주가 시작되기 때문에 저주 객체는 자신을 가지고 있는 Owner 캐릭터를 설정한다.
해당 함수도 서버에서 실행되기 때문에 해당 player 객체를 복제하여 사용 중인 클라이언트에게 저주가 적용되었음을 알린다.
3. 위에서는 서버에서만 bHasCurse 함수를 true 로 만들어주지만
Replicated 를 이용한 bHasCurse 변수를 동기화.
이제 모든 클라가 특정 플레이어 인스턴스가 저주에 걸려 있음을 알 고 있다.
4. 저주를 옮기려는 시도를 할 때 bHasCurse 는 이미 Replicated 로 동기화 되어 있으니 클라에서 정상 작동
그리고 로컬 클라에서 ServerRPC 로 저주를 옮긴다.
Possess 및 몬스터 동기화
Possess 동기화 : Possess 는 서버에서만 이루어지기 때문에 Possess 요청은 서버에서만 실행되어야한다.
1. PlayerController 로 사망시 관전자 모드로 변경하는 ServerRPC 함수를 선언
사망시 저주를 다시 시작
Possess 와 관련해서 Pawn 이 리플리케이트 설정이 true 라면 자동 동기화 되어진다.
2. 마찬가지로 몬스터로 변하는 함수도 있으나 ServerRPC 로 선언되지 않았기 때문에 서버에서만 호출되도록 설정이 필요하다.
3. 예시 ) 몬스터의 사망 시 ServerRPC 호출은 한 번만 해주면 되니 로컬 클라이언트가 호출하도록 설정
4. 몬스터의 공격 및 리액션과 관련한 함수들
기본적으로 로컬 공격 >> 서버에게 공격 했음을 알림 >> 서버가 Multicast 로 모든 클라에게 Attack 행위를 동기화 순
플레이어의 공격이나 PickUp 도 비슷한 방식으로 네트워크 동기화 처리
'프로젝트 > Pollute' 카테고리의 다른 글
피직스 머터리얼을 이용한 사운드 변경 (0) | 2025.01.03 |
---|---|
플레이어 캐릭터 빙의 변경 - (사람, 몬스터, 관전자) (0) | 2025.01.03 |
플레이어 블렌드 스페이스 변경 & 속도 동기화 - 스테미나 (1) | 2024.12.13 |