이동동기화

CJB_ny·2022년 6월 30일
0

2D_Project

목록 보기
23/23

60FPS => 1초에 60장

1/60 초마다 이동을 하는데

이 프레임에 따라 1/60초를 정확하게 맞춰 주어야지만,

다른사람도 똑같은 화면을 볼 수 있다.

그래서 네트워크 부화 때문에 불가능하다.

회사에서도 엄청난 노하우가 없다.

이동방법

컨텐츠에 따라 좀 다른데, (장르)

클라에서 움직인다고 서버에 보낸다음에 서버에서 응답이 오면 그때

움직이는게 첫번째 방법.

두번째는 먼저 이동한 다음에 "통보"만 해주고 뒤늦게

서버에서 다른애들한테 뿌려주는 방법

FPS

같은 경우 서버 응답 기다리면 늦다.

스타같은거는 정확해야 하니까 서버 응답 기다리고.

MMO의 경우 먼저 움직이고 통보하는게 '주'이다.

우리는 선이동

그러면 언제 패킷을 보내야 하나?

=> 그냥 실질적으로 움직이게 될 부분에서 보내면된다.

MyPlayerController에서 입력을 받아서 CreatureController에서 destPos를 움직여주고있는데

이부분에 일단 처리 ㄱㄱ.

방향, 좌표도 필요

좌표만 보내면 이상하게 갈 것이다. (방향도 필요함)

그래서 방향과 갈 좌표의 패킷을 Protocol.proto에다가 정의 해 줄것이다.

일단 이렇게 ㄱㄱ.

그리고

이곳에 CreatState, Movedir넣어주면 될 듯.

결국 이 구조체 사용해주면 된다.

나머지 부분도 PlayerPosInfo구조체를 들고있도록 수정 ㄱㄱ.

이제 어느정도 된거같다면 배치파일 실행 ㄱㄱ.

그다음 서버 빌드 -> 에러 -> 수정해야함.

ClientSession에서 일단 이렇게 수정 ㄱㄱ.

(아직은 완전하지 않음)

프로퍼티 초기화


https://stackoverflow.com/questions/51402067/what-does-public-listabc-abc-get-set-new-listabc-this-mean

The = new List< ABC >(); part initializes the property when the class gets instantiated to a new list. This is only executed once when the instance is constructed.


지금 PlayerInfo안에 PosInfo가 있기 때문에

프로퍼티를 초기화 해주는 작업을 해야한다.

패킷 핸들러

이부분이 이제 클라쪽에서 이동을 할 것이라고 C_Move라는 패킷으로 보내는 상황이다.

만약에, 클라에서 패킷을 보내 요청을 했다고 하면은

해당 플레이어가 있는 방을 찾아서

거기있는 유저들한테 이동했다는 사실을 BroadCasting해주어야한다.

먼저 서버에서 다른 클라유저들한테 보낼 패킷 = S_Move resMovePacket만들고

playerId추출하고 (이동할 녀석)

PosInfo (이동할 녀석의 좌표 추출) 하고

Broadcast를 통해 resMovePacket을 해당 방에 다 뿌려 주어야한다.

broadcast

이렇게 packet을 받아서 다 뿌려주기만 하면됨.

그러면 패킷을 받아서 Send를 해주게 된다.

이렇게하면 이제 C_MoveHandler로 받아준 다음에

C_Move의 패킷을 이용해서 Player찾아서 이동을 먼저 시켜준 다음에

이동했다는 사실을 Broadcast를 통해 알려주고 있다.


https://www.inflearn.com/course/%EC%9C%A0%EB%8B%88%ED%8B%B0-mmorpg-%EA%B0%9C%EB%B0%9C-part7/lecture/50665?tab=community&volume=1.00&quality=1080&speed=1.5&q=321186


profile
공부 일기장으로 변해버린 블로그 (https://cjbworld.tistory.com/ <- 이사중)

0개의 댓글