월 17,600원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
3D 위치 동기화에 대한 질문
안녕하세요. 지금 파트 9까지 전부 수강하고 3D 게임을 제작하고 있습니다.현재 목표는 마우스로 우클릭를 하면 해당 좌표로 플레이어를 이동하는 것입니다.질문은 크게 두가지입니다. 현재는 클라이언트에서 마우스를 우클릭하면 Unity에서 제공하는 NavMesh를 통해 이동하고 있습니다. 그런데 서버에선Unity에서 제공하는 기능을 사용할 수 없기 때문에 따로 길 찾기 연산을 해야 할 것 같은데 이 부분이 감이 안 잡힙니다...서버에서 길 찾기를 어떤 방식으로 해야할까요?클라에서 추출된 NavMesh를 서버쪽에서는 활용할 수 없을까요?? 가령 SharpNav등을 통해서요!무지한 질문을 많이 하는데 항상 성심껏 대답해주셔서 감사합니다!
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
PacketHandler.cs의 PlayerInfo info 변수 질문
PlayerInfo info 변수를 어떻게 쓰는지 모르겠습니다.밑의 코드에서 쓰이지 않았고 달리 사용하는 부분이 없어보이는데아니면 위의 코드만으로 변화하는 부분이 있는건지 잘모르겠습니다. 밑의 코드 - 두 번째 주석 밑의 코드들위의 코드 - 첫 번째 주석 밑의 코드들
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
MMO 컨텐츠 구현의 MapTool에서 Util클래스 정보
이전 강의를 구매를 안해서 그런데, 만들어둔 Util클래스에 대한 코드는 어디서 확인할 수 있나요? 강의자료탭이 안보여서요.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
GameRoom 질문드립니다.
안녕하세요. 강의 잘듣고있습니다.! GameRoom을 하나의 스레드로 jobqueue를 사용해서 공유자원을 관리 하면 lock에서는 자유롭지만 하나의 스레드인 만큼 많은 처리를 해야할 경우 딜레이가 생길수도 있을거라고 생각하는데 lock을 타이트하게 거는 방법보다 하나의 스레드에서 처리하는게 속도가 더 빠른가요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
3D fps 제작 중 질문이 있습니다.
모든 계산은 서버에서 하고실제로 클라이언트는 보여주는 역할만 한다고 배웠습니다.여기서 궁금한점이 있는데유니티는 collider를 만들어서 충돌처리를 하는데서버는 따로 유니티를 통해 키는것이 아니라서 collider게산이 쉽지 않을 것 같다는 생각이 들었습니다. 총의 충돌판정을 검사할 때 총알의 현재위치와 총알의 이전위치를 이용해서 선을 만든 후 충돌처리를 하려고 하는데 여기서 플레이어의 머리 몸통 다리 팔을 각각 collider로 나누고싶다면 직접 서버에서 머리 몸통 팔 다리 위치와 collider를 구상하고 collider를 직접 구현하고.. Raycast를 직접 구현해서 사용한다충돌 계산 및 유니티 기능 이용을 목적으로 하는 클라이언트를 따로 제작한 후 각 위치에 collider를 직접 생산하고 유니티에 있는 기능을 이용한다.플레이어의 모든 위치는 동기화 되어있을테니 총알을 쏜 당사자의 컴퓨터에서 충돌판단을 한 후 서버로 충돌여부를 전달한다보통 어떤 방식이 맞는건가요? 흔히 실무자들이 말하는 모든 계산을 서버에서 한다는 말이 당장 개개인의 클라이언트에선 collider조차 만들지 않는다는 느낌인건가요? 그리고 만약 점프를 한다면점프에서 계산마다 올라가고 내려가는걸 서버에서 직접 계산한 후 (9.8중력, 이동속도 등..) 각 플레이어에 동기화시켜주는게 맞는걸까요?아니면 각 클라이언트의 Rigidbody를 이용해서 계산된 높이값을 서버로 전달하는게 맞는걸까요? 로컬상 이동 - 서버로 전달 - 동기화로컬상 이동명령 - 서버에서 이동계산 - 동기화 및 블랜딩 이 강의에선 2번케이스 같은데 3d게임은 1번이 더 나은 것 같기도 하고 해서 질문드립니다.
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
이 강의의 완성본을 커스텀하면 포폴 메인 수준이 가능할까요?
안녕하세요? 오늘은 양해를 구하면서 조금 모호한 질문을 들고 왔습니다. 제목대로 완성본을 커스텀하면 메인 포폴로 내세울 수 있을정도인지 궁금합니다.제가 수강한 강의는 C# Part4. 서버와 Part7. 유니티 연동 입니다. 물론 커스텀 과정에서멀티스레드 이해TCP 통신 과정 이해클라이언트 <--> 서버 간 패킷 송수신 및 로직 이해은 어느 정도 되었다고 자신하고 있고, 저의 주요 변경 사항은Zone 단위 개념 삭제Zone 개념 삭제에 따른 모든 방향 이동 및 모든 방향 투사체 발사이동_Packet / 발사_Packet 등의 결정 주체 변경- ex) 강의에서 결정 주체가 클라이언트였으면, 저는 서버가 결정하도록 변경탑다운 슈팅 게임 방식의 배틀 로얄 컨셉프로토타입 수준의 완성도 (아래 사진)이 정도면 포폴 메인으로 써먹을 수 있을지 조심스럽게 질문 올립니다.. ㅎㅎ답변 미리 감사합니다.
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
ServerCore 일부 복붙하는걸 심볼릭링크로 해도 괜찮을까요?
유니티 측에서 사용자정의 심볼을 넣어서위 사진과 같이 전처리기를 사용해Server측에서는 Console.WriteLineClient측에서는 Debug.Log이 호출되도록 구성하였습니다. 에디터상에서 실행하는것까지는 크게 문제없이 잘 되는 것 같습니다! 이러면 어느쪽에서든 로직 사소하게 변경해도복붙 까먹는 일이 없어 좋아보이는데혹시 퍼블리싱단계나 추후에 크게 문제될 부분이 있을까요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
15:09 GenPackets.bat
15:09초까지 똑같이 따라하고그래서 최신 버전도 protobuf를 받아서 해봤지만아무리 다시 해보고 찾아 보려해도 아무것도 뜨지 않는데 이유를 알 수가 없습니다 ㅠㅠㅠㅠ
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
혹시 게임을 시작할 때 애니메이션이 움직이는거로 시작하는데
22:24의 부분에서부터 말씀해주시는 것 중 루키스님께서 말씀하신것은 2개인거로 사료됩니다.Start에 원하는 애니메이션 플레이 코드 삽입움직일 때 None이 되면 가만히 있는 코드를 역이용하여 사용.이렇게 있는데 잠깐 애니메이터를 만지다가 알게 된 건데 애니메이터의 'Entry' 블록에서 Default state를 IDLE_RIGHT와 같이 원하는 항목으로 지정해도 되더라구요. 혹시 현업에서는 어떻게 이용하는지 궁금합니다.1, 2번처럼 하게 될 때 걱정되는 점은 만약에 도중에 애니메이션 파일 이름을 변경하게 될 때 코드에서 까지 바꿔야 되는 점이 염려스럽습니다.나중에는 애니메이션 파일이 하나 뿐만이 아닐텐데 그것을 일일이 찾기도 어려울 것이라고 판단했습니다.
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
리슨서버(호스트) 질문입니다
안녕하세요, 루키스님.개인 프로젝트를 진행하는 중 리슨서버를 구현해보려고 하는데 몇 가지 궁금한 점이 있습니다.리슨서버를 구현하려면 서버 코드를 모두 클라이언트에 이식하고, 컴포넌트로 관리할 수 있도록 수정해야 하나요?만약 1의 가정이 맞다면, 1을 통해 구현된 서버에서 유니티엔진의 기능들을 사용할 수 있지 않을까 생각이 되는데, 만약 된다면 충돌과 관련된 부분을 처리하는데 활용해도 괜찮을까요?유니티 자체에서도 네트워크를 관리해주는 매니저를 제공하는 것으로 알고있는데, 강의처럼 따로 서버를 구현하는 이유는 역시 성능 때문일까요? 현재 생각 중인 방식이 어몽어스와 유사한데요.중앙 서버에서 방을 생성하는 유저(호스트)들의 ip와 방 정보를 가지고 단순히 방 목록을 관리하며 클라이언트들이 접속할 수 있는 역할만 해주고, 클라이언트가 방에 접속하는 순간부터 모든 처리는 호스트가 하게되는... 구조가 맞을까요? 최근 들어 질문을 자주하게 되는 것 같은데..항상 친절히 답변해주셔서 감사합니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
Tilemap_base에서 맵 크기를 불러올 때
제가 설정한 맵 모양이랑 메모장에 나오는거랑 다르게 좀 더 크게 잡히고 있는데 그 이유를 잘 모르겠습니다Tilemap_Base에 가장 끝부분에 상자를 넣어이런식으로 만든후 tools를 켠 다음 실행을 시키면이렇게 상자가 끝애 나오지만 캐릭터가 있는 앞 칸에서 움직이지 못하게 되는데 왜 그런걸까요
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
3D의 경우 맵 정보
안녕하세요! 좋은 강의 감사합니다!3D 게임의 경우도 마찬가지로 Map에 대한 정보를 서버에서 가지고 있어야 할 것 같다는 생각이 듭니다.그런데 2D의 같은 경우는 좌표를 통해서 저장할 수 있었지만 3D는 어떻게 Map의 정보를 저장하고 관리할 수 있을까요??구체적인 방법이 떠오르지 않아서 질문 글 납깁니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
점프가 동기화가 되지 않습니다..
안녕하세요! 루키스님 강의를 토대로 2D 플랫포머 형태의 멀티플레이어 게임을 만들어보고 있습니다! 항상 감사합니다. 현재 제가 액션들을 구현하고 동기화를 해보고 있는데,걷기, 뛰기, 구르기까지는 동기화가 잘 되는데 점프가 동기화가 되질 않습니다.. 점프는 Rigidbody2D의 AddForce를 사용하여 작동되고,다른 이동 액션들은 루키스님이 보여주신 방식처럼 다음 프레임의 transform.position을 계산하여 PosInfo에 넣어 패킷을 전송하고 있는데요. 점프는 우선 클라이언트에서 AddForce를 통해 점프를 먼저 한 뒤,현재 위치를 PosInfo에 넣어 패킷을 보내는 방식을 써보았습니다..그런데 다른 빌드의 화면에서 볼 때, 점프 애니메이션만 작동하고 실질적인 점프는 작동하질 않습니다. 디버깅 해보았을 때, 클라이언트 -> 서버로 패킷을 보낼 경우에는 패킷이 정상적으로 송신되는 것으로 보이고,서버 -> 클라이언트로 패킷을 보내는 경우에도 정상적으로 송신이 되는 것 같은데,클라이언트에서 서버에서 받은 패킷을 디버깅 하는 방법을 모르겠습니다.. 좀 오랜시간 붙잡고 있던 문제라 장황하게 늘어놓아 버렸는데, 궁금한 점은 아래와 같습니다.Q. Rigidbody를 사용한 물리 작용(점프)을 패킷으로 보내기 위해서 제가 사용한 방법이 틀린걸까요?(정말 될 것 같은데 왜 안되는지 모르겠네요..)
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
이동 동기화가 너무 어렵습니다..
안녕하세요 루키스님이번 강의 보고 열심히 따라해봤는데 이상하게 똑같이 동작을 안하네요,, 지금 10시간 넘게 강사님의 코드 차이점을 찾고 있는데 못찾았습니다..혹시 몰라서 코드를 복사해서 직접 갖다 붙여도 비슷한 상황이 나오게 됩니다. 물론 강사님과의 코드와 간소한 차이가 있지만 로직틀은 벗어나지 않았습니다. 그나마 차이를 찾자면 유니티 에디터 버전 차이인것 같은데강사님꺼는 2019.3.15f 이고 제꺼는 2022.3.16f입니다. 제 코드로 서버를 돌리고 버전 바꾸고 강사님 코드로 클라를 돌렸을 때는 잘 작동했었습니다. 하지만 클라를 제 코드로 하면 이상하게 CellPos는 정상적으로 바뀌고 Object.Find로 확인해서 이동이 막히는것 까지는 정상 처리가 됩니다. PacketHandler 에서 여러번 확인해봤는데 MyPlayer와 Player의 id가 다른 패킷을 받는걸 봤습니다. 패킷의 내용도 예상대로 잘 받고 있는데 이상하게 Player컴포넌트를 들고있는 오브젝트만 MoveToNextPos로 이동하지 않습니다. 혹시 예상되는 부분이 있으실까해서 적어봅니다
- 해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
CanGo()의 검증이 다중인 이유가 있을까요?
루키스님 안녕하세요?본 강의 Hit 판정 #1에서 CanGo()로 플레이어 이동간 검증을 해주셨는데요,GameRoom.cs의 HandleMove()에서 CanGo()를 이미 사용했는데HandleMove()가 ApplyMove()를 호출함으로써 ApplyMove() 내에서 CanGo()를 다시 호출하고 있습니다.코스트낭비지 않을까?하고 의문이 들어 질문 올리게 되었습니다.//GameRoom.cs의 HandleMove() public void HandleMove(Player player, C_Move movePacket) { // ...생략 // CanGo 호출 1 // 다른 좌표로 이동할 경우, 갈 수 있는지 체크 if (movePosInfo.PosX != info.PosInfo.PosX || movePosInfo.PosY != info.PosInfo.PosY) { if (_map.CanGo(new Vector2Int(movePosInfo.PosX, movePosInfo.PosY)) == false) return; } // ...생략 // ApplyMove() 호출함으로써 CanGo 호출2 _map.ApplyMove(player, new Vector2Int(movePosInfo.PosX, movePosInfo.PosY)); // ...생략 } //Map.cs의 ApplyMove() public bool ApplyMove(Player player, Vector2Int dest) { // ...생략 if (CanGo(dest, true) == false) return false; // ... 생략 } 강의 재밌게 듣고 있습니다.미리 답변 감사합니다.수강자 올림.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
서버의 쿨타임 계산 방식이 이해가 가지 않습니다.
루키스님 안녕하세요?본 강의 스킬#2에서스킬 쿨타임은 서버, 클라이언트 둘다 계산을 하는게 맞고,클라이언트는 코루틴 등을 사용해 쿨타임을 계산하는건 이해가 됐습니다. 그런데 제가 이해한게 맞다면,서버에서 쿨타임을 계산하기 위해 CheckUpdateFlag()를 재활용 한다고 하셨습니다. (그 안에 State Info.가 포함되어 있으므로) 그런데 그게 서버가 쿨타임을 계산하는 것과 무슨 상관이 있는지 모르겠습니다.쿨타임 계산이라는 것이 시간 계산에 국한된게 아닌, State 검증을 통해 조건을 확인한다는 말씀일까요? 강의 재밌게 듣고 있습니다미리 답변 감사합니다.수강자 올림
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
재대로 작동하는지 확인 후 공부하려고합니다
마지막 프로젝트를 설치후 서버를 실행하고 유니티에서 실행하면 맵만 나타나고 그외 플레이어나 몬스터는 나타나지 않고있어요 따로 더 설정해야되는부분이있나요?
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
프로토버퍼를 맥에서도 사용할 수 있나요?
지금 사용중인 운영체제가 맥이라 가상머신을 사용해야할지 고민중입니다.
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
학습 커리큘럼 관련 질문
안녕하세요.게임 공부에 입문한 웹 개발자 입니다.관심 있는 분야가 게임서버, unity 쪽 인데unity 강의 3(unity), 4(server), 7(unity + server), 8(entity), 9(mmo) 로 공부하고c++ 강의로 넘어가거나, 유니티 기반 게임을 만들어 봐도 막히는 부분은 없을까요?DB 쪽은 MYSQL 엔진 원리와 트랜잭션, 동시성 문제가 일어나는 이유 등을 알고 고급 쿼리는 좀 공부 해야하고, 웹 쪽은 게임 프로그래밍 코어 공부하는데 크게 지장 없으면 넘어가고 싶은데루키스님 의견이 어떠한지 궁금합니다.(entity는 생산성 때문에 하는게 좋을 것 같아서요.)
- 미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
선생님처럼 이동못할때도 정상적으로 애니메이션이 작동을 안합니다
void UpdateIsMoving() { if (State != Define.CreatureState.Moving && Dir != Define.Dir.None) { Vector3Int destPos = CellPos; State = Define.CreatureState.Moving; switch (Dir) { case Define.Dir.Up: destPos += Vector3Int.up; break; case Define.Dir.Down: destPos += Vector3Int.down; break; case Define.Dir.Left: destPos += Vector3Int.left; break; case Define.Dir.Right: destPos += Vector3Int.right; break; } if (Managers.Map.CanGo(destPos)) { if (Managers.Object.Find(destPos) == null) CellPos = destPos; } } } void UpdatePosition() { if (State != Define.CreatureState.Moving) { return; } Vector3 destPos = Managers.Map.currentGrid.CellToWorld(CellPos) + new Vector3(0.5f, 0.5f, 0); Vector3 moveDir = destPos - transform.position; float dist = moveDir.magnitude; if (dist < _speed * Time.deltaTime) { transform.position = destPos; State = Define.CreatureState.Idle; } else { transform.position += moveDir.normalized * _speed * Time.deltaTime; State = Define.CreatureState.Moving; } } 이동할 수 없는 구역에 가려고할때 애니메이션이 IDLE과 WALK를 번갈아가면서 부들부들거립니다.UpdateIsMoving에서 State를 Moving으로 바꾸더라도 실제 CellPos에는 적용이 안되어있다 보니 State가 곧 바로 IDLE로 바뀌기 때문인것 같은데 어떻게 해결할 수 있을까요?