묻고 답해요
145만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결유니티 머신러닝 에이전트 완전정복 (기초편)
GridWorld, CollectObservations에서 에러 질문입니다.
비슷한 주제로 네번째 글을 올리게 되었습니다. -.-;매번 답변에 항상 감사드립니다.몇몇 실수를 교정한 현재의 현상을 나열해 드립니다. 책 및 github의 스크립트를 따랐을 때(1) 실행 코드 (2)에러 화면동영상 강의 내용을 따랐을 때(1) 실행코드(2) 에러화면null==sensor 를 null!=sensor로 교정하였을 때(답변해주신 글 도움 받음)(1) 실행코드(2) 에러 화면 ※ observation size (6)와 observation size (2)의 인식이 문제인 것 같습니다. 도움 부탁드립니다.
-
미해결C#과 유니티, 실전 게임으로 제대로 시작하기 (저자 직강)
교재 관련 질문
이 강의 교재인 '처음 배우는 C# 프로그래밍'을 e-book으로 출시하실 계획은 없으신가요? 휴대성 때문에 서적보다는 e-book을 선호하는 편이라 출시가 된다면 구매하고 싶습니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
게임 서버의 구조? 및 공부법에 대한 질문입니다.
안녕하세요! 루키스님 강의를 통해 서버를 공부하고 있는 한 대학생입니다.현재 학교에서 게임 서버와 관련된 전공이 따로 있지 않아 혼자 공부하며 졸업작품을 사전에 준비하려고 하는데요.게임에 사용되는 서버가 단순히 클라이언트를 연결해주는 서버 뿐만 아니라, 채팅 서버, 동기화 서버, NPC서버 등등.. 기능에 따라 분할하여 관리하는 경우가 많다고 들었습니다. (실제로 현업에서는 어떻게 관리되는지 모르겠지만 구글에서 찾아본 바로는 이렇게 알고 있습니다.)현재 MMORPG 게임 서버를 만드는 데에 있어서 어떠한 요구사항들이 필요한지 구조를 설계해보고 있는데,사실 현재 질문을 작성한 섹션까지의 강의를 보고 따라하면서도 코드가 잘 와닿지 않습니다.우선 제 생각은 처음부터 끝까지 우선 정독하며 코드를 따라 작성하며 다시 정주행하며 작성했던 코드들 하나하나 뜯어보고자 했는데, 현재 이해되지 않는 부분들을 이해하고 넘어가는게 좋을까요?또한 제가 처음부터 이쪽으로 공부했던 것이 아니라, 전과를 하여 전공지식에 있어서 부족한 점들이 있습니다. 특히 데이터 베이스나 웹에 대한 지식이 아직 없는데, 데이터 베이스를 공부한 뒤 서버를 공부하는 것이 좋을까요?해당 강의에서 알려주시는 서버에 관한 내용들은 위에서 제가 언급한 분할 서버들(채팅, 동기화 등)에서도 모두 활용이 되는 내용들일까요?아니면 전혀 무관하여 부가적인 공부가 필요할까요?클라이언트는 기존에 작게 프로젝트를 해본 경험이 있어 어느정도 익숙해졌다고 생각해 서버를 공부하기 시작한건데요.서버 프로그래밍이 매우 어렵다는 것을 알고 나름 강의를 수강하기 전 이론에 관해서도 어느정도 확립한 뒤 듣고있는데도.... 코드를 봐도 전체적인 흐름조차 잘 파악이 되지 않네요... 정상일까요?아니면 기본기가 부족하여 이해를 못하고 있는 것일까요?목표는 클라이언트 프로그래머이지만, 서버를 알고 클라이언트를 개발하는 것과 모르고 개발하는 것에 큰 차이가 있을 것이라고 생각해 작게라도 MMORPG를 한번 만들어보고자 하고 있는데, 어려운만큼 노력하면 되는건데도 시작점이 같지 않다는 핑계가 머리를 떠나지를 못하네요..아직 부족한 전공지식도 많은데 이런 내용들을 공부해도 괜찮은 걸까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
커맨드 패턴의 이해
커맨드 패턴을 정확히 이해하고 싶은 학생입니다. 강의를 정말 많이 돌려보고 구글링도 해본 결과 저는 다음과 같이 커맨드 패턴을 이해했고 적용해봤습니다.기존의 방식은 클라이언트에서 요청이 들어오면 서버의 쓰레드들이 일을 처리하기 위해 쓰레드들이 락에 의한 대기를 함으로써 대기 시간이 길어져 메모리 낭비가 됐지만커맨드 패턴을 활용하여 클라이언트의 요청을 캡슐화하여 서버에 전해줌으로써 기존에 락에 의해 대기만 하던 쓰레드들이 대기하는 시간이 줄어들게 됩니다.단점으로는 2가지가 있습니다.플레이어의 죽음과 종료가 거의 동시에 일어났다고 가정해보겠습니다. 종료가 됨으로써 플레이어의 room이 null로 밀렸는데 잡큐에서 실행된 죽음 함수에서 플레이어의 room에 관한 정보로 접근하려 하니 null 크래쉬가 나게됩니다. 따라서 null 체크를 꼼꼼히 해줘야 합니다.또 다른 문제는 로직 동작 순서의 불명확함입니다.. 코드의 순서가1번. 잡큐로 밀어넣은 함수 12번. 잡큐와 상관 없는 코드3번. 잡큐로 밀어넣은 함수 2이런 상태에서 로직이 존재한다고 가정할 때큐에 넣은 일이 바로 실행되는 것이 아니기 때문에 1번과 3번이 밀려 2번이 먼저 실행되는 일이 발생될 수도 있습니다. 따라서 이런 문제를 해결하기 위해선 잡큐에 넣는 커맨드 패턴 방식이 아닌 기존의 락으로 잡아가던 방식으로 함수를 사용하는 것이 좋습니다.이 정도로 정리해봤는데 혹시 다른 점 있을까요? 커맨드 패턴 부분의 이해가 정말 안됐어서 질문 드립니다!
-
해결됨유니티 머신러닝 에이전트 완전정복 (기초편)
yaml을 이용한 GAIL 및 BC를 mlagents-learn으로 실행 시 에러
python API 를 이용한 BC는 무사히 잘 작동합니다.재밌네요. ㅎㅎ현재는 제목처럼, yaml에 GAIL 및 BC를 설정해서, 유니티의 mlagents-learn으로 실행하는 하는 것을 시도하고 있습니다.Kart.exe 의 창이 뜨고 잘 진행되는 듯하다가 다음과 같이 커맨트창에 에러를 내놓고 꺼집니다.저의 yaml 파일 내용을 다음과 같습니다.
-
미해결유니티 강좌 [쯔꾸르풍 게임 제작하기]
자료구조도 사용하시나요?
혹시 여기에 자료구조도 포함된 2d겜인가요??
-
해결됨[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작
장비 리스트와 딕셔너리 가 참조하는 객체에 대한 질문이 있어요
안녕하세요! 장비를 획득하면 OwnedEquipments라는 리스트에 추가되고 장비를 착용하면 EquipedEquippments 라는 딕셔너리에 추가가 되는데요, 이때 해당 리스트와 딕셔너리에서는 같은 객체를 참조하고 있는 것으로 이해했습니다.그리고 SaveGame 메서드를 실행시킬때 GameData 클래스에 있는 OwnedEquipments 리스트와EquippedEquipments 딕셔너리를 json으로 직렬화 하고 게임을 끄고 재시작 한 이후 LoadGame 하였을때도 여전히 해당 리스트와 딕셔너리에서 참조하는 객체는 동일한 같은 객체인가요? LoadGame 함수를 살펴보니 게임을 불러올 때 EquipedEquipments 딕셔너리를 새로 선언하고 OwnedEquipments 에서 다시 EquipItem 하여 딕셔너리에 추가해주는 부분을 확인했는데요 만약 LoadGame이후에도 여전히 같은 객체를 참조한다면 없어도 되는 부분이 아닐까 하고 먼저 GPT의 도움을 받아봤는데요 이런 답변을 받았어요. 그런데 이 답변이 신뢰가 안가서 선생님께 질문드립니다! 좋은 주말 되세요!
-
해결됨두고두고 써먹는 유니티 VR
Bomb가 아래로 떨어져요
Bomb 무기를 만드는 수업을 듣는 와중에 Bomb 오브젝트에 XRGrabInteractable 스크립트를 추가하였습니다. XRGrabInteractable 스크립트를 추가해주니까 Rigidbody가 생성되었고 다음 내용에서 BoxCollider를 추가하고 isTrigger를 체크하니 프로젝트를 실행해보니 Bomb오브젝트가 지정된 위치에 있지 않고 아래로 떨어지는데 어떻게 고쳐야 하나요?
-
해결됨유니티 머신러닝 에이전트 완전정복 (기초편)
GridWorld, 유니티에서 실행하면 observation 관련 에러가 뜹니다.
에러 캡쳐기존에 score가 낮게 나온 것도 이것을 해결하지 않고 빌드해서 그런 것 같습니다.저의 GridAgent.cs에서 CollectObservation 함수 부분 캡쳐유니티 내 에이전트의 인스펙터의 설정도움 부탁드립니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
브레이크 포인트를 거는데 그냥 실행됩니다.
중단점이 현재 적중되지 않습니다. 이 문서의 기호가 로드되지 않았습니다.라고 뜨고 브레이크 포인트와 상관없이 그냥 실행됩니다.왜 그런걸까요 ㅠ
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
unitychan Animation
unitychan이 마우스를 클릭해서 움직이면 잘 움직이는데 마우스를 손에서 떼면 벽을 보고 뛰는 모양이 계속 발생합니다. 어디가 잘못된 걸까요 ?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
소켓 SendAsync 예외 발생시 대처방법에 대한 질문입니다
안녕하세요 선생님! 강의 잘 듣고 있습니다유니티 연동하면서 간혹 클라에서 서버로 보내는 과정에서 세션 클래스의 SendAsync 부분이 예외를 발생시켜 pendinglist 를 비워주는 clear 함수를 호출 하지 못해if (_pendingList.Count == 0) RegisterSend();영원히 send가 막히는 경우를 발견했습니다 try { bool pending = _socket.SendAsync(_sendArgs); if (pending == false) OnSendCompleted(null, _sendArgs); } catch (Exception e) { RegisterSend(); // 수정한 부분 Console.WriteLine($"RegisterSend Failed {e}"); } 이렇게 RegisterSend(); 를 다시 호출해서 SendAsync 가 될때까지 시도를 하는 방식으로 고쳤더니 send가 막히는 현상을 없애기는 했습니다만제가 생각하는 이 대처방법의 문제는 sendAsync가 계속 예외를 발생시키면 무한루프를 만들어서 이게 맞는 대처방법인지 의문이 듭니다...
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
a* 비용계산
A*알고리즘이 G는 시작점에서 해당 좌표까지 이동하는데 드는 비용이고 H는 목적지로부터 얼마나 가까운지를 따지는 비용이라고 알고 있었는데맵매니저를 만들 때 G를 왜 0으로 두는지 잘 이해가 안되고 H는 원래 (목적지까지 남은 X 방향의 타일 + Y 방향의 타일)로 계산했었는데 (목적지까지 남은 X 방향의 타일^2 + Y 방향의 타일^2)으로 바뀐건지 잘 이해가 안됩니다ㅠㅠ
-
해결됨유니티 머신러닝 에이전트 완전정복 (기초편)
PPO Parameters에서 normalize 관련 질문입니다.
안녕하세요.개인 프로젝트를 진행하면서 강의를 보면서 많은 도움을 받고 있습니다. 좋은 강의 만들어주셔서 감사합니다.vector observation 입력을 정규화하려면 network settings에 normalize를 true로만 설정하면 되나요?예를 들어 Agent 코드에서 CollectObservation 메소드에 차량의 속도를 아래와 같이 정규화하지 않은 속도만 추가하고 paramater에서 normalize를 true로 설정하면 속도가 자동으로 normalize가 되는지 궁금합니다. public override void CollectObservations(VectorSensor sensor) {sensor.AddObservation(car.velocity);} 감사합니다.
-
미해결
유니티 쿨타임 코루틴활용 질문
플레이어가 여러가지 스킬의 투사체를 소환해 날리는 타입으로 공격합니다.게임 진행 중에 스킬을 획득하고, 스킬을 획득하면 스킬의 Id 값을 매개변수로 활용하여코루틴을 실행합니다. while 문 안에 스킬의 해당 투사체 소환 함수를 실행하고 해당 스킬의 쿨타임만큼 WaitForSeconds 를 실행하고 있습니다.그런데 게임을 진행 중에 일시정지 했을 때, 문제가 생깁니다.처음엔 while문 안에서 만약 일시정지 상태라면 yield return null 로 넘어가는 방식으로작성했습니다. 예를 들면 쿨타임이 3초인 스킬이 있는데 소환하고 1초가 지난 후에, 일시정지가 되었다면 일시정지가 풀린 후에 2초가 지나는게 아닌, 일시정지 상태에서도 시간이 흐릅니다.그래서 일시정지가 풀리면 바로 소환합니다. 일시정지 직전 소환한 오브젝트가 있으니, 중복생성 된 것처럼 연출이 나옵니다. 그래서 소환 실행함수 안에서 일시정지상태라면 return 시켜 소환을 취소하는 방식으로 했습니다. 타이밍에 따라서 소환을 스킵해서 쿨타임이 길어지고, 결국 원하는 연출은 나오지 않더군요ㅠㅠ여러가지 스킬을 굴리다보니 코루틴을 사용했는데, 다른 방식으로 해야 효과적으로 쿨타임을 관리할 수 있을까요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
플레이어가 몬스터를 자꾸 올라타는 현상
플레이어가 몬스터 캡슐콜라이더를 자꾸 올라타는 현상이 생기는데 해결방법이 무엇이있을까요 ? 강의에선 올라타는현상이 없는데 AI navigation을 활용해야하는 부분인가요? ㅜㅠ
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
온라인 게임 서버 운영체제
안녕하세요! 우선 좋은 강의 만들어 주셔서 감사합니다.공부를 하다가 문득 온라인 게임 서버가 보통 어떤 운영체제에서 서비스되는지 궁금해졌습니다.보통 웹 서비스를 리눅스로 많이 운영하다 보니 게임 서버 쪽도 차이가 없을 것으로 생각했는데, 국내에는 윈도우를 많이 사용한다는 이야기가 있더라구요.근데 워낙 오래전 글을 본 것이라 현재도 그러한지 궁금하네요.온라인 게임하면 보통 굵직한 회사로 넥슨과 NC가 있을 것 같은데요. 현업 관계자로서 보셨을 때 두 회사에서 주로 어떤 운영체제로 서비스하는지 자그마한 힌트를 주실 수 있을까 조심스레 여쭤봅니다!
-
해결됨유니티 머신러닝 에이전트 완전정복 (기초편)
GridWorld 가 작동은 잘 되는데, score가 너무 낮게 나와요.
환경(GridWorld.exe)에서 학습하는 모습도 잘 나오고,터미널에서 학습 진행도 잘 되고,tensorboard에서 학습결과 그래프도 잘 나오는데요,정작 학습결과의 내용에서 score가 너무 낮게 나와요.학습이 잘 안 되고 있다는 뜻이겠죠.어디를 손 봐야 좋은 걸까요?DQN, A2C 모두 마찬가지입니다.pytorch 버전이 너무 낮아서 그런가 싶어서 높여줘도 마찬가지고요.(1.6.0 -> 1.12.1)tensorboard의 제 학습 결과 화면입니다.DQN 학습결과A2C 학습결과
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
2022.3.4f1 버전을 사용하는데 네비게이션 기능이 없습니다.
유니티 매뉴얼에 찾아봐도 네비게이션에 대한 안내도 없고2021.3 버전에는 있는것 같은데 (window-AI-Navigation) 2022.3 버전에는 네비게이션이 없는것 같은데 없어진 기능이 맞나요 ? 그래서 레이캐스팅의 레이어마스크를 Wall에서 Default로 다시 원복하고,빌딩의 Mesh Collider와 Unity_Chan의 Capsule Collider 의 충돌로 그냥 활용하였는데 큰 문제는 없겠죠 ?(건물의 벽을타고 올라가는 현상과 건물을 뚫고 지나가는 현상을 모두 수정하기 위함)
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
AddAnimationEvent 관련하여 질문드립니다.
저는 큐브를 선택하든 안하든 애니메이션 이벤트를 생성하면 3:40초 처럼 FunctionFloatIntStringObject가 안뜨고 function만 뜨는데 왜 그런건가요?유니티버전은