MyPlayer분리

CJB_ny·2022년 6월 28일
0

2D_Project

목록 보기
22/23

지난시간한거

플레이어 입장 신호를 클라에서 멋대로 하는게 아니라

서버에서 신호를 받아서 로그를찍는 작업까지 지난시간까지함.

오늘 할꺼

클라에서 플레이어 생성을 받아서 만들어주는 작업 할 꺼다.

PlayerController부분에서 입력을 받아서 움직이는데 이게

다른애들도 눌렀을 때 다같이 움직이는 문제가 발생함.

=> 그래서 내가 조종하는 Player이냐 아니냐를 분리를 해주어야함.

방법은 여러가지

가장 좋은 방법은 Playercontroller하나 더 파주는 것이다.

이렇게 만들어주고 뭘 이사시켜야 할지 고민 ㄱㄱ.

그리고 강의대로 입력을 받는 부분이라던가 그런거 MyPlayercontroller로 이사 ㄱㄱ

그리고 유니티 프리팹도 수정 ㄱㄱ

이렇게 굿.

그다음 작업 -> 오브젝트 매니저

오브젝트 매니저ㄱㄱ

이제 playerId를 서버에서 받아 올 것이라 dic로 관리를 해주도록 하고

내자신은 놔둬놓으면 관리가 쉬우니까 프로퍼티로 열어두자.

Dic의 Key무시 👍

지금 foreach 빨간줄인데

GameObject obj in _objects.Values해주면 Key값 무시가능.

PacketHandler

우리가 패킷을 만들어서 보내고 로그를 찍는거까지 해보았다.

우리가 지금 할게 MyPlayer만들어 줘야하는데

이것을 objectManager에서 할 것임.

그래서 S_EntertGame부분에서 실질적으로 MyPlayer만들어주는 작업을 해보도록 하자.

GameScene

게임씬에서 이렇게 주석된 부분에서 만들어 주고있었는데

이것을 PacketHandler에서 해주면된다.


함수 default값 ❗

지금 bool myPlayer = false인데 이거 호출 하는 함수쪽에서 인자로 넣어줄 때

myPlayer : true 이런식으로 해주면된다.


플레이어 추가

이정도.

LeaveGameHandler

이렇게 구현을 해주도록 하자.

스폰

각각 foreach로 순회 하면서 알려주도록 하자.

실행 시뮬

지금 Server를 구동한 상태에서 유니티를 실행하면

결국 이 PacketHandler쪽에서 아까 작성해준 부분들이 실행이 되면서

실질적으로 화면에 플레이어들이 나타나기를 바란다.

내가 컨트롤 하는거는 컴포넌트로 MyPlayerController 적용했으니까

내 키보드로 움직일 수 있어야 한다.

실행

에러남.

메인쓰레드에서만 실행할 수 있다. ❗

유니티 에서는 정책상 별도의 쓰레드에서 컨텐츠 코드를 바로 건들이면 안된다.

그래서 우리가 PacketQueue를 이용해서

유니티에서 실행하는 "메인 쓰레드"에서 쌓여있는 일감을 가져와서 실행하도록

수정을 한 적이 있었다. 그래서 이부분이 누락이 되어서 그렇다.

결국 고쳐야 하는 부분은...

ClientPacketManager에서 고쳐야함.

(나중에 PacketManager수정한단다 -> 올려줌)

ClientPacketManager에서

이부분이 패킷 만드는 부분인데 밑줄 부분에서 강제로 바로 호출 하는게 아니라

분기

가 필요하다.

밑줄 부분을 PacketQueue에다가만 넣어놓기만 하고 밑줄 부분은 호출하지 않고

우리가 직접 "메인쓰레드"에서 꺼내서 호출하도록 만들어 줘야함

customHandler 만들어주자 (서버에서는 이녀석 사용 안함)

이렇게 else는 서버이고 if는 클라부분임.

이제 해야하는게

CustomHandler를 연동을 시켜줘야함.

그래서 if != null 일떄 바로 실행하는게 아니라 큐에다가만 넣어 달라고 요청해야함.

ServerSession에서 OnConnected이렇게 패킷큐에다가만 담아두도록 해주면

실제로 꺼내서 쓰는 부분은

NetworkManager에서

이렇게 확인을 하고있다.

이부분에서 실질적으로 꺼내서 처리를 해준다.

Server Pro

PacketFormat이렇게 수정 ㄱㄱ

MakePacket도 이렇게 수정하고

그다음

PacketGenerator 다시 빌드.

그다음 Protocol 폴더 가서

GenPacket 배치 파일 두번정도 실행 해주도록 하자.

테스트

지금 이동동기화는 되지 않았지만 서로의 존재는 확인이 가능하다.

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

0개의 댓글