묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[유니티6] 따라하면서 배우는 하이퍼캐주얼게임 시리즈 01
리셋버튼이 스테이지1로 바꿔주지 않습니다.
Pin Circle 게임에서 Reset 버튼을 눌러도스테이지1로 전환되지 않습니다. 예) 스테이지 3까지 클리어 -> 리셋버튼 클릭-> 시작버튼클릭 -> 스테이지4에서 시작(타겟에 적혀있는 스테이지 숫자만 1) 이미 클리어 될때 씬이동이 일어나기 때문입니다. 리셋버튼을 누른후에, 게임 시작을 누르면타겟에 적혀있는 숫자는 1로 바뀌지만스테이지1로 씬 전환이 일어나지는 않습니다. 리셋버튼을 누르면 호출되는 함수에서 Level 1로 씬 이동 해주는 코드를 넣어줘야 할것같습니다.저는 MainMenuUI.cs 에서 이렇게 수정했습니다. -기존 코드-public void ButtonClickEventReset(){PlayerPrefs.SetInt("StageLevel", 0);} -수정 코드-public void ButtonClickEventReset(){PlayerPrefs.SetInt("StageLevel", 0);int index = PlayerPrefs.GetInt("StageLevel");SceneManager.LoadScene(index);}
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
이동 동기화 관련
안녕하세요. 항상 좋은 강의 감사합니다.이 강의를 통해서 포트폴리오를 제작하려고 하고 있습니다.그런데 이동 관련에서 문제가 생겼습니다.2D 횡스크롤 처럼만들어서 캐릭터를 이동시키려고 합니다.캐릭터가 이동할 때마다 패킷을 보내고 있고상대방에게는 방향과 애니메이션은 잘 전송이 되는데posX와 posY는 적용이 되지 않습니다.movePacket에는 State, Dir, posX, posY 값이 잘 들어가 있습니다.서버와 클라간의 패킷값들도 정상적으로 잘 전달이 되어 있습니다.혹시 유니티 선생님 강의와 다르게 박스콜라이더와, 리지드바디를 적용을 했는데이것이 이동패킷에 영향을 주기도 하나요..?breakpoint를 계속 찍어가면서 오류발생구간을 찾고 있는데도값이 매우 잘 들어가 있어서 더 혼란입니다.어떻게 해결을 해야 하는지 여쭙고 싶습니다..
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
두 가지 궁금한게 있습니다
안녕하세요.따로 3D 프로젝트를 만들고 서버를 돌려보고 있는데요디버그 모드로 브레이크 포인트를 잡아서 디버깅하고 싶은데 2 Players 이상으로 실행하게 되면 디버깅을 못하는지 궁금합니다..또 질문하는 김에 하나 더 질문하자면 2 Players로 실행을 하게 되면 첫번째로 생성된 창에서는 조명이 있지만 두 번째 실행 창에서는 뭔가 조명이 꺼져 어두워 보이는데 해결방법이 있을까요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
PriorityQueue<JobTimerElem> _pq 우선순위큐 질문드립니다.
우선순위큐 안에 요소를 디버그 모드로 확인해보니 계속 한개의 요소만 있는데 0.25초마다 flushroom이 큐에 들어가고 처리되고 반복이어서 그런건가요?아니면 flushroom action 만 있어서 복잡하지 않아서 그런건지 잘 모르겠습니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
StartCoroutine("CoStopExplode", 2.0f); 이 부분이 실행이 안됩니다.
using System.Collections;using System.Collections.Generic;using UnityEngine; public class GameScene : BaseScene{ Coroutine co; protected override void Init() { base.Init(); SceneType = Define.Scene.Game; Managers.UI.ShowSceneUI<UI_Inven>(); co = StartCoroutine("ExplodeAfterSeconds", 4.0f); StartCoroutine("CoStopExplode", 2.0f); } IEnumerable CoStopExplode(float seconds) { Debug.Log("Stop Enter"); yield return new WaitForSeconds(seconds); Debug.Log("Stop Execute!!!"); if (co != null) { StopCoroutine(co); co = null; } } IEnumerator ExplodeAfterSeconds(float seconds) { Debug.Log("Explode Enter"); yield return new WaitForSeconds(seconds); Debug.Log("Explode Excute!!!"); co = null; } public override void Clear() { } } StartCoroutine("CoStopExplode", 2.0f); BreakPoint 를 여기에 잡아서 유니티에 연결해 실행해 보았지만 두번째 StratCoroutine은 실행이 되지 않고 Stop Enter 로그도 찍히지 않고 넘어가 버립니다. 그냥 Explode Excute가 찍혀버리는데 혹시 StaretCoroutine을 중복 사용할 수 없게 업데이트가 된 걸가요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
버그 발생시
안녕하세요! 항상 좋은 강의 잘 보고 있습니다!! 버그 수정에 대해 궁금한게 있습니다 게임을 만들던 도중에 unityChan이 바닥을 향해 달려가는 버그가 발생해서 하루 종일 디버깅 해보고 오류를 수정하려고 했지만 결국 원인을 찾지 못하고, 처음 부터 다시 했더니 진짜 갑자기 됐습니다,, 근데 저는 아직도 그때 왜 버그가 났는지 이유를 모르겠습니다,, 그래서 제가 궁금한것은 게임을 만드시는 분들도 다들 이렇게 버그의 원인을 찾지 못하는 경우가 많나요? 저는 버그의 원인을 잘 찾지 못하는것 같은데,,, 다른 분들은 어떻게 하시나요?
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 퀘스트&업적 시스템
Quest Tracker 질문입니다.
선생님 영상 12분까지 따라했는데 Kill Normal Gem Slim5에 대한 Quest Tracker UI가 그대로 남아있습니다. 게임 Points는 30점으로 제대로 저장이 되어있고, 게임 시작시 Quest Giver로 인해 Active Quests로 2개의 퀘스트가 Add 되어서 UI로 다시 출력이 되는데 원인을 잘 모르겠습니다. (Completed Quest로 Kill Normal Gem Slim5이 Add 된 것은 확인했습니다)
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
여기까지
session#3 까지는 어찌어찌 따라온것같은데 #4에서 어질어질 해졌습니다. 그냥 이해는 못하고 따라 치고 있습니다..ㅠ 이럴 때는 그냥 끝까지 듣고 복습하는게 좋을까요? 이금 복습하고(처음부터?) 이해하고 다음 수업을 듣는게 좋을까요?? (_ㅇ_)
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
3D서버 만들 때 질문입니다
복학 전에 개인 작업으로 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에서는 검증을 어떻게 하는게 맞을까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
이동 패킷 동기화
안녕하세요 이동패킷 동기화 관련해서 여쭤볼려고 합니다. 다른 사람들 질문에 답하신것 처럼 이동패킷은 보통 1초에 4번 보낸다 라고 되어 있더라구요.여기서 4번 보낸다 라는 뜻은 4강 서버 강의 후반에서 배운것처럼 Server에서 JobTimer에 pendingList에 250ms 만큼 모아놓고 그리고 보낸다라는 뜻인가요??즉 Client에서는 키 입력을 받게 되면 실시간으로 Server에 보내지만 반면에 Server쪽에서는 같은 방 안에 있는 다른 플레이어한테 BroadCast를 실시간으로 해주는게 아닌 0.250초 만큼 쌓아 놓은 패킷을 모아서 보낸다는 뜻인가요?? 또는 클라이언트에서 아예 0.250초마다 보낸다는 뜻인지 잘 모르겠어요...
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
유저 간 패킷전송의 평등성? 에 대한 질문입니다.
온라인 게임을 하다보면 pc의 성능이 안좋거나 인터넷 환경이 불안정한 경우 렉이 걸려 해당 유저의 캐릭터가 멈추는 경우를 봤습니다. 이는 아마도 서버와 패킷을 전송하는 과정에서 pc성능의 문제로 패킷을 소화하지 못하거나 인터넷이 끊겨 패킷을 제때 전달받지 못해서 발생하는 문제라고 생각합니다. 그렇다면 반대의 경우 pc 성능이나 인터넷 환경이 타유저에 비해 압도적으로 뛰어난 경우는 타 유저에 비해 보다 많은 패킷을 주고 받을 수 있을 거라 생각합니다. 그럴 경우 타인보다 더 많은 이동, 공격을 하는 등 유저 간 벨런스에 문제가 생길 것 같고 그를 방지하기 위해 패킷 전송에 있어 일종의 상한선을 걸어야 하지 않을까 라는 생각을 합니다. 마치 프레임 제한을 거는 것처럼요. 이게 맞다면 제 개인적인 판단으로는 그러한 한 번에 전송할 수 있는 패킷의 양, 전송대기 시간 등을 클라이언트 쪽에서 제한하는 쪽으로 코드를 짜야하는 게 맞다고 생각이 드는데 이런 부분을 클라쪽에서 관리를 해야할까요? 아니면 서버 쪽에서 관리를 해줘야 할까요? -- 번외의 질문입니다. 롤의 경우 렉이 걸리는 유저는 혼자 렉이 걸리고 심할 경우 게임에서 나가지는 식인 반면에 닌텐도의 슈퍼마리오메이커2는 유저대전에서 한 명이 렉이 걸리면 전원이 렉이 걸리는 방식으로 알고 있습니다. 게임을 개발하는 개발자로서 마리오 방식보다는 롤의 방식이 유저에게 좀 더 긍정적인 평가를 받을 수 있을 거라 생각하는데 게임사 측에서 마리오 방식을 택하는 이유가 있을까요? 늘 좋은 강의 감사합니다.^^
-
미해결[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 해주는데 동기화가 안됩니다. 현재 서버의 로그를 보면 서버를 킨 후 클라에서 조이스틱을 클릭하고 이리저리 움직이면 최초의 드래그 한 값만이 이런식으로 계속 보내 지는거같습니다. 가령 같은 값으로 패킷을 보낸다고해도 다른클라에서는 제 플레이어를 봤을 때 뚝뚝 끊기는것 처럼 보여야 하는데 접속만 되고 동기화가 통 되질 않습니다..
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 퀘스트&업적 시스템
미션 클리어 문의
선생님 첫번째 door에 가는 미션을 진행중인데 Second door에 가도 미션이 클리어되버리고 다음 미션인 두번째 키를 얻으라는 미션이 출력됩니다 ㅠ
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
UI 자동화 #1 Bind()함수 질문입니다
UI 자동화 #1 강의를 보다 Bind() 함수가 이해가 잘 안되어서 질문드립니다. enum ‘Buttons’는 Button을 컴포넌트로 가진 GameObject들의 목록이다. Bind()는 이 Buttons의 Type를 넘겨받아서 Dictionary ‘_objects’에 Key: 해당 컴포넌트 종류 Value: 해당 컴포넌트를 가진 GameObject들의 배열 형태로 맵핑해준다. Bind()는 나의 자식들 중, 해당 컴포넌트를 가진 GameObject들을 찾아주는 역할을 한다. 라고 이해하면 되는 걸까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
매니저 구현 부분 질문이 있습니다.
인풋 매니저나 리소스 매니저 등등 여러 매니저를 구현하실 때 도통 이해가 잘 되지 않습니다... 개념 이해하지 못하고 무작정 클론 코딩만 하고 있는데, 일단은 넘어가도 괜찮을까요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
UI_Inven에서 Bind시 오류가 발생합니다
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를 받아서 잘 되었는데 저는 안 되는 건지 궁금해서 질문을 남겨봤습니다.. 강의랑 버젼이 달라서 그런 것인가요??
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
강의 관련 질문드립니다!
안녕하세요! 이제 막 파트3을 입문하려고 하는데 이전 파트2가 너무 어려워서 질문드립니다... 파트2를 수강하며 거의 무슨 내용인지도 모르고 클론 코딩만 한 거 같습니다ㅠㅠ 혹시 파트2를 완전히 숙지하지 못한 상태에서 파트3을 듣기에는 무리가 있는지 싶어 여쭈어봅니다!
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Func<Session> sessionFactory 사용에대해서 궁금합니다
Func가 리턴값이 하나인 함수를 캡슐화한다고 공식문서에서 찾아봤는데요 함수를 캡슐화한다는게 함수에서 매개변수로써 사용한다고 생각하면 될까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
몬스터 위치 싱크
안녕하세요! 강의 내용과는 별개로 실무에서 몬스터 위치 싱크는 어떻게 이뤄지는지 궁금합니다. 플레이어의 위치는 클라에서 key/mouse input을 받아 서버로 패킷을 보낸 뒤 서버에서 다른 클라이언트들에게 보내서 위치를 싱킹한다고 한다면 몬스터 같은 경우에 아직 공격대상이 없어서 어슬렁 거리는 경우라면 서버에서 tick을 돌면서 좌표(position)를 변경해주나요?? 이 경우 맵이 평면이 아닌 울퉁불퉁한 맵이라면 몬스터의 좌표 계산이 서버사이드 물리엔진 없이는 구현이 힘들 것 같은데 어떻게 구현하는지 궁금하네요ㅠㅠ
-
해결됨따라하면서 배우는 고박사의 유니티 하이퍼캐주얼게임 시리즈 02
Grid 아래에 생성된 Node의 배치에 관한 질문입니다.
강사님께서 하신대로 Constraint를 flexible로 했는데 일렬로 정렬이 되어버렸습니다.전부 똑같이 한 것 같은데 왜 이렇게 될까요? flixble 대신에 컬럼을 지정하면 똑같은 모양으로 만들 수 있다는 것은 알고 있지만 이유를 알고 싶습니다.=> 찾았습니다. 전체확대를 안해서 그런거였네요