inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

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

여기까지

미해결

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

session#3 까지는 어찌어찌 따라온것같은데 #4에서 어질어질 해졌습니다. 그냥 이해는 못하고 따라 치고 있습니다..ㅠ 이럴 때는 그냥 끝까지 듣고 복습하는게 좋을까요? 이금 복습하고(처음부터?) 이해하고 다음 수업을 듣는게 좋을까요?? (_ㅇ_)

  • C#
  • unity
  • network
장재범 댓글 1 좋아요 1 조회수 406

3D서버 만들 때 질문입니다

미해결

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

복학 전에 개인 작업으로 FPS게임서버를 만들고 있습니다. 구현된 것들: - 신규 유저 접속 시 기존 유저 데이터 전송, 기존 유저에게 신규 유저 스폰 전송 - 키보드 입력(Vertical, Horizontal)을 하나의 Vector3에 저장하여 이전 값과 다를 경우 패킷을 전송 ( 데드레커닝이 맞는진 모르겠음) - 카메라 회전 값을 각 클라이언트에서 0.25초 단위로 동기화 패킷 전송 ( 회전값은 서버에서 검증이 필요없을 거라 생각해서 검증 없이 Echo ) 위에 적은 대로 위의 기능은 문제없이 잘 작동하지만 이동 동기화에 대해서 문제가 심각합니다.... 데드레커닝처럼 이전값과 다를 때만 패킷을 보내는데, 상대 클라이언트는 회전값 동기화가 0.25 + (내RTT/2 + 상대RTT/2)이상이라 이동패킷이 더 빠르게 가버리면 위치값에 대한 데이터 일관성이 깨집니다. 그래서 추가로 1초 단위로 현재 위치를 서버에 전송합니다. 서버는 새로운 위치값을 받고 자신이 갖고 있던 해당 플레이어의 위치값 ( 서버 내에서도 이동방향, 회전값, RTT/2, 오차범위를 기준으로 위치값을 0.25초 단위로 업데이트함) 과 비교하여 이 값이 정상적인 데이터인지 검증합니다. 만약 결과가 정상적이라면 Broadcast, 비정상적이라면 Leave로 구현했습니다. 그런데 문제는 서버에서 검증하는 시간 + 내 RTT / 2 + 상대 RTT / 2 차이 때문에 데드레커닝으로 예측하더라도 계속 이전 위치로 돌아가는 현상이 발생했습니다. 데드레커닝을 포기하자니 너무 느린 반응때문에 FPS에 적합하지 않은 것 같고, 서버 검증을 포기하자니 에디터에 Inspector에서 위치 이동만 해도 핵처럼 보였습니다. FPS에서는 검증을 어떻게 하는게 맞을까요?

  • fps
  • network
  • 데드레커닝
  • C#
  • 서버검증
  • unity
댓글 1 좋아요 0 조회수 809

이동 패킷 동기화

미해결

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

안녕하세요 이동패킷 동기화 관련해서 여쭤볼려고 합니다. 다른 사람들 질문에 답하신것 처럼 이동패킷은 보통 1초에 4번 보낸다 라고 되어 있더라구요. 여기서 4번 보낸다 라는 뜻은 4강 서버 강의 후반에서 배운것처럼 Server에서 JobTimer에 pendingList에 250ms 만큼 모아놓고 그리고 보낸다라는 뜻인가요?? 즉 Client에서는 키 입력을 받게 되면 실시간으로 Server에 보내지만 반면에 Server쪽에서는 같은 방 안에 있는 다른 플레이어한테 BroadCast를 실시간으로 해주는게 아닌 0.250초 만큼 쌓아 놓은 패킷을 모아서 보낸다는 뜻인가요?? 또는 클라이언트에서 아예 0.250초마다 보낸다는 뜻인지 잘 모르겠어요...

  • C#
  • unity
LEETO 댓글 1 좋아요 0 조회수 717

유저 간 패킷전송의 평등성? 에 대한 질문입니다.

미해결

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

