멀티플레이 상황에서 한 클래스 내부의 여러 프로퍼티들이 replicated 처리가 되어있다면
한 틱내에 해당 프로퍼티들을 서버에서 값 변경하고 그 패킷을 클라이언트 측에서 받았을 때
클라이언트에서 패킷을 받은 시점에 서버측에서 변경한 프로퍼티들이 전부 다 변경되었다고 보장할수있음?
글고 근본적인 질문인데, 이런 사실을 대체 어디서 확인할수있는거임? 엔진소스를 암만 뒤벼봐도 해당부분은 온갖 템플릿 처리해놔서 알아보기가 힘든데..
멀티플레이 상황에서 한 클래스 내부의 여러 프로퍼티들이 replicated 처리가 되어있다면
한 틱내에 해당 프로퍼티들을 서버에서 값 변경하고 그 패킷을 클라이언트 측에서 받았을 때
클라이언트에서 패킷을 받은 시점에 서버측에서 변경한 프로퍼티들이 전부 다 변경되었다고 보장할수있음?
글고 근본적인 질문인데, 이런 사실을 대체 어디서 확인할수있는거임? 엔진소스를 암만 뒤벼봐도 해당부분은 온갖 템플릿 처리해놔서 알아보기가 힘든데..
돈주고 쓰면 언리얼담당자한테 메일보내 그게 최고다! 하지만 궁금하다면.. 언리얼 서버가 뭔지는 모르지만 1.클라이언트와 동기화인지 2.패킷의 도착여부인지. 1.서버에서 1을 보내면 클라가 1을 받는데. 그 받는 시점에는 서버가 2가 됐을수도 있음. 가장 쉽게 이동관련한것들이 그럼. 이건 서버 동기화쪽찾아보고 2.그냥 서버 패킷 로그. 클라 패킷 로그 대조하면됨. 서버에서 패킷보낼떄 카운트 번호를 찍어서 보내. 그럼 클라쪽에서 받을때 유실됐는지 확인하면됨.
언리얼에서 제공해주는 언리얼 데디케이티드 서버 이야기인데, 언리얼 데디섭과 클라이언트 자체에서 해당 패킷 처리를 어떻게 처리하고 있는 지를 모르겠음. 편하게 쓰라고 엄청나게 추상화 시켜놔서 해당 처리를 대체 어떻게 하고있는지 감이 안잡힘
아마 언리얼 자체에서 패킷 유실관련 처리는 알아서하고 게임플레이 로직으로 올텐데 패킷 자체를 보낼적에 해당 클래스의 모든 프로퍼티의 변경 데이터를 같이 보내는지 잘모르겠음
패킷을 팩하고 파싱하는 부분은 시스템개발자 아니곤 알필요가 없긴해. 그래서 안알려주는게 맞을꺼임. 그러면 그냥 믿고 써야되고. 불안한 부분은 로그를 찍어서 스트레스 테스트 돌리면 될꺼임
근데 그 부분을 모르면 게임플레이 측 코드짤 때 모든 가능성을 고려하고 코드를 짜야하는거 같은데, 그러면 거의 모든 부분에서 데이터 무결성을 체크해야하는데 코드가 말도안되게 더러워져서
코드가 더러워지는 부분은 경험이 채워줄꺼라고 믿기도 하고 그리고 경력많다고 코드가 깔끔해지지는 않고 주어진 시간도 있음. 모든 가능성에 대해서는 서버프로그래머는 그래서 되게 폐쇄적으로 짜는게 옳다고 생각하는 쪽임. 이건 그냥 내생각일뿐. 감이 안잡히면 예를 들어서 스트레스 테스트 툴을 만들어서 패킷을 1초당 1개씩 계속 보내. 그걸 하루쥉일 켜놔. 그리고 너가 원하는 값들이 잘 세팅됐는지 로그랑 비교하면서 확인해봐. 그런데 서버 붙은 게임들 보면 핵이 괜히 있는게 아니라서 너무 완벽해야지 할필요는 없지 않을까
짧게 이것저것 설명하다보니깐 두서가 없긴한데 나는 서버쪽 잠깐 코딩하면서 이것저것 생각했던거 말해준거임. 더 잘하는 사람이나 주위사람이랑 코드리뷰하는게 좋을꺼임.
아니 notify
그럼 한 클래스내에 서버에서 변경한 replicated 프로퍼티를 동시에 받을 수 있는 방법이 따로있음? Rpc말고
Notify 호출을 어느 코드에서 하는거임?
말하는 Notify가 혹시 어디 코드 얘기하는지 알수 있을까?
보장받으려면 RepNotify 쓰면됨 나머지는 Reliable 하지 않음
예전 글이라 볼지는 모르겠는데, 유튜브에 replication 쉽고 자세하게 설명하는 좀 유명한 영상 있는데 그거 여러번 보면 대충 감 올듯. 근본적으로 패킷 주고 받는 부분은 엔진코드 바싹 뜯어봐야되는데 원래 분석하기 엄청 빡셈. 20년넘게 전문가들이 극강의 추상화 하며 쌓아온 코드다보니.. 아마 그냥 게임 엔진에 대한 이해가 조금 있어야 그나마 가능할듯? (렌더러, 네트워크, 충돌, 게임쓰레드 등등) 그리고 언리얼 데디서버 자체가 mmo같은 실시간 서버랑 다르게 사실상 렌더링만 안할뿐이지 클라이언트랑 같은 코드 들고 돌아가는거로 알고있음. 클라는 여기에 렌더링만 추가로 할 뿐인거지. 시뮬레이션은 서버에서도 똑같이 함. 그래서 엔진도 함수마다 server버전 따로 클라버전 따로 같이 보여서 더 보기 힘듬