inflearn logo
강의

Course

Instructor

[C# and Unity MMORPG Game Development Series] Part 7: MMO Content Implementation (Basics of Unity + C# Server Integration)

Move Sync #3

Player의 MoveDir, PosInfo 관련 문의 (C_MoveHandler)

484

lyh69846055

10 asked

0

안녕하세요?

좋은 강의 제공 주셔셔 감사합니다. 

코드를 따라 가면서 궁금한 사항이 있어 글 남기게 되었습니다. 

서버와 클라가 서로 연결 될 때 

ClientSession.cs의 MyPlayer의 정보가 

MyPlayer.Info.PosInfo.State = CreatureState.Idle;

MyPlayer.Info.PosInfo.MoveDir = MoveDir.None; 으로 정의 되는걸로 보입니다. (코드 하단)

public override void OnConnected(EndPoint endPoint)

{

Console.WriteLine($"OnConnected : {endPoint}");

MyPlayer = PlayerManager.Instance.Add();

{

MyPlayer.Info.Name = $"Player_{MyPlayer.Info.PlayerId}";

MyPlayer.Info.PosInfo.State = CreatureState.Idle;

MyPlayer.Info.PosInfo.MoveDir = MoveDir.None;

MyPlayer.Info.PosInfo.PosX = 0;

MyPlayer.Info.PosInfo.PosY = 0;

MyPlayer.Session = this;

}

RoomManager.Instance.Find(1).EnterGame(MyPlayer);

}


궁금한 사항은 하기 부분 입니다. 

연결 된 이후에 MyPlayer가 어디서 변경 되기에 


public static void C_MoveHandler(PacketSession session, IMessage packet) 에서 session 정보를 받아다가 쓸 수 있는지 알 수 있을까요 ?? ㅜㅜ 


특히 C_MoveHandler 코드 중에서  PlayerInfo info = clientSession.MyPlayer.Info; 부분이 이해가 안되는데, 

현재 MyPlayer가 정보 중 Move Dir 은 None으로 계속 유지되고 있는게 아닌가요 ? 어디서 MyPlayer정보가 업데이트 되는지 알 수 있을까요 ? ㅜ

//일단 서버에서 좌표 이동

PlayerInfo info = clientSession.MyPlayer.Info;

info.PosInfo = movePacket.PosInfo;

//다른 플레이어한테도 알려준다.

S_Move resMovePacket = new S_Move();

resMovePacket.PlayerId = clientSession.MyPlayer.Info.PlayerId;

resMovePacket.PosInfo = movePacket.PosInfo;

clientSession.MyPlayer.Room.Broadcast(resMovePacket);



session packet C# unity C_MoveHandler

Answer 3

0

Rookiss

무엇을 여쭤보시는건지 질문이 잘 이해가 가지 않습니다.

MyPlayer는 위와 같은 정보를 포함하고 있고,
각 정보는 필요에 따라 이리 저리서 건드리고 있습니다.

0

lyh69846055

답변 감사합니다.

혹시 말씀 사항에서 movePacket은 

서버 측에서 의 C_MoveHandler에서 본다면 

public static void C_MoveHandler(PacketSession session, IMessage packet) 에서 

packet에 해당되는  데이터로 타고 넘어 오는 걸로 보이고,

제가 궁금한 부분은 session의 경우는 해당 데이터를 받은 

ClientSession 클래스 정보가 넘어 오는 걸로 보여집니다 .

ClientSession 정보 중 MyPlayer가 가장 궁금한 부분인데,  하기 코드에서 info.PosInfo는 클라에서 넘어오는 movPacket으로 업데이트 되는데 clientㄴSession,MyPlayer의 정보는 언제 업데이트 되는지 알 수 있을까요?

패킷이 조립되거나 데이터가 전송되면 결국은 movePacket 정보가 바뀌어질텐데,  clientSession의 MyPlayer 정보 또한 바뀌는 부분이 어딘지 알 수 있을 까요 ?ㅜ

PlayerInfo info = clientSession.MyPlayer.Info;

info.PosInfo = movePacket.PosInfo





0

Rookiss

정답은 클라 쪽에서 움직이고 있습니다.
서버에서는 나중에 해당 좌표에 대한 검증을 하지만,
기본적으로 각 플레이어 좌표 계산은 각자의 Client에서 하는 것입니다.

MessagePack

0

85

1

본인 플레이어 이동 관련 질문

0

49

1

Part7 Part9 질문이 있습니다.

0

72

1

.

0

116

1

.

0

106

2

게임 로직 루프에서 게임 틱 누락으로 인한 높은 CPU 사용 문제

0

92

1

타일 팔레트 깔았는데도 안돼요

0

116

2

2D로 그냥 만들어도 되나요?

0

81

2

지난 강의와 이어지는게 맞을까요?

0

81

2

순환참조 문제로 인해 발생하는 문제는 없을까요?

0

162

2

유니티 클라와 C++서버연동

0

277

2

멀티플레이 테스트 환경 관련 질문입니다

0

207

3

강의 후반부에 순서 동기화를 위해 잡큐를 사용 안 한 부분 질문입니다!

0

150

2

코드 관련한 몇 가지 질문입니다!

0

153

2

3d 프로젝트 이동 동기화 관련

0

323

4

파트 7 스트레스 테스트 질문 드립니다.

1

190

2

맵 이동 방식

0

133

0

맵 이동 관련해서 질문드립니다.

0

91

1

안녕하세요 도저히 알 수 없는 오류가 나와서 질문드려요,,

0

203

2

안녕하세요. 일전에 질문 드린 포폴 준비 관련 질문의 추가 질문입니다!

0

160

1

[팁] 2024년 기준 버전 이슈?

0

456

1

SendBuffer.cs 삭제 후 대체 되는 부분의 장단점?

1

203

1

지금 강의의 유니티 클라를 IOCP 서버와 연동하는 것

0

336

2

PushAfter 사용 질문

0

192

1