온라인 게임을 하다보면 pc의 성능이 안좋거나 인터넷 환경이 불안정한 경우 렉이 걸려 해당 유저의 캐릭터가 멈추는 경우를 봤습니다. 이는 아마도 서버와 패킷을 전송하는 과정에서 pc성능의 문제로 패킷을 소화하지 못하거나 인터넷이 끊겨 패킷을 제때 전달받지 못해서 발생하는 문제라고 생각합니다. 그렇다면 반대의 경우 pc 성능이나 인터넷 환경이 타유저에 비해 압도적으로 뛰어난 경우는 타 유저에 비해 보다 많은 패킷을 주고 받을 수 있을 거라 생각합니다. 그럴 경우 타인보다 더 많은 이동, 공격을 하는 등 유저 간 벨런스에 문제가 생길 것 같고 그를 방지하기 위해 패킷 전송에 있어 일종의 상한선을 걸어야 하지 않을까 라는 생각을 합니다. 마치 프레임 제한을 거는 것처럼요. 이게 맞다면 제 개인적인 판단으로는 그러한 한 번에 전송할 수 있는 패킷의 양, 전송대기 시간 등을 클라이언트 쪽에서 제한하는 쪽으로 코드를 짜야하는 게 맞다고 생각이 드는데 이런 부분을 클라쪽에서 관리를 해야할까요? 아니면 서버 쪽에서 관리를 해줘야 할까요? -- 번외의 질문입니다. 롤의 경우 렉이 걸리는 유저는 혼자 렉이 걸리고 심할 경우 게임에서 나가지는 식인 반면에 닌텐도의 슈퍼마리오메이커2는 유저대전에서 한 명이 렉이 걸리면 전원이 렉이 걸리는 방식으로 알고 있습니다. 게임을 개발하는 개발자로서 마리오 방식보다는 롤의 방식이 유저에게 좀 더 긍정적인 평가를 받을 수 있을 거라 생각하는데 게임사 측에서 마리오 방식을 택하는 이유가 있을까요? 늘 좋은 강의 감사합니다.^^

  • unity
  • network
  • C#
강동훈 댓글 1 좋아요 0 조회수 355

이동 동기화 부분 질문있습니다

미해결

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

며칠째 여러방법으로 시도를 해보아도 안되는 부분이 많습니다..ㅠㅠㅠ 혼자 간단한 3D게임을 만들면서 공부중입니다. 접속하는 부분까지는 잘 됩니다. Protocol 에서는 Pox. Poy, Poz를 float로 변경한 후 조이스틱 입력을 받을 boolean을 추가해줬습니다. 이후 클라 프로젝트 쪽에서 UI_button이라는 스크립트 파일을 만들어서 UI_Base의 BindEvent를 통하여 조이스틱을 조작하여 조이스틱의 Vector2의 값을 MyPlayercontroller의 SetMyPlayerMoveDir이라는 프로퍼티로 set안에서 설정후 get부분에서는 Vector3의 값을 내벝어 주게 하였습니다. 그리고 나서 isInputJoyStick이 true일 경우 이렇게 State를 변경해 주었고 UpdateMoving일 경우에는 IsInputJoyStick이 false일 경우 State를 변경하도록 하였습니다. Move함수의 인자로는 아까 MyPlayerController의 프로퍼티인 SetMyPlayerMove을 받아서 transform.forward랑 포지션을 움지기게 한뒤, movePacket을 만들어서 PosInfo를 Send 해주는데 동기화가 안됩니다. 현재 서버의 로그를 보면 서버를 킨 후 클라에서 조이스틱을 클릭하고 이리저리 움직이면 최초의 드래그 한 값만이 이런식으로 계속 보내 지는거같습니다. 가령 같은 값으로 패킷을 보낸다고해도 다른클라에서는 제 플레이어를 봤을 때 뚝뚝 끊기는것 처럼 보여야 하는데 접속만 되고 동기화가 통 되질 않습니다..

  • C#
  • unity
starkshn 댓글 1 좋아요 0 조회수 602

미션 클리어 문의

미해결

[유니티 레벨 업!] 모듈식으로 개발하는 퀘스트&업적 시스템

