inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

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

해결됨

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)

안녕하세요 루키스님? 토이 프로젝트 개요 파트 7을 기반으로 3D 환경에서 Zone없이 위치 동기화 정도로 간단한 게임을 만들어 포트폴리오 만들려고 합니다. 유니티에서 3D캡슐을 플레이어라고 하고, Move패킷에 목표 좌표 찍어서 transform.position 변경시키면서 스르륵 이동하는 방식으로 데드레커닝 비슷하게 흉내 내고 있습니다. 문제 - 스트레스 테스트 얼추 위치 동기화를 마치고 스트레스 테스트를 하고 있는데, 파트4 마지막 스트레스 테스트에서 더미 500명은 거뜬했었는데, 제가 파트7 기반으로 한 프로젝트는 더미 100명부터 버벅 거리더라구요. 문제 분석 - 왜 파트4는 더미 500까지 버텼는데 제거는 100명도? 뭐가 다른가 곰곰히 뜯어보니, 파트4에서는 패킷 모아보내기를 통해 500명이 초당 4번, 총 2000번 정도를 처리하는 반면, (Send만 세었다고 하면) 제 프로젝트 는 패킷 모아보내기가 안되는지 100명이 초당 4번, 총 40000번 (브로드캐스트 400 * 100명) 정도 코스트가 발생하는게 원인이라고 짐작하고 있습니다. 더해서 파트7의 마지막도 패킷 Send도 찍어보니, O(N^2)인 것을 확인하여 질문 드리게 되었습니다. (플레이어 4명이 입장 시키고 한명 움직이면 초당 약 10번, 4명이니까 40번 발생하는 것을 확인). 질문 드립니다. Q1. 파트 4의 패킷 모아보내기는 더미클라이언트들이 같은 프로젝트 안의 공동 큐를 사용해 Send 됐기 때문에 가능했던 부분으로 이해되는데 맞을까요? Q2. 파트7을 기반으로 했다면 100명도 버거운게 맞을까요? Q3. Q2이 맞다면 500명의 부하를 버틸 수 있게 할 수 있는 조언 주실 수 있을까요? 더미 클라 500이 아닌, 실제 500명이 붙었을 때를 가정하고 싶습니다. 패킷을 이렇게 모아보내면 된다.. 등의 아이디어 레벨로라도 조언을 기대하고 있습니다. 물론 파트9에서 존단위 처리 등의 더 상위기법을 알려주시지만, 파트7의 범위 내에서 500명의 스트레스 테스트도 가능하게 하고 싶습니다. 나름 분석하고 질문 드리고 있는데 그냥 제가 뭐 잘못 건드려서 100명도 렉걸리는거 같아서 질문하면서 좀 민망하네요..ㅎㅎ 답변 미리 감사합니다! 회사를 골라 가는 사람으로 성장하겠습니다.

  • C#
  • unity
mhyim 댓글 2 좋아요 1 조회수 233

유니티6 질문

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

unity-chan캐릭터를 다운하여 프로젝트에 넣었는데 캐릭터가 색이 없고 완전 무색입니다 아예 안보이는데 무슨 문제일까요 unity-chan 파일 아래에 materials에 보면 body나 eye가 흑백으로 보이긴합니다

  • C#
  • unity
dlckdals9467 댓글 2 좋아요 0 조회수 518

게임 클라이언트 개발에서 테스트 코드 작성이 도움이 될까요?

미해결

[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + C1)

게임 클라이언트 개발을 진행되면서 코드 관리가 어려울 것 같은데, 테스트 코드를 작성하는 것은 클라이언트 개발에서는 도움이 되지 않는 편인가요?

  • C#
  • unity
  • MMORPG
정길수 댓글 1 좋아요 0 조회수 212

BitConverter.TryWrtieBytes 부분이 잘 이해가지 않습니다.

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

