묻고 답해요
144만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
강의 일자로부터 꽤 지난거로 보이는데 그대로 수강해도 좋을까요?
이미 결제도 했고 초반부분 듣고있긴 한데 2019년인가 업로드 한거로 보여서요 공부하는데는 지장없는걸까요?
-
미해결유니티 Addressable 을 이용한 패치 시스템 구현
Addressables.CheckForCatalogUpdates()에 대해서 질문있습니다.
Addressables.CheckForCatalogUpdates()의 결과가 0이라서 다운로드 받을 수는 0인데, Addressables.GetDownloadSizeAsync()의 결과는 제대로 에셋의 크기를 반환해줍니다.다운로드 이후에는 Addressables.CheckForCatalogUpdates()는 0, Addressables.GetDownloadSizeAsync()도 0이라서 다운로드는 된거 같은데, Addressables.CheckForCatalogUpdates()가 0으로 표시되는 이유가 뭔가요?윈도우10 유니티 에디터에서 플레이 모드로 했고, 영상을 보면서 로컬 빌드 건너뛰고, 리모트 빌드로 했습니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
콘솔프로그램으로 만든 서버 배포질문
보통 이렇게 콘솔프로그램으로 만든 서버는 어떻게 배포를 해야하나요? bin/Debug의 exe로 서버컴퓨터에서 실행시키지는 않을 것 같은데.... 따로 Setup파일을 만들어서 서버에 배포를 하는 건가요? 따로 Setup파일을 만든다면 어떤 방식으로 하는지도 궁굼합니다.!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
두가지 질문이 있습니다.
●제가 서버의 대한 이해도가 완벽하지 않아, 제 의견이 들어가는 부분엔 문장 앞에 '●' 넣도록하겠습니다. 틀리다면 지적 부탁드리겠습니다. 어제 GroundObject[]를 사용해서 맵충돌은 결국 이동동기화 강의의 맵타일추출을 인용하여 진행하였습니다.내가 가려고하는 방향의 앞타일을 가져와 갈수 있는곳인지 없는 곳인지를 판단하여 캐릭터를 이동하였습니다. 서버에서 체크하여 BroadCast하였습니다.그 결과물입니다. https://youtu.be/tjzA_VzAKb0 ※Map 수정 ※room.HandleMove 수정 해당방법은 괜찮은 방법인지 여부와 영상에 보시면 패킷전송량이 어마어마 합니다. 실제로 Client에서 패킷 전송량을 보자면 누르고 있을 때마다 패킷을 전송하게 되겠죠.(Dir의 _update 의해서 ) ●"현직에 있을때 Photon 서버로 게임을 만든적이 있는데 클라는 최소한의 패킷 전송으로 최대한 많은 결과물을 받아야 한다고 생각하고 있습니다." 고작 내 포지션에서 스피드만큼 거리를 가려고 엄청나게 많은 패킷을 보내고 있습니다. ●또한 이 많은 전송량을 처리하려고 TickRoom을 16ms (60fps)로 설정 하였으니 서버에 좀더 과부화가 오지 않을까 생각합니다. 저렇게 실시간으로 움직여야 하는 방식에서 더 좋은 방법이 있는지 알고싶습니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
receiveBuffer 부분 질문있습니다.
ReceiveBuffer 강의 듣는중 의문이 있어 문의드려요. TCP로 통신을할 경우 커널단에서 패킷 전체가 전송이 완료된후 OnReceive가 일어나는것으로 이해하고 있었는데해당강의 에서는 어플리케이션단에서 전체 패킷이 다 들어왔는지 확인 후 처리를 하는 로직이 들어가는거 같아 혼돈이 오는것 같습니다. 제가 이해한게 잘 못 되었을까요?TCP 단에서 전체 패킷이 다 도착한 후 OnReceive가 일어나는게 맞다면 어플리케이션단에서 다시 한번 확인 후 처리하는 이유가 있을까요? PacketSession에서 마지막에 client에서 데이터를 쓰기위해 sendBuffer에서 사용할 영역을 예약하는 open에 문의 사항이 있습니다.1) 강의대로 따라 하게되면 client에서 open(4096)을 하면 불필요하게 필요이상으로 버퍼를예약해서 실제 사용하지도 않지만 많이 예약하게되 _usedSize보다크게 되면서 계속해서 버퍼를 새로 만드는것으로 보이는데 실제 프로젝트에서는 필요한 사이즈만큼만 예약하게 되나요? 2) snedBuffer.Close() 에서 usedSize가 강의 에서는_usedSize = usedSize로 되어있는데 이러면 계속 같은 버퍼 공간에 덮어 씌어질거같은데_usedSize += usedSize로 되야 할거 같은데 이부분은 제가 잘못 이해 한건지 아니면 오타일까요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
횡스크롤 맵추출 질문입니다.
몇시간을 고민하다가.... 도저히 아이디어가 떠오르지않아 질문드립니다.횡스크롤 2D 포트폴리오 제작중입니다..강의 다르게 바람의 나라 형식의 이동이 아닌 메이플스토리와 같은 이동방식을 선택했습니다.맵은 타일맵으로 만들려고합니다. 여러가지 아이디어는 있는데 이게 긴가민가합니다. 생각해둔 아이디어는 타일맵의 오브젝트 좌표를 하나하나 따와서 Rect로 만들어 DirectX 방식으로 right.x, top.y ,left.x , buttony 좌표로 만들어 GroundObject[] 배열로 담아둡니다. ※ GroundObject1 의 좌표 (TileMap) 최초 캐릭터 생성시 Ground 라는 bool 값을 주어 이것을 True 생성하고 이동 패킷이 올때마다, GroundObject[] 모든 Object를 돌면서 하나라도 True되는곳이 있다면 Ground 의 bool 값은 편하지않고 서버에서 낙하처리를 하지 않는것입니다. 만약 모든 GroundObject[] 타일이 false 값이라면 캐릭터는 낙하하면서 GroundObject[]배열을 순차적으로 돌면서 True값이 있는지 찾는겁니다. 떨어지다가 GroundObject[]에 하나라도 다시 True 변환이 되는 되는 것이 있다면 Ground bool 값을 Ture 반환한후 캐릭터는 낙하를 멈추는 방식을 생각해 봤습니다. 하지만 Direct 나 API 같은경우야 ... Rect 충돌 함수가 있으니 편하다고 하지만은.... 이방법은 필요시 모든 GroundObject를 돌아야하는 시간복잡도 O(n) 최악이 나올수도 있다는 것입니다. ※확실하진 않지만 여러 사람이 동시에 진행했을때 서버 과부화가 걸리지 않을까 생각이 듭니다. 또 하나의 걱정은 저의 짧은 지식으로 저 타일맵 안에 있는 그라운드 오브젝트의 좌표를 유니티에서 추출할수 없다는것이죠. 서론이 길었는데 질문입니다. 가장 걱정인것은 해당방법을 채용 하더라도 서버에 과부화가 오지 않는가?2.정답이 아니더라도 다른 아이디어가 있는지? 입니다.
-
해결됨유니티 Addressable 을 이용한 패치 시스템 구현
앱을 빌드하지 않고 플레이 모드에서 테스트 할수 있나요?
개발이 진행되면서 게임 크기도 커질텐데, 매번 제대로 번들이 다운로드 되는지 확인하려면 앱을 빌드해야 하는 수고를 덜고 싶습니다. 플레이 모드에서 번들 다운로드 테스트는 어떻게 하나요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
메모리가 줄줄 새고 있습니다
안녕하세요 메모리 릭과 관련해서 질문 드립니다비주얼 스튜디오에서 프로그램 실행시키면 진단 도구 창이 뜨고 그 안에 현재 프로세스가 얼마나 메모리 잡아 먹는지 보여주는데 콘솔에 로그 찍으면 메모리 계속 잡아먹으니까 서버와 클라 모두 콘솔에 아무것도 로그를 찍지 않게 빈 상태로 두었는데도 약 30초마다 3~5MB 씩 오릅니다 그래서 강의 자료에 있는 모든 코드를 복붙해서 어떤 로그도 안찍게 살짝 수정 후 실행했더니 결과는 동일하게 조금씩 오르더라구요 이 상태에서 서버는 계속 작동시키고 클라를 끄니까 메모리 릭 현상이 멈추긴 했습니다만이 현상이 선생님 환경에서도 일어나는지 궁금하네요..기본 서버 강의라서 아직 최적화가 덜 돼서 그런건지요..?
-
미해결
유니티 한 씬에 여러 스테이지 표현
안녕하세요 유니티 독학을 한 후 제대로된 개발을 처음 해보는 사람입니다ㅠㅠ 다름이 아니라, 총 20스테이지에 각 스테이지마다 15개의 부가 스테이지를 만들고 싶은데요,, 스테이지마다 씬을 다르게 하려다보니 씬 갯수가 300개가 나올 것 같아서 질문 드립니다.각 스테이지마다 배경 이미지가 변경이 되어 한 스테이지에 나오는 15개의 부가 스테이지는 뒷 배경 변경이 없이 오브젝트만 변경이 될 것 같은데요 이럴 경우에 한 씬에 15개의 부가스테이지를 다 몰아서 표현할 수 있을까요? 배경만 같고, 부가 스테이지마다 클리어 조건은 다릅니다ㅠㅠ만약 가능하다면 혹시 어떻게 표현을 할 수 있을지 방법까지 여쭤봐도 될까요?ㅠㅠ 유니티 책 두권으로 독학을 했는데, 두 권 다 기초 책이라 새로운 씬을 만드는 방법만 알려주네요
-
해결됨[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작
상업적 출시를 목적으로 한 게임에 코드를 재사용해도 되는지 질문드립니다.
안녕하세요.C# 서버 강의와 실전 코드 리뷰 강의들로 공부할 때 많은 도움을 받고 있습니다.아트를 제외한 소스코드 부분을 일부 수정하여 상업적으로 출시할 게임에 재사용해도 되는지 질문드립니다.감사합니다.
-
미해결[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작
[질문] OOP 상속 VS 컴포넌트 방식에 대하여
강의에서 알려주신 것처럼 OOP적인 관점에서 상속을 통해 몬스터-플레이어에 대한 내부 속성(체력, 속도 등등)의 정의와 그에 따른 변화를 함수(데미지처리, UI처리 등등)로 구현하다보면 때때로 모호한 경우가 생겨 고민에 빠진적이 종종 있었습니다.참고하기 위해 인터넷을 통해 다른사람 코드를 보다, 내부 속성들 조차 클래스로 정의 및 컴포넌트화하여 활용하는 것을 보았습니다. 예를들면, OOP에선 플레이어 클래스안에 존재해야하는 것들이 Health, Stamina 등등 클래스로 만들어 붙이는 것을 보았습니다.이런 방식이 처음엔 좀 이질적이었는데, 몇번 보다 보니 정리하기는 좀 난잡해보이지만 의외로 논리적으로 처리하는데 편리하게 느껴졌습니다. 그러다 문득 어떤 방식이 좀더 선호되는지, 해당 방식을 쓰는게 좋을지 궁금하여 질문 올립니다또한, 최근 유니티쪽에서 언급되는 DOTS 같은 경우에 대해 어떻게 생각하시는지, 위의 컴포넌트 방식의 극대화하여 최적화를 추구하는 방식으로 이해하면 되는 것인지 궁금합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요 WriteLock의 Yield부분이 헷갈려 질문 드립니다
public void WriteLock() { int desired = (Thread.CurrentThread.ManagedThreadId << 16) & WRITE_MASK; while (true) { for (int i = 0; i < MAX_SPIN_COUNT; i++) { if (Interlocked.CompareExchange(ref flag, desired, EMPTYFLAG) == EMPTY_FLAG) { return; } } Thread.Yield(); } }이코드에서 MAX_SPIN_COUNT까지 시도 해보고 Thread.Yield()로 다른 쓰레드에게 양보한다고 이해하고 있는데 여기서 다시 while(true)로 인해 또다시 반복해서 문을 두드리면 굳이 Yield()를 하는 이유가 무엇인지 모르겠습니다.
-
미해결C#과 유니티, 실전 게임으로 제대로 시작하기 (저자 직강)
2.17강에서 피격부분이 작동하지 않습니다
화면상에 물리법칙으로는 작동을 하는데,디버그 로그에서도 아무것도 안뜨고 적군한테 맞춰도 총알이 안 사라지고 2초 뒤에 사라집니다. Enemy 오브젝트랑 Bullet 프리팹에 스크립트 적용했습니다. 오브젝트 설정이랑 스크립트, 물리법칙 작동화면 스샷 첨부드립니다. <Bullet 프리팹 설정> <Enemy 오브젝트 설정> <물리법칙 작동화면(충돌합니다)> 작성한 스크립트
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
공부방법관련 질문드려요
안녕하세요공부 관련 질문있어서 글 작성해요!현재 part4까지 들었는데유니티 part2 부분과 part4 부분이 부족하여 복습하면서 계속 강의를 계속 들을 예정인데알고리즘/자료구조 공부도 이제 시작하는데시간 비율을 어느정도로 하는게 좋을지 궁금해서 여쭤보려고 해요현재는 C# 공부 6 : 코딩테스트 준비 4로 하려고 하는데C# 공부 비율을 더 늘리는게 좋은지 어떤지 잘 모르겠어서 질문남겨요
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Player가 Monster를 타고 올라가는 이유는?
이전 질문을 검색하다 보니 hit.point가 몬스터를 클릭할 때 Y값이 1 이상으로 되면서 Player가 쓰러진다는 내용을 보고 코드를 아래와 같이 수정했더니 Playe가 쓰러지지 않았습니다.플레이어는 Use Gravity Off/ isTrigger On으로 된 상태입니다. 그런데 강사님이 공유해주신 코드를 비교해보면 y값을 잡아주지 않은 상태에서 몬스터 클릭시 hit.point의 y값이 1 이상이 되어도 Player가 몬스터를 타고 올라가지 않고, 넘어지지도 않습니다. _destPos의 Y값이 1 이상인데, Player가 움직일때 Y값을 0을 유지하는 설정, 코드가 있는 걸까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Player의 State가 Moving 상태일 때 몬스터 옆으로 가면 Collider가 사선으로 기우는 이유는?
13강 MiniRPG를 만들면서 보면Player가 Monster의 주변을 클릭하면 공격하지 않고 이동하는 경우가 있습니다. (Raycast가 monster에 맞지 않고 근처 땅에 맞은 경우라고 생각하고 있습니다.) 그때 Player가 사선으로 기우는 경우가 생깁니다. Player의 Rigidbody.Constraints.FreezeRotation을 x, y, z를 모두 체크해도 Player가 사선으로 기울게 됩니다. Q1. 왜 Player가 사선으로 기울게 되는지 알 수 있을까요?그런데 언젠가 부터 원기둥(캡슐 콜라이더는 아닌듯한)이 생겨있어요. 이 원기둥 때문에 사선이여도 뒤로 넘어지지 않는것 같은데, 이 Q2. 원기둥이 뭘까요?Monster(Moving 상태)와 Player(Moving 상태)의 콜라이더를 비교한 샷도 같이 올립니다.Player가 공격 기능을 넣을때부터 계속 나온 이슈인데, 해결이 되지 않고 있습니다. 설명 부탁드립니다.13강 MiniRPG를 만들면서 보면Player가 Monster의 주변을 클릭하면 공격하지 않고 이동하는 경우가 있습니다. (Raycast가 monster에 맞지 않고 근처 땅에 맞은 경우라고 생각하고 있습니다.) 그때 Player가 사선으로 기우는 경우가 생깁니다. Player의 Rigidbody.Constraints.FreezeRotation을 x, y, z를 모두 체크해도 Player가 사선으로 기울게 됩니다. Q1. 왜 Player가 사선으로 기울게 되는지 알 수 있을까요?그런데 언젠가 부터 원기둥(캡슐 콜라이더는 아닌듯한)이 생겨있어요. 이 원기둥 때문에 사선이여도 뒤로 넘어지지 않는것 같은데, 이 Q2. 원기둥이 뭘까요?Monster(Moving 상태)와 Player(Moving 상태)의 콜라이더를 비교한 샷도 같이 올립니다.Player가 공격 기능을 넣을때부터 계속 나온 이슈인데, 해결이 되지 않고 있습니다. 설명 부탁드립니다. (혹시나 해서 관련샷 추가합니다.)
-
미해결유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
캐릭터 고정데이터 로딩 강의
집에 엑셀이 안되서 강의를 따라하지 못하고 있는데건너띄고 강의들어도 상관 없을까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
git으로 협업할 때 conflict 발생
java 협업시 git을 써 보다가 유니티 작업을 git으로 협업을 하려고 하니 어려운 점이 있는데 도움 부탁드립니다. git으로 clone해서 작업하고 머지할 때 동일한 씬을 수정한 경우 컨플릭이 많이 발생합니다. 씬의 경우 컨플릭이 발생해도 사람이 작성한 코드가 아니다 보니 컨플릭을 해결하기가 어렵습니다. 씬 컨플릭이 발생하지 않게 git을 사용하는 방법이 있을까요?
-
미해결[실전 게임 코드 리뷰] 유니티 클리커 게임
RefreshUI(); 기능이 궁금합니다.
UI_ConfirmPopup.cs 파일에서 RefreshUI(); 함수 기능이 궁금합니다. using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using static Define; public class UI_ConfirmPopup : UI_Popup { enum Texts { MessageText } enum Buttons { YesButton, NoButton } string _text; public override bool Init() { //초기화를 안전하게 사용해도 되는지 확인하는 과정 //base.Init()이 true면 초기화 과정이 되어 있음. if (base.Init() == false) return false; BindText(typeof(Texts)); BindButton(typeof(Buttons)); GetButton((int)Buttons.YesButton).gameObject.BindEvent(OnClickYesButton); GetButton((int)Buttons.NoButton).gameObject.BindEvent(OnClickNoButton); GetText((int)Texts.MessageText).text = _text; RefreshUI(); return true; } Action _onClickYesButton; /// <summary> /// 람다식 실행을 위한 콜백함수 /// </summary> /// <param name="onClickYesButton"></param> /// <param name="text"></param> public void SetInfo(Action onClickYesButton, string text) { _onClickYesButton = onClickYesButton; _text = text; RefreshUI(); } void RefreshUI() { if (_init == false) return; } void OnClickYesButton() { Managers.UI.ClosePopupUI(this); Managers.Sound.Play(Sound.Effect, "Sound_CheckButton"); if (_onClickYesButton != null) _onClickYesButton.Invoke(); } void OnClickNoButton() { Managers.Sound.Play(Sound.Effect, "Sound_CancelButton"); OnComplete(); } void OnComplete() { Managers.UI.ClosePopupUI(this); } }
-
해결됨유니티 2D RPG 게임 만들기
5강에서 6강 넘어갈 때 그 사이의 내용들은 어디 있는 건가요?
5강 Town 부분까지 다 수강하고 6강 들으려고 하는데6강 시작하시면서 저번 시간에 아이템, 인벤토리 기능들을 진행하셨다고 말씀하시는데그 부분 강의들이 없는 것 같습니다단순히 누락되어 있는 건지 아니면 이 부분은 그냥 넘어가고 마저 이어서 수강하면 되는 것인지 여쭤봅니다감사합니다