선생님 첫번째 door에 가는 미션을 진행중인데 Second door에 가도 미션이 클리어되버리고 다음 미션인 두번째 키를 얻으라는 미션이 출력됩니다 ㅠ

  • unity
댓글 1 좋아요 0 조회수 314

UI 자동화 #1 Bind()함수 질문입니다

해결됨

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

UI 자동화 #1 강의를 보다 Bind() 함수가 이해가 잘 안되어서 질문드립니다. enum ‘Buttons’는 Button을 컴포넌트로 가진 GameObject들의 목록이다. Bind()는 이 Buttons의 Type를 넘겨받아서 Dictionary ‘_objects’에 Key: 해당 컴포넌트 종류 Value: 해당 컴포넌트를 가진 GameObject들의 배열 형태로 맵핑해준다. Bind()는 나의 자식들 중, 해당 컴포넌트를 가진 GameObject들을 찾아주는 역할을 한다. 라고 이해하면 되는 걸까요?

  • unity
  • C#
king 댓글 1 좋아요 0 조회수 265

매니저 구현 부분 질문이 있습니다.

미해결

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

인풋 매니저나 리소스 매니저 등등 여러 매니저를 구현하실 때 도통 이해가 잘 되지 않습니다... 개념 이해하지 못하고 무작정 클론 코딩만 하고 있는데, 일단은 넘어가도 괜찮을까요?

  • unity
  • C#
댓글 1 좋아요 0 조회수 286

UI_Inven에서 Bind시 오류가 발생합니다

해결됨

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

UI_Inven에서 Bind<GameObject>(typeof(GameObjects));를 할 때 오류가 떠서 breakpoint를 잡아보니 이 부분의 foreach문 에서 오류가 발생합니다 ArgumentException: GetComponent requires that the requested component 'GameObject' derives from MonoBehaviour or Component or is an interface. UnityEngine.GameObject.GetComponentsInChildren[T] (System.Boolean includeInactive) (at <4a31731933e0419ca5a995305014ad37>:0) UnityEngine.GameObject.GetComponentsInChildren[T] () (at <4a31731933e0419ca5a995305014ad37>:0) Util.FindChild[T] (UnityEngine.GameObject go, System.String name, System.Boolean recursive) (at Assets/Scripts/Utils/Util.cs:43) UI_Base.Bind[T] (System.Type type) (at Assets/Scripts/UI/UI_Base.cs:23) UI_Inven.Init () (at Assets/Scripts/UI/PopUp/UI_Inven.cs:21) UI_Inven.Start () (at Assets/Scripts/UI/PopUp/UI_Inven.cs:14) Bind할 때 GameObject가 아닌 Transform으로 Bind를 해보니 오류 없이 정상적으로 작동했습니다 해결은 했지만 강의에서는 GameObject를 받아서 잘 되었는데 저는 안 되는 건지 궁금해서 질문을 남겨봤습니다.. 강의랑 버젼이 달라서 그런 것인가요??

  • UI_Inven
  • unity
  • C#
1O1D 댓글 1 좋아요 0 조회수 1380

강의 관련 질문드립니다!

미해결

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

안녕하세요! 이제 막 파트3을 입문하려고 하는데 이전 파트2가 너무 어려워서 질문드립니다... 파트2를 수강하며 거의 무슨 내용인지도 모르고 클론 코딩만 한 거 같습니다ㅠㅠ 혹시 파트2를 완전히 숙지하지 못한 상태에서 파트3을 듣기에는 무리가 있는지 싶어 여쭈어봅니다!

  • unity
  • C#
댓글 1 좋아요 0 조회수 194

Func<Session> sessionFactory 사용에대해서 궁금합니다

해결됨

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

Func가 리턴값이 하나인 함수를 캡슐화한다고 공식문서에서 찾아봤는데요 함수를 캡슐화한다는게 함수에서 매개변수로써 사용한다고 생각하면 될까요?

  • unity
  • network
  • C#
jayLim 댓글 1 좋아요 0 조회수 357

몬스터 위치 싱크

미해결

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

안녕하세요! 강의 내용과는 별개로 실무에서 몬스터 위치 싱크는 어떻게 이뤄지는지 궁금합니다. 플레이어의 위치는 클라에서 key/mouse input을 받아 서버로 패킷을 보낸 뒤 서버에서 다른 클라이언트들에게 보내서 위치를 싱킹한다고 한다면 몬스터 같은 경우에 아직 공격대상이 없어서 어슬렁 거리는 경우라면 서버에서 tick을 돌면서 좌표(position)를 변경해주나요?? 이 경우 맵이 평면이 아닌 울퉁불퉁한 맵이라면 몬스터의 좌표 계산이 서버사이드 물리엔진 없이는 구현이 힘들 것 같은데 어떻게 구현하는지 궁금하네요ㅠㅠ

  • unity
  • C#
Sam Lee 댓글 2 좋아요 0 조회수 402

Grid 아래에 생성된 Node의 배치에 관한 질문입니다.

해결됨

따라하면서 배우는 고박사의 유니티 하이퍼캐주얼게임 시리즈 02

강사님께서 하신대로 Constraint를 flexible로 했는데 일렬로 정렬이 되어버렸습니다. 전부 똑같이 한 것 같은데 왜 이렇게 될까요? flixble 대신에 컬럼을 지정하면 똑같은 모양으로 만들 수 있다는 것은 알고 있지만 이유를 알고 싶습니다. => 찾았습니다. 전체확대를 안해서 그런거였네요

  • C#
  • unity
코리니 댓글 0 좋아요 1 조회수 333

Search로직의 unity navmesh 와 A*알고리즘 사용에 대한 궁금증

미해결

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

안녕하세요. 선생님 강의에 많은 도움을 얻고 있는 학생입니다. 다름이 아니라 제가 이전에 3D로 적 캐릭터 구현을 할때 unity navmesh로 target을 찾았던 경험이 있습니다. 이번 강의도 A*알고리즘을 기반으로 만들어진 unity navmesh를 활용할 줄 알았습니다. 하지만 직접 구현한 A*알고리즘을 사용하는것을 보고 현업에서는 unity navmesh를 사용을 안하는지에 대한 궁금증이 생겨서 이렇게 질문을 남깁니다. 또 현업에서 어떠한 경우에 navmesh를 사용하고, 직접 길찾기 알고리즘을 사용하는지 궁금합니다.

  • unity
  • C#
swahn 댓글 1 좋아요 0 조회수 642

3D 멀티게임 조언

미해결

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

안녕하세요. 파트7을 다 끝내고 복습겸해서 파트4의 코드를 베이스로 삼아 간단한 3D 멀티플레이 게임을 만들어 보려고 하는데요 2D에서는 타일맵을 텍스트파일로 뽑아와서 플레이어 등이 갈 수 있는지 없는지를 0과 1의 구분으로 판단할 수 있었지만, 3D로 충돌처리를 해보려고 하니 맵을 어떻게 뽑아오고, 3D끼리는 어떻게 해야할지 모르겠습니다 ㅠ 구현해보고 싶은건 1. 플레이어를 원기둥으로 만들고 플레이어들끼리 서로 충돌해서 겹치지 못하도록 구현 2. 맵에 존재하는 건물(Box) 등 장애물 정보를 서버가 참조할 수 있도록 가지고 있게 하여 이동 패킷을 받고 해당 좌표에 갈 수 있는지 여부를 판단 일단 3D 맵은 어떻게 뽑아올 것이며, 서버 코드에서 3D 물체끼리 충돌 처리를 어떻게 해야할 것인지가 문제인데 이 부분은 어떻게 구현을 해야할지 조언 부탁드립니다 ㅠ

  • unity
  • C#
bae5445 댓글 1 좋아요 2 조회수 493

안녕하세요. 질문드립니다.

미해결

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

