월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
JobQueue 질문이있습니다
main에서 TickRoom함수 내부에서 timer를 이용해서 room.Update를 해주고room.Update에서는 Flush를 해줍니다.근데 Flush를 보면 싱글쓰레드처럼 따로 lock을 걸지않고 실행되고 있습니다.만약에 timer.Interval에 설정한 시간이 지났는데 flush가 다 안끝나서 다른 쓰레드가 flush로 들어오면 멀티쓰레드 환경이 되서 오류가 발생할 수도 있을 것 같은데이 문제는 현재 코드에서 예외처리를 안해준거죠?https://stackoverflow.com/questions/37747650/do-timers-continue-if-function-didnt-finish선생님께 찾아보고 질문한다는 성의를 보이기 위해서.... ㅎ..ㅎ
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
3d 이동 및 회전 구현하다가 질문이 생겼습니다(에러질문X)
(위에 사진은 3d 방향 및 이동 동기화를 성공해서, 뿌듯해서 같이 올려요 ㅎ..ㅎ) 멀티환경에서 3D이동 및 회전을 동기화를 구현할 때, 이전 위치와 현재 위치의 Vector3.magnitude의 차이가 0.1이 나면 이동패킷을 보내줄수있도록 설계를 해서 구현을 했습니다.혹시 0.1f 차이마다 패킷을 계속 보내는 것도 패킷을 너무 많이 보내는 편인가요? (유저 수는 10명정도가 같은 room에 있도록 만들예정입니다)항상 감사합니다! 강의를 들으면서 조금씩 바꿔보는데 정말 뿌듯하네요 하하하하하 강의가 너무 유익해요^^
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
강의 관련 질문!(화살 파트)
안녕하세요 루키스님.MMORPG 시리즈 Part7 화살 #1 ~ 화살 #2 를 수강하다가 궁금한 점이 있어서 질문을 올립니다.궁금한 부분은 화살을 생성하는 부분인데요. 제가 이해하기로는 화살 스킬을 사용하는 과정이 클라에서 스킬 사용 패킷을 보냄(C_Skill) -> 서버 C_SkillHandler를 거쳐 GameRoom.HandleSkill 에서 처리 -> 이 때 GameRoom.EnterGame(Arrow)로 화살 입장 -> 본인 클라이언트와 다른 플레이어의 클라이언트에 스폰패킷(S_Spawn)을 보냄 ->각 클라이언트에서 ObjectManager.Add로 화살을 스폰하는 것으로 이해했습니다.강의 코드에서, Gameroom에서 EnterGame(Arrow)를 실행하면 Arrow는 Projectile 타입이므로 if 문에 걸려 본인 클라에 Spawn패킷을 뿌리지 않고 다른 클라에만 뿌리는 것으로 작성이 된것 같은데... Player 타입이 GameRoom의 인자로 들어왔을 때만 본인 클라에 패킷을 전송하는 것 같거든요. 그런데 실행하면 화살이 잘 날아갑니다. 어느 단계에서 화살이 생성되는지 모르겠습니다. 어느 부분을 잘못 이해했을까요? 강의 코드 그대로 입니다.public void EnterGame(GameObject gameObject) { if (gameObject == null) return; GameObjectType type = ObjectManager.GetObjectTypeById(gameObject.Id); lock (_lock) { if (type == GameObjectType.Player) { Player player = gameObject as Player; _players.Add(gameObject.Id, player); player.Room = this; Map.ApplyMove(player, new Vector2Int(player.CellPos.x, player.CellPos.y)); // 본인한테 정보 전송 { S_EnterGame enterPacket = new S_EnterGame(); enterPacket.Player = player.Info; player.Session.Send(enterPacket); S_Spawn spawnPacket = new S_Spawn(); foreach (Player p in _players.Values) { if (player != p) spawnPacket.Objects.Add(p.Info); } foreach (Monster m in _monsters.Values) spawnPacket.Objects.Add(m.Info); foreach (Projectile p in _projectiles.Values) spawnPacket.Objects.Add(p.Info); player.Session.Send(spawnPacket); } } else if (type == GameObjectType.Monster) { Monster monster = gameObject as Monster; _monsters.Add(gameObject.Id, monster); monster.Room = this; Map.ApplyMove(monster, new Vector2Int(monster.CellPos.x, monster.CellPos.y)); } else if (type == GameObjectType.Projectile) { Projectile projectile = gameObject as Projectile; _projectiles.Add(gameObject.Id, projectile); projectile.Room = this; } // 타인한테 정보 전송 { S_Spawn spawnPacket = new S_Spawn(); spawnPacket.Objects.Add(gameObject.Info); foreach (Player p in _players.Values) { if (p.Id != gameObject.Id) p.Session.Send(spawnPacket); } } } }
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
쓰레드 생성 부분
저희 강의에서 멀티쓰레드를 사용하는 걸로 알고 있는데 쓰레드를 생성하는 부분이 정확히 어디 부분인가요..?해당 부분에서 Connect 될 때 필요하다면 count의 개수만큼 쓰레드를 생성하는 걸까요..?혹시 아니라면 어디 부분일까요... 도저히 못 찾겠어서 질문드립니다..!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
EC2 서버 패킷 이슈
안녕하세요 루키스님!저는 강의에서와 달리 움직임 방식을 int 단위가 아닌 float 단위로 움직일 때마다 C_Move 패킷을 보내게 설계했습니다(아마 이러면 패킷을 쏘는 양이 더 많을 것 같아요!)해당 로직을 로컬 서버에서 작동을 시키고 클라이언트를 저의 로컬 ip에 접속하게 하면 패킷이 밀림 없이 잘 동작하지만 ec2에 서버를 올리고 클라를 ec2 IP에 접속 시키고 동작시키면 패킷이 밀려서 그런진 몰라도 플레이어가 이동하다가 트레이서 현상이 발생합니다. 총알을 쏘면 트레이서를 하지는 않지만 버벅거리면서 나가구요.기본적으로 Move 로직이 강의와 마찬가지로 클라에서 움직이고 서버에 위치를 통보하는 방식입니다. 이 방식이 패킷이 밀림으로써 클라는 나가 있지만 서버에서의 반영으로 인해 위치가 다시 트레이서 되는 건가 보다 싶어서움직임 로직을 바꿨습니다. 클라에서 움직인다고 인풋을 주면 패킷을 서버로 보내고 서버에서 움직임을 바꾼 후에 클라에 반영이 되게 바꿔봤습니다! 하지만 이 방식도 로컬에선 잘 동작하지만 ec2 서버에서는 버벅거리더라구요...ec2 인스턴스의 유형을 높은 걸로 해도 똑같고 최적화를 많이 했다고 생각했는데도 계속 버벅거리네요... 혹시 방법이 있을까요... 차이는 로컬 서버냐 ec2 서버냐의 차이인거 같은데, 애초에 물리적인 거리가 있기 때문에 이런걸까요...
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
센드 리시브 버퍼를 살리고 싶어서 몇가지 물어봅니다.
강사님 께서는:SendBufferHelper(버퍼)가 세션 외부에 있는 상황은 바람직 하지만플레이어 세션중(PacketSession)하나가 send() 처리를 못하고 이런 일회용 버퍼를 계속 물고 있을 수 있다.(ex 사용자가 엘리베이터를 타서 통신이 안되는 경우)그럼 참조정리를 못하니 GC가 수거를 안해간다. 이 버퍼 릭킹 문제를 처리하기 위해 레퍼런스 카운트를 적용할수도 있다 라고 말씀하셨는데. C#에서 이를 구현하는데 난관이 있어서요(그점도 이미 말씀하셨었죠), 아래와 같습니다. 레퍼런스 카운트 사용 방식 (예상)만약 100명의 사용자에게 브로드 캐스팅 할경우 이 버퍼에 대한 레퍼런스 카운트를 100으로 세팅한다.각 세션에서(100개) 각각 send에 성공해서 버퍼에 대한 참조가 끝날 때마다 1씩 감소시킨다.이 카운트 감소 처리를 할때 쓰레드 동기화에 신경써야 한다.문제 1 ) 이런 동기화 처리도 성능에 영향을 준다. 레퍼런스 카운트 처리 때문에 샌드함수는 결국 지연되는 것.문제 2) 매번 다 쓰인 버퍼의 레퍼런스 카운트가 0이 되었다 한들, 그것을 GC가 "항상" "확실히" 수거해가는지 테스트할 방법을 모른다.문제 3) 레퍼런스 카운트가 0이 안되고 1이 유지되어서 어딘가에서 send가 막혀있는걸 확인 했을때 그 세션을 Disconnect()한다고 해도 GC가 이 버퍼를 "항상", "확실히"수거해 갈지 알 수 없다 (테스트 방법의 부재) 그래서 아래와 같은 질문을 드립니다.!! 질문 0 !!) 강사님께서 메모리 릭에 대한 우려가 있다고 말씀하셨는데, 그게 순전히 우려인지, 혹시 테스트를 해보신건지 궁금합니다.다시 말해서 C#에서 샌드 리시브 버퍼를 그냥 쓰기로 강행하면 나중에 낭패 볼까요? 질문 1 ) 위의 2,3번 문제를 체크할 수 있는 방법이 있을까요? 질문 2 ) 요즘 C#서버가 많이 보입니다. 모두 이런 문제를 고려했을텐데요, 그냥 매 순간 지금처럼 조각조각 패킷을 만들어 보내는게 대세인가요? 아니면 다른 방법이 있나요? 질문 3) 위의 1번 문제의 성능 감소가 클까요? 질문 4) 혹시 버퍼 크기를 4096 * 100 이 아니라 250, 300 등 작게 잡으면 이문제를 무시해도 될까요? P.S 이 강의 시리즈가 매우 큰 도움이 되고 있습니다. 감사합니다.
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
위치 동기화 기능구현 질문이 있습니다
선생님 안녕하세요 서버강의를 듣고 이를 응용하여 3축 좌표계에서 플레이어가 접속하면 프리팹을 생성하고, 트랜스폼 정보와 애니메이션 정보를 동기화하는 서버를 구현하였습니다.플레이어가 접속하면 생성되는 프리팹은 언리얼의 HasAuthority와 같이 로컬 클라이언트의 소유가 되어 클라이언트만 자신의 위치를 브로드캐스트하면 다른 플레어들은 위치를 수신하여 손쉽게 구현이 가능했습니다!하지만 월드에 미리 배치되어있는 무버블 오브젝트들은 어떻게 동기화를 해야하는지 궁금합니다. 누구의 소유도 아닌 공공(?)의 오브젝트들은 누가 동기화 패킷을 보내줘야하는지 어렵습니다 ㅜㅜ조금 더 설명을 하면, 특정 조건에 함수가 호출되어 움직이는 기능을 수행하는경우는 RPC로 원격지 클라이언트에서 함수를 호출할 수 있게 구현하였습니다.하지만 미리 씬에 배치되어있는 Sphere 오브젝트를 플레이어가 움직이면서 밀어RigidBody 연산으로 자연스러운 움직임을 어떻게 동기화해야하는지 잘 모르겠습니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
학습자료 실행 관련 문의
안녕하세요 학습자료 다운로드 후 실행 관련해서 질문 드립니다..csproj파일이 있는 클라이언트 폴더를 유니티로 실행 시키고, 게임 씬을 더블클릭 하고 실행했는데 작동이 되질 않더라구요. 보면 하이라키에 있는 인스턴스들이 보이질 않는데 매번 프로젝트를 실행할 때마다 하이라키를 추가를 해줘야 하나요???또 전체 흐름 로그를 한번 찍어보고 싶은데 어떤 식으로 찍어봐야 할지 모르겠습니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
Tilemap.cellBounds에 관련해서 질문 있습니다.
제가 Tilemap을 아래와 같이 만들어 놨는데요,cellBounds에 break point를 잡아서 디버깅을 해보니 x.Max = 20, y.Max = 9가 나오더라구요. (제가 찍은 tilemap을 일일히 하나하나 세보니 x의 최대 좌표는 19고 y는 8인데도 말이죠.)그렇다면 위 코드와 같이 반복문을 돌면 타일이 찍혀있지 않는 y = 9, x = 20 일 때도 반복문을 도니까 제가 만든 맵보다 가로 세로가 한 줄씩 늘어나게 출력됩니다. (아래 사진처럼 맨 윗줄과 오른쪽 줄에 0이 출력되서 나옵니다.)제가 생각하기에는 아래와 같이 코드를 짜야 알맞은xMin, xMax, yMin, yMax값과 map이 출력될 거 같은데 혹시 제가 틀린건가요?using (var writer = File.CreateText($"Assets/Resources/Map/{go.name}.txt")) { writer.WriteLine(tmBase.cellBounds.xMin); writer.WriteLine(tmBase.cellBounds.xMax - 1); writer.WriteLine(tmBase.cellBounds.yMin); writer.WriteLine(tmBase.cellBounds.yMax - 1); for (int y = tmBase.cellBounds.yMax - 1; y >= tmBase.cellBounds.yMin; y--) { for (int x = tmBase.cellBounds.xMin; x < tmBase.cellBounds.xMax; x++) { TileBase tile = tm.GetTile(new Vector3Int(x, y, 0)); if (tile != null) writer.Write("1"); else writer.Write("0"); } writer.WriteLine(); } }
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
화살 쏘는 것을 처리하는 방식
안녕하세요 루키스님!제가 루키스님이 강의중 만드신 게임에서 쓰이는 좌표를 float으로 바꾸고 화살이 이동하는 방식을 수정하였습니다.(저는 화살이 아니라 기본 동그라미 이미지의 총알로 사용해봤습니다)수정 내용은 화살 이동 로직을 처리하는 방법입니다. 기존 로직은 서버에서 GetFrontCellPos 함수를 이용하여 서버에서 이동된 좌표를 클라로 알려줘 이동되는 것으로 알고 있습니다. 클라에서는 UpdateMoving를 통해 움직이고 있구요!GetFrontCellPos 함수를 활용하여 서버에서 화살을 움직이기에는 좌표 단위가 Int가 아니라 float이니 어떻게 해결 해야할지 고민을 하다가 생각난 방법이 있습니다.화살을 쏜 후 유니티의 update 문에서 60fps로 서버에 화살이 이동했다는 것을 가르쳐준 후 브로드캐스팅 되게 했습니다. 그 후 서버에서는 받은 패킷에 따라 브로드 캐스팅하게 핸들링 해줬구요.이제 2명을 접속시키고 화살을 쏴보니 패킷이 밀려서 그런지 몰라도 쐈던 자리로 다시 롤백되는 현상을 발견했습니다(배그에서 트레이서 되는 느낌)60fps가 너무 자주 요청하는 건가 싶어서 15fps로 돌리니 클라 화면에서 내가 쏜 총알은 똑같이 롤백되면서 총알이 나가지만 다른 Player가 쏜 총알은 롤백이 되지 않았습니다. 하지만 이동된다기 보다는 순간이동 하는 것 처럼 보이기 시작했습니다.몇가지 실험을 해보니 혼자 접속중일때는 총알이 롤백현상이 일어나지 않고 곧게 잘 날아가는 것을 확인할 수 있으나 인원수가 한 명 늘어나는 순간부터 총알의 롤백 현상이 생기는 것을 확인했습니다. 브로드 캐스팅의 연산량이 늘어나서 패킷이 밀리는 것이 원인인 것 같습니다.C_SkillMove, S_SkiilMove 라는 패킷을 새로 파주고 실행했습니다. message C_SkillMove{int32 objectId = 1;PositionInfo posInfo = 2;}message S_SkillMove{int32 objectId = 1;PositionInfo posInfo = 2;}클라의 업데이트 문에선if (Time.frameCount % 15== 0){C_SkillMove skillMovePacket = new C_SkillMove();PosInfo.PosX = transform.position.x;PosInfo.PosY = transform.position.y;skillMovePacket.PosInfo = PosInfo;skillMovePacket.ObjectId = Id;Managers.Network.Send(skillMovePacket);} 이런 코드로 움직입니다. 서버에선public static void C_SkillMoveHandler(PacketSession session, IMessage packet){C_SkillMove skillMovePacket = packet as C_SkillMove;ClientSession clientSession = session as ClientSession;Arrow arrow= ObjectManager.Instance.Find<Arrow >(skillMovePacket.ObjectId);if (arrow== null)return;GameRoom room = arrow.Room;if (room == null)return;room.HandleSkillMove(arrow, skillMovePacket);} 이런식으로 핸들링 하고 HandleSkillMove 함수는 public void HandleSkillMove(Arrow arrow, C_SkillMove skillMovePacket){if (arrow == null)return;lock (_lock){ObjectInfo info = arrow.Info;info.PosInfo = skillMovePacket.PosInfo;S_Move resMovePacket = new S_Move();resMovePacket.ObjectId = arrow.Info.ObjectId;resMovePacket.PosInfo = skillMovePacket.PosInfo;Broadcast(resMovePacket);}}이런 로직으로 움직입니다.float일 때의 서버에서 이동 처리 방법이 궁금합니다! 또한 위처럼 순간이동되게 가는 것을 방지하는 법도 궁금합니다.. (스르륵 이동하게 처리하는 부분)
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
이동 동기화 중에서 딜레이후 동기화 처리
실무에 가깝게 적용할만한 캐릭터간 이동 동기화 중에서 딜레이후 동기화 처리에 대한 참고할만한 이론이나 문서 같은것이 있을까요? 게임 장르는 존 방식이고 한 방에 최대 100명 이하? 정도 될것 같은데요환경은 모바일이고요 약.. 서버에서 1초에 4~8번 정도(정확히 아직 1초에 몇번 보내는지는 모릅니다)의 이동관련 패킷을 TCP나 UDP로 보낸다고 가정할 경우 일정 시간 이동 관련 위치 값을 수집해서 보간 처리 해볼까 하는데 언리얼 데디케이트 서버에서 어떻게 해야 할지 좀 막막한것 같은데 관련된 문서나 방식등이 있을까요?루키스님 강의 중 C++ 쪽 서버강의에서 이미 강의는 어느정도 듣긴했지만 이동 관련된것이 없는것 같아서 질문 남깁니다답변좀 부탁드리겠습니다!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
nupkg to dll 방법 공유합니다
nuget package를 dll파일로 변환하는 방법 공유합니다저도 몰라서 한참 헤맸기 때문에 공유하면 좋을것 같아서요!https://youtu.be/JgkPoxeb714이 방법대로 하면 됩니다!
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
맥 OnRecvCompleted transferredBytes 에러
구글 프로토 버퍼 연동을 하던중서버에서는 패킷을 보내도 클라쪽에서 recvArgs 는 받은 바이트배열이 하나도 없는데 구글 프로토버프 패킷 형식이나 그냥 바이트 배열을 보내봐도 똑같습니다.분명히 socketError == SocketError.Success인데 받은 바이트가 없다는게 이해가 안됩니다ㅠ혹시 왜 그런지 알 수 있을까요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
AI를 별도의 클래스로 관리한다는 말의 의미
안녕하세요 강사님! 강의를 듣다가 정확한 의미파악을 못해서 질문을 하게 되었습니다.보통의 게임에서는 AI를 별도의 클래스로 관리한다고 하셨는데 AI라는 단위가 정확히 뭔지 모르겠어서 질문을 남기게 되었어요.예를들어 지금 강의속 프로젝트같은 경우 UpdateIdle함수 / UpdateMoving함수 / UpdateSill함수 / UpdateDead함수가 다 따로따로 별도의 AI인건지, 아니면 위에 열거한 모든 함수가 하나의 AI로 관리된다는 의미인지 정확히 이해를 못했습니다 ㅠㅠ 어느쪽으로 이야기하신걸까요?
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
Unity엔진의 GetComponent 기능
CreatureController cc = go.GetComponent<CreatureController>();if (cc != null)cc.OnDamaged();//go는 MonsterController를 가지고 있음에서 CreatureController를 상속박은 MonsterController의 오버라이드한 함수가 실행되는데CreatureController cc = go.GetComponent<CreatureController>();는CreatureController cc = new MonsterController;와 같은 기능이기 때문에 그런걸까요?(UNITY GetComponent의 기능인가?)만약 그렇다면 분명 GetComponent로 CreatureController를 불렀는데 어떻게 MonsterController가 리턴되었는지도 궁금합니다 GetComponent의 UNITY 내부 엔진 기능인가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
이동 동기화 - float
강의에선 한칸씩 이동을 하는데 저는 float 단위로 이동하게 하고 싶어 클라이언트에서 플레이어의 실제 position이 바뀌는 부분에 서버에 패킷을 보냈습니다!서버쪽 콘솔창에는 패킷이 온전히 받아와주기 주고 받는게 돼고 있습니다. 클라이언트에도 브레이크 포인트를 찍어보니 제대로 값이 들어오고 있구요!패킷에서 posX, posY도 docs를 참고하여 float으로 변수 타입을 바꿔줬습니다!클라이언트에서도 실제 이동이 일어나는 부분에서 값을 바꿔주었고 이동 패킷 또한 서버에 쏴주었는데 화면에는 이동의 동기화가 이루어지지 않습니다 ㅠㅠ 이유가 뭘까요?이정도 자료만으로 알기 힘드실 것 같지만 막혀서 질문드립니다..!클라쪽 핸들러 코드도 강의와 똑같습니다!float 이동이나 int 단위 이동이나 이론상 변수 타입만 다르고 돼야하는 게 아닌가가 저의 생각입니다! 답변 부탁드리겠습니다!ㅠㅠ
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
멀티환경일때와 싱글환경일때 구현 차이 궁금증이 있습니다.
안녕하세요 선생님! 강의를 듣다 질문이 생겼는데요.전체적으로 싱글게임처럼 진행되게 하고싶은데 레벨업 시스템은 만들어 그걸 서버와DB에서 관리하고 싶을때 게임룸이나 몬스터와 관련해 질문이 생겨서요.위와 같은 경우는 몬스터, 플레이어간의 동기화 부분만 제외하고 강의에서 구현한 것처럼 똑같은 방식으로 구현하면 되는걸까요??
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
클라에서 build를 통해 만든 exe파일에서 이동동기화가 이루어지지 않습니다
안녕하세요 강사님! 다름이 아니라 강의를 따라해보고 그 뒤에 거의 흡사하게 한 번더 다른 파일에서 코드를 구현해보고 있습니다.그런데 서버에서 클라에 패킷보내는것까진 제대로 작동하는데(좌표확인까지됨) 클라에서 실제로 테스트를 위해 실행했을때 실질적인 플레이어캐릭터가 좌표 인식을 제대로 못하는 문제가 있습니다.구체적으로 첫번째클라를 실행하고 플레이어이동시키고잇는도중 두번째클라가 실행되면 두번째클라에서도 첫번째클라플레이어 이동이 제대로 동기화되어보이는데이후 두번째클라창으로 옮겨가서 플레이어를 이동시키면 첫번째클라창에서 타플레이어좌표이동이 플레이어오브젝트에 반영되지않고 방향과 상태만 반영됩니다. 이후 첫번째클라창으로 옮겨가 플레이어를 이동시키면 두번째클라창에서도 타플레이어좌표이동이 되지 않습니다. 와중에 서버에서 클라쪽에 패킷전송은 잘되고 있습니다.게다가 타플레이어가 실제로 이동한좌표로 가려고하면 충돌인식까진되는데 화면엔 타플레이어가 이동하기전 있던곳에 그대로 서있습니다이경우엔 보통 어떤부분이 문제인걸까요?ㅜㅜ+) break point 걸어놓고 유니티에서 확인해봤는데 유니티에서 실행하면 정상적으로 이동동기화 되는데 build를 해서 만든 exe파일에선 위와 같은 현상이 일어나며 적용이 안됩니다...
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
30분경에 말씀하신 구현방법을 다루시는지 궁금합니다.
안녕하세요 강사님30분경에 '실질적으로 지금보다 좀 더 복잡한 MMO가 되면 불러와야 할 정보들을 클라에게 먼저 알려준 다음 클라에서 모든 정보 불러오기가 끝났으면 서버쪽에 준비됐다고 ok패킷을 날리게 되고 ok패킷을 받고나서야 서버쪽에서 게임에 입장 시킨다고 하시면서 여기까지는 구현하지 않을거라고 하셨는데 해당 내용이 나중에 강의중에(다른파트에서라도) 나오는지 궁금합니다!혹시 강의중에 해당 내용이 없다면 구글링 검색어를 뭘로 하면 좋을지 알려주시면 감사하겠습니다!
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
배치파일을 실행하려고 하니 오류가 뜹니다
이렇게 뜨는데 어떻게해야할까요..?ㅠㅠ