ServerSession 클래스의 Write 함수의 일부입니다. // 최종적으로 패킷의 크기를 할당하기 위한 공간 확보 count += sizeof(ushort); success &= BitConverter.TryWriteBytes(s.Slice(count, s.Length - count), this.packetId); count += sizeof(ushort); success &= BitConverter.TryWriteBytes(s.Slice(count, s.Length - count), this.playerId); count += sizeof(long); BitConverter.TryWriteBytes(s.Slice(count, s.Length - count), this.packetId); 와 같이 스팬을 자를 때 왜 s.Length - count로 count 부터 남은 공간을 전부 자르는 건가요? ushort 크기를 사용할 것이기에 s.Slice(count, sizeof(ushort))로 사용할 공간만 잘라서 사용하는 것이 더 효율적인 것이 아닌가요? +추가 이 이유가 강의에서 말씀해주셨던 누군가가 이상한 값을 할당해 정확한 크기가 전달되지 않을 가능성이 있어서 남은 공간을 모두 확인하려는 의도일까요??

  • C#
  • unity
  • 네트워크
  • bitconverter
  • write
shimnaldo 댓글 1 좋아요 0 조회수 175

Class 설계 후 Razor 에서 호출!

미해결

[C#/.NET 8.0]어서와, Blazor Server는 처음이지?

23:27 ~부터 구현시 강사님 환경하고 수업자 환경하고 다른듯하네요 using BlazorSeverMaster.Components; using BlazorSeverMaster.Components.Account; using BlazorSeverMaster.Data ; using BlazorSeverMaster.interfaces; using BlazorSeverMaster.Models;\ using BlazorSeverMaster.Services ; 위코드를 추가 해야 되네요

  • C#
  • postgresql
  • .net
  • blazor
늘해랑 댓글 1 좋아요 0 조회수 119

로딩 씬에서 DB 데이터 로드 완료 후 Main 씬 전환 시 Spawner의 OnReady 이벤트가 작동하지 않습니다.

해결됨

[Unity] 함께 만들어가는 방치형 게임 개발

로딩 씬에서 DB 데이터 로드 완료 후 Main 씬 전환 시 Spawner의 OnReady 이벤트가 작동하지 않습니다. 디버깅을 통해 StageManager의 OnReady와 OnPlay 호출 시점을 확인해 보았는데, OnReady가 먼저 호출되는 것을 확인하였으나, Spawner에서는 OnReady 함수가 작동하지 않아 발생하는 문제로 확인됩니다. 이렇듯 연결은 잘 해놓았으나, 작동하지 않는데, 하루종일 디버깅하며 찾아보는데 도저히 진도가 빠지지 않아 요청드립니다. https://github.com/sangmoki/IdleHero_RPG 깃허브 링크도 같이 첨부 드립니다 !

  • C#
  • unity
  • firebase
  • 게임기획
  • json-parsing
이상목 댓글 2 좋아요 0 조회수 167

격자 무한 출력

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘

안녕하세요 루키스님. 현재 작업 툴을 Rider를 쓰고 있는데, 툴 설정 문제인건지 코드를 실행하면 격자가 무한으로 출력됩니다! 뭐가 문제인지 모르겠습니다 ㅜ

  • C#
jspark 댓글 2 좋아요 0 조회수 203

릴레이 서비스 방코드를 찾지 못하는 문제

미해결

[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스

Unity.Services .Relay.RelayServiceException: Not Found: join code not found requestId: 549200a3-33be-4931-800c-0a0338144896 ---> Unity.Services .Relay.Http.HttpException`1[ Unity.Services .Relay.Models.ErrorResponseBody]: (404) HTTP/1.1 404 Not Found 릴레이 서버 잘 할당 되었고 방 코드도 잘 나왔는데 InputField에 직접 넣어서 실행하니까 위 에러가 뜹니다.. 어떻게 해결해야할지 모르겠습니다..

  • C#
  • unity
  • 게임기획
  • multiplayer
  • game-programming
오태양 댓글 3 좋아요 0 조회수 389

아이템 강화 테이블 관련

미해결

[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)

안녕하세요~ 강의 잘 듣고 있습니다 ㅎㅎ db상에서 각 아이템별로 강화수치가 달라질때마다 인스턴스를 따로 두셨던데 만약에 장비 아이템이 많으면 천개까지 늘어날텐데 그때마다 +1, +2 .. +10 까지 관리하기에는 너무 많아서 이걸 만약에 인스턴스로 관리하지 않고 강화를 해서 능력치가 +될 경우 해당 장비에 +된 강화수치를 메모리상에 저장하는 식으로 바꾸면 어떤 문제가 생길지 궁금합니다 ㅎㅎ

  • C#
  • unity
  • mysql
  • MMORPG
  • ef-core
  • asp.net-web-api
강남영 댓글 2 좋아요 0 조회수 255

Tilemap Collider 2D 사용 시 평지에서 캐릭터가 안 움직이는 현상

해결됨

새싹부터 시작하는 Unity 게임 개발

Tilemap Collider 2D 를 사용할 경우 가끔가다 평지에서 캐릭터의 velocity 가 0이 아닌데도 멈추는 현상이 있는데요 캐릭터의 rigidbody contacts 값이 4일 때는 발생 안하고 6일 때, 그리고 속도가 느릴 때만 발생하는 것으로 보아 타일 사이에 껴서 못 움직이는 현상 같은데.. Box Collider 2D 를 사용하면 contacts 값이 항상 2로 유지되면서 이 현상이 없어지긴 하지만 근본적인 해결책은 아닌 것 같아서요 혹시 Tilemap Collider 2D 를 사용하면서 문제를 해결하는 방법이 있을까요? 사실 contacts 가 6이 된다고 못 움직이는 것도 이해가 안됩니다.. 그냥 타일 3개와 닿아 있다는 뜻 아닌가요?

  • C#
  • unity
  • collider
  • .csv
  • json-parsing
신지훈 댓글 1 좋아요 1 조회수 198

Room 처리 관련 질문

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

Room 관련해서 처리를 할 때 Room 관련 함수들이 다 clientsession을 매개변수로 하여 실행하게 되는데 그렇다면 GameRoom room = clinetSession.Room ; room.Push( () => room.Broadcast(clientSession, chatPacket.chat ) ); 식으로 멤버변수를 선언해서 하지 않고 Program.Room.Push( () => Program.Room.Broadcast(clientSession, chatPacket.chat ) ); 으로 바꿔도 될 것 같은데 이렇게 하면 생기는 문제점이 있나요? Program.Room은 따로 null로 바꿔주는 부분도 없는 것 같아서요

  • C#
  • unity
  • 네트워크
동혁 댓글 1 좋아요 0 조회수 144

맵 이동 방식

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)

진행하신 프로젝트는 2d지만 3d 캐릭터를 이용하여 click to move 방식으로 바꿨습니다. 똑같이 길찾기 알고리즘을 사용해 경로를 알아내어 해당 경로로 이동하게 하였습니다. 하지만 cell 방식으로 움직이다 보니 움직임이 너무 딱딱합니다. 보통 3d mmorpg에서는 부드럽잖아요? 일단 단순히 생각했을 때 딱딱한 움직임은 회전속도 없이 목표하는 방향으로 한순간에 방향전환이 가능케 해서 그랬다고 생각했습니다. 하지만 목표 방향을 향해 회전속도를 고려하게 되는순간 목표점을 원의 중심으로 그 반경을 무한히 돌게 됩니다. 어떤식으로 해야 목표지점 까지 장애물을 피해 부드럽게 갈 수 있을까요? 검색 키워드는 어떤식으로 쳐야 할까요? 또 2x4의 행렬이 있다고 쳤을 때 (0,0)에서 (1,3)으로 가려할 때 cell 이동 방식이라면 (0,0) -> (1,0) -> (1,1) -> (1,2) -> (1,3) 으로 가게되는데 보통의 게임은 (0,0) -> (1,3)으로 바로 이동하잖아요? 이 바로 이동하는 방식도 cell 이동방식으로 구현하는건가요...?

  • C#
  • unity
carrotcookie 댓글 0 좋아요 0 조회수 159

섹션 9 상점 UI Layer 수정 앞부분이 잘린건가요?

해결됨

[Unity] 함께 만들어가는 방치형 게임 개발

상당히 많은 부분이 진행된거같은데 제가 뭔가 놓친게 있는건지.. 인프런 오류인지 아니면 개인적으로 작업하라고 빼놓으신건지 여쭤봅니다.

  • C#
  • unity
  • firebase
  • 게임기획
  • json-parsing
Dart 댓글 2 좋아요 0 조회수 158

세션5 게임 셋팅 팝업 창 관련(unity6)

해결됨

유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지

안녕하세요. 세션5의 게임 셋팅 팝업창관련하여 질문드립니다. 처음 unity 설정을 할 때 unity6 universe 2d로 템플릿을 만드는 바람에 camera 설정이 꼬인 것 같습니다. 셋팅 버튼을 눌러도 셋팅 UI가 뜨지 않고 Rendering에서 priority 숫자를 높여주어야지 UI가 보입니다. 하지만 close 버튼을 누르면 로비창으로 다시가지 않고 빈화면으로 보입니다. 여러 셋팅 값들을 바꾸어도 해결되지않아 질문들립니다. 아예 처음부터 2022버젼으로 새로 해야할까요?

  • C#
  • unity
  • 객체지향
personal account 댓글 3 좋아요 0 조회수 243

랜덤 매칭 대기시간 연장

해결됨

[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스

로비 생성 강의의 33분경에 로비가 오랜 시간 방치되면 그 방으로 못 들어 가는 것을 확인했습니다. 하지만 강의 이후에 테스트를 해본 결과 꽤 짧은 시간이 경과했어도 이게 서버가 새로 만들어집니다.. 거의 동시에 (3~4초정도 까지) 눌러야 큐가 잡히게 됩니다.. 서버 생성 후 유효 기간을 늘릴 수 있는 방법에 대해 알고 싶습니다.

  • C#
  • unity
  • 게임기획
  • multiplayer
  • game-programming
오태양 댓글 2 좋아요 0 조회수 188

wpf 응용 질문

미해결

[C#/.NET 8.0]어서와, Blazor Server는 처음이지?

blazor 강의를 통해 web page에 Db 전시하는걸보고 혹시 현재 .net 4.7.2프레임워크를 사용 중인데 wpf를 통해서 로컬 host에도 이와같이 Db를 전시할 수 있을까요?

  • C#
  • postgresql
  • .net
  • blazor
phmin 댓글 1 좋아요 0 조회수 96

영웅 소환 오류

해결됨

[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스

안녕하세요. Host는 정상적으로 작동이 됩니다. Client에서는 Host와 Client에서 생성한 영웅 모두 아래 가운데에 소환이 됩니다. 그리고 Client측을 보면 index가 어떤 이유에서인지 모두 -1이 나와 히어로 홀더가 모두 아래쪽 가운데에 위치하고 있습니다.

  • C#
  • unity
  • 게임기획
  • multiplayer
  • game-programming
양승근 댓글 3 좋아요 0 조회수 201

EquipmentData 관련해서 질문드립니다

미해결

[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작

EquipmentData에서 보면 방어구와 무기가 부여하는 능력치의 종류가 다른데 이 둘을 상속해서 추가 분류하지 않고 그냥 해당 변수를 0으로 처리해서 하셨더라구요 이런 방식으로 다른 부분에서도 처리하신 것 같은데 상속을 받아서 불필요한 변수가 뜨게 하지 않는 것보다 이러한 방식이 더 처리하기 편하기 때문에 이렇게 구현하신걸까요?

  • C#
  • unity
  • object-pooling
황보민 댓글 1 좋아요 0 조회수 136

배열

미해결

아임코딩의 C# 기초 강의

int[] number = new int[] {10, 20, 30} 이렇게 선언하고 초기화 하면 number의 0번째 인덱스에 10이 들어가는건가요? 그리고 만약 10이 number의 0번째 인덱스에 들어간다면, int[]number = {10,20,30} 이렇게 선언해도 되는데 굳이 new int[] 사용해서 초기화하는 경우에 대해 궁금합니다. 그리고 선언과 초기화에 따른 메모리 동작 원리에 대해서도 궁금합니다!

  • C#
  • 객체지향
동그리 댓글 0 좋아요 0 조회수 74

인기 태그

인프런 TOP Writers

주간 인기글