안녕하세요. 강의 내용 중 몬스터 ai 처리 중 update에 tickcount 사용하여 시간 체크를 하는 로직을 jobtimer로 변경하였는데요. 개인적인 생각으로는 jobtimer로 변경하여도 결과적으로는 호출 주기가 길어졌을 뿐 시간을 체크해서 처리하는 방식은 그대로라고 생각됩니다. jobtimer로 update하는 이유는 실행횟수를 줄이기 위함이라고 이해해도 될까요?

  • C#
  • unity
댓글 1 좋아요 0 조회수 268

여기 에서 이후에서 궁금 한것이 많아서 질문 드려요

미해결

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

1. 이동 등등 까지 해서 너무 좋은거같아요 이 이후에는 패킷 추가 하고 하는 방식으로 무기 선택 공격 피격 같은건서버에서 players list 에서 좌표 가지고 와서 피격 처리후 클라로 보내주는건가요? 아니면 클라에서 나 맞았어 라고 서버로 보내서 서버에선 Broadcast만 해주는건가요 ? 2. 또 강의 중에 들었던 프로토콜 버퍼 나 플랫 버퍼 같은 라이브러리를 이용해서 만들수도 있다고 하셧는데 지금 코드에서 수정 해서 만들어 봐도 될까요? 3. 지금은 서버 이긴한데 자체 컴퓨터 안에서만 돌아가는거 같아요. 노트북이나 쓰고있는 pc ip를 그냥 넣어서 다른 pc에서 접속으로 해도 될까요 수정이 많이 필요한가요?? 따로 강의는 없는거같아서 혼자 해보려고 해요.

  • C#
  • network
  • unity
ᄋᄇᄋ 댓글 1 좋아요 0 조회수 351

벡터 질문 드립니다.

미해결

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

음...벡터라는게 방향과 크기?로 알고 있는데 두 점 사이에서 나의 위치를 기준으로 얼마 만큼의 거리를 이동하려고 할 때 항상 노멀라이즈로 단위벡터로 만들어 주는 이유가 거리만 알고 있기 때문에 매그니튜드로 거리만을 구해준 다음에 단위벡터로 만들어서 방향만을 명시해주고? 시간과 속력을 곱해줘서 가고 싶은 목적지로 가는?? 걸로 이해 해도 괜찮을까요? 벡터 너무 어렵네요 ㅜ

  • C#
  • unity
qjawns332 댓글 1 좋아요 0 조회수 444

안녕하세요 ui 직군에서 일하고 있는 수강생인데요

미해결

[실전 게임 코드 리뷰] 유니티 클리커 게임

이제 1년을 채운 아트 ui직군 입니다 회사 내부 ui툴을 이용해 주로 작업을 진행하였고 몇몇 아이콘들을 담당했었습니다 추후 유니티를 사용하는 회사에서 일하고 싶은 마음이 있는데 아직 유니티를 현업에서 사용해본적은 없어서 저연차 인 ui 직군에게 요구되는 소양이 어떻게 될까요? 혹은 어떤겄들을 익히면 도움이 될까요 지금 회사에서는 너무 내부툴에만 익숙해지는 느낌이 강해서 공부를 하려 합니다

  • unity
댓글 1 좋아요 0 조회수 469

안녕하세요

미해결

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

안녕하세요 너무 좋은 강의 감사합니다. 빌드를 자동화해서 자동 실행되게 하는데 혹시 안드로이드로 빌드해서 apk를 자동으로(nox로) 실행되게 할 수 있나요?? BuildOption.None으로 할때는 잘 빌드 되지만 자동 실행이 안되고... 아래처럼 BuildOptions.AutoRunPlayer 하면 Device가 연결 되어 있지 않다는 팝업 창이 뜨네요. 혹시 안드로이드 또한 바로바로 디버깅 하고 자동 실행되서 녹스로 확인할 수 있는 방법이 있을까요?? BuildPipeline.BuildPlayer(GetScenePaths(), "E:/Android_APK/" + GetProjectName() + i.ToString() + "/" + GetProjectName() + i.ToString() + ".apk", BuildTarget.Android, BuildOptions.AutoRunPlayer);

  • unity
  • C#
LEETO 댓글 2 좋아요 0 조회수 291

인기 태그

인프런 TOP Writers

주간 인기글