묻고 답해요
144만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요! UDP 관련 질문입니다!
안녕하세요, 강사님!프로젝트를 진행하던 중 UDP 통신이 필요할지 고려해야 되는 부분이 있다고 생각되어 질문해봅니다 ㅎ..강의에서 사용된 코드에서 Listener와 Connector부분에서 매개변수로 넘겨지는 ProtocolType부분을 Tcp에서 Udp로 변경하면 UDP 통신이 수행되는 건가요??
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
apk 빌드하면 먹통되요
핸드폰에서 한번 해볼까 하고 안드로이드 apk 빌드해서 LDplayer 나 핸드폰 s22 울트라 정도에서 해보려했는데 안되네요 혹시 다른 버전은 다 되고 있나요?일단 터치 안되서 모바일 터치로 변경 했구요그러니 잘되네요 Game Sceen으로 넘어가는 부분도물론 찾아 봐야 겠지만 어떤 문제인지 폰에서는넘어가지지 않구요. 다른분들은 다 잘 되시나요?시뮬레이터에서는 아무 이상없이 잘됩니다.핸드폰 및 LDPlayer 가면 그러네요...Window 빌드 해서 해보니 안되네요...시뮬레이터 빼고 다안될듯 혹시 알아내신분있으면 공유 부탁드려요~~애러가 상당히 많이 나는데...뭐가 문제지 흠.. 강의 소스 그대로 사용했어요
-
미해결유니티 Addressable 을 이용한 패치 시스템 구현
캐싱을 할때 캐싱 진행상황을 제대로 표시하고싶어요
안녕하세요. 제가 어드레서블을 사용해서 다운을 받고 생성하는거까지 해봤는데요.여기서 몇가지 궁금한게 생겨서요.제가 포톤 pun2를 사용하고있어서 에셋을 바로 PhotonNetwork.Instantiate를 사용할수가 없는 상황이더라구요..그래서 찾아보다가 포톤에서 프리펩풀이라는게있어서 수동으로 생성을 할수있다고 하더라구요DefaultPool defaultPool = PhotonNetwork.PrefabPool as DefaultPool;Task<GameObject> task = character.LoadAssetAsync<GameObject>().Task; // 불러옵니다.await task; //대기.defaultPool.ResourceCache.Add("player01", task.Result); // 넣기_player = PhotonNetwork.Instantiate("player01", Vector3.zero, Quaternion.identity);그래서 이런식으로 프리펩풀에 넣어놓고 불러오는 방식을 사용하게됐습니다.그리고 불러와지는걸 확인을 했죠! 그런데 여기서 문제가 발생하더라구요.. 안드로이드로 스위칭을 한상태라서그런지쉐이더라 에디터상에서는 깨지는문제가 발생하더라구요그래서 playmode script를 simulategroup을하게되면 에디터상에서 정상적으로 보이기는 하는데.. 그전에는 쉐이더가 안불러와져서 그런지 핑크색이긴하지만 바로바로 불러와졌는데씬을 불러오니까 캐릭터가 생성되기까지 시간이 2~3초정도 걸리더라구요그래서 무슨문제일까 찾아보다가 씬에 미리 캐싱을 해두고 써야한다는말이 있어서 public IEnumerator LoadMultipleAssetAsync(List<string> AssetNames, string scene){foreach (string asset in AssetNames){// Addressables.DownloadDependenciesAsync를 사용하여 씬 캐싱AsyncOperationHandle handle = Addressables.DownloadDependenciesAsync(asset);// 캐싱 완료될 때까지 대기while (!handle.IsDone){Debug.Log(handle.PercentComplete); yield return null;}// 씬 로드SceneManager.LoadScene(scene);}// 씬 로드 완료 후 처리}이렇게 진행상황을 표시하는걸 만들고StartCoroutine(LoadMultipleAssetAsync(assets, "Tutorial"));이렇게 씬을 불러오게 만들었는데여기서 문제가 발생합니다. player01을 불러올때 0.8부터 불러온다는 문제가 생기더라구요..그리고 불러오고 나서도 씬이 자연스럽게 나오는게 아니라 뭔가 부자연스럽게 한..0.2~3초정도 눈에 보일정도로 딜레이가생기면서 생성되더라구요.. 제가 여기서 궁금한건 0.8부터 불러지는거랑 딜레이가 생기는부분이 궁금한건데요.. 어떤 문제가 있는걸까요?
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
구현에 수학이 필요한 경우
실무에서도 개발자들이 전부 수학을 잘하진 않을텐데,구현에 수학이 필요한 경우 어떻게 구현하나요?지금까찌 수학 식이 들어간 코드가 꽤 나왔었는데구조나 설계?가 중요하지 그 부분은 별로 중요하지 않다고 하셨는데, 롤 케릭터 스킬들을 어떻게 구현할 지 생각해보라고 해셔서생각하다가 멀티플레이 기준으로 구현한다고 했을 때 다이애나,카밀,아트록스 등등 수학적으로 구현?해야될 것 같은 스킬들이 꽤 많은 것 같은데 게임 개발자들은 수학도 다 잘하는 건지 궁금하네요,,,
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
PriorityQueue 관련 질문
안녕하세요.PriorityQueue를 직접 구현 하셨는데,혹시 .NET 6부터 제공하기 시작한 PriorityQueue<TElement, TPriority>를 사용해도 괜찮은지 궁금하여 질문 드립니다! class JobTimer { PriorityQueue<Action, int> pq = new(); object _lock = new(); public static JobTimer Instance { get; } = new(); public void Push(Action action, int tickAfter = 0) { lock (_lock) { pq.Enqueue(action, Environment.TickCount + tickAfter); } } public void Flush() { while (true) { int now = Environment.TickCount; Action? action = null; lock (_lock) { if (pq.Count == 0) break; pq.TryPeek(out action, out var execTick); if(execTick > now) break; pq.Dequeue(); } if(action != null) action.Invoke(); } } }
-
미해결[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작
광고를 보고나면 퍼즈가 풀리네요
카드선택 팝업창에서 새로고침-광고를 보고 나오면 "Resume Game"이라는 유니티 메시지가 뜨면서 팝업창이 띄워져있는데도 일시정지된 게임이 재개됩니다. 혹시 버그인지 아니면 의도를 하신건지 궁금해서 여쭈어 봅니다!
-
미해결[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작
MonsterController Init()함수 호출이 이해가 잘 안갑니다
루키스님 강의보며 설계적인 측면에서 코드를 분석을 하고 있는데요.제가 알고 있는 Init()함수 사용은 맨처음 오브젝트가 생성되었을 때 Awake() 등에서 최초로 호출되어 GetComponent() 등 한 번만 수행할 수 있는 함수라고 생각을 하고 있습니다. 근데 코드를 보니 Monster는 디스폰됬다 다시 스폰될 때 SetInfo() 함수를 호출하고 SetInfo()함수에서 Init()을 다시 호출하고 있더라구요. 스폰될 때 마다 초기화 해주어야 하는 인자들 ex) CreatureState(상태) 등 과 한번만 해줘도 되는 것들 ex) GetComponent()을 Init()에 같이 묶여있어 매우 혼란이 온 상태입니다. Init()이 여러번 불린다면 bool 인자도 필요하지 않고 굳이 번거롭게 할 필요가 없다고 생각이 드는데요. 코드를 보다보면 부모의 Awake()에서 Init()을 호출하고 또 자식의 Awake()에서도 Init()을 호출하고 어떤데는 base.Init()만 하고 어떤데는 if(base.init() == false)해주고 같이 작성을 하셨는데 그 각각마다 다 어떤 이유를 가지고 하신건지 아니면 그냥하신건지 궁금합니다.
-
해결됨두고두고 써먹는 유니티 VR
OnGrag, OnRelease작동하지 않음.
안녕하세요. 정말 퀄러티 높은 강의 잘 듣고 있습니다. 이제는 퀘스트까지 사서 3번째 강의를 듣고 있습니다. 이전에 동일한 질문이 있어 따라해봤더니 안 되네요. 메일 주소를 알 수 있을까요?그 부분만 한 번 봐주시면 감사하겠습니다.
-
해결됨[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
하반기 MMO 서버 프로젝트
안녕하세요 강의 잘보고있습니다.올해 상반기 하반기 나눠 프로젝트를 진행한다고 종종 언급하시는데하반기 MMO 서버 프로젝트도 Unity를 활용한 프로젝트 일까요?
-
해결됨[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작
생성자에서 받는 인자 이름이 중요한가요?
슬라임마스터를 토대로 게임을 만들다가 궁금한점이 생겨서 질문드립니다.아래는 Equipment 클래스의 생성자 부분입니다.public Equipment(string key) { this.key = key; EquipmentData = Managers.Data.EquipDataDic[key]; SetInfo(Level); IsOwned = true; }인자로 받는 string key 이름을 아래와 같이 임의대로 지었더니 ArgumentNullException 애러가 발생합니다. public Equipment(string apple) { this.key = apple; EquipmentData = Managers.Data.EquipDataDic[apple]; SetInfo(Level); IsOwned = true; }그저 변수 이름을 바꿨을 뿐인데 왜 애러가 발생하는지 잘 모르겠습니다.
-
미해결유니티 Addressable 을 이용한 패치 시스템 구현
어드레서블을 사용해서 받은 에셋이 전부 핑크색으로 나와요
안드로이드로 스위치 했구요. 모델링하나를 씬에 올리고 재질을 하나 만들어서 재질은 mobile/unlit(support lightmap)이라는걸로 넣었구요. 그상태로 그걸 프리펩으로 만들고 어드레서블을 지정했습니다. 기본 디폴트 그룹에 지정되어있구요. 들어가있는 재질도 어드레서블을 지정해서 넣었습니다. 그리고나서 어드레서블을 사용해서 다운을 받고 불러오기까지 했습니다. 여기서 문제가 하나 생기더라구요.. 불러오니까 핑크색으로 나오는거에요.. 그래서 리얼타임에서 불러온상태에서 재질쪽으로 가니까 재질은 들어가있는데 쉐이더쪽이 핑크색인거에요.. 그래서 쉐이더를 다시 unlit으로 지정을 해주니까 잘나오더라구요.. 그렇다는건 쉐이더도 어드레서블에 포함을 해야한다는 이야기인건가요?진짜 이것저것 시도를 다해보고있는데 해결이 안되네요.. 빌트인에 unlit쉐이더를 포함하면 된다고 하는 말도있어서 그것도 해봤는데 그것마저도 안되더라구요..ㅜㅜ
-
미해결[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작
콜라이더
콜라이더를 이 대각선에 맞게 지정하고싶은데 박스 콜라이더는 대각선 박스모양이 안되네요 ㅠㅠ 폴리곤 콜라이더로 해야하나요?
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
지속적인 오류 베이스맵 로드오류
Failed to load prefab : BaseMapUnityEngine.Debug:LogError (object)ResourceManager:Instantiate (string,UnityEngine.Transform,bool) (at Assets/@Scripts/Managers/Core/ResourceManager.cs:28)GameScene:Init () (at Assets/@Scripts/Scenes/GameScene.cs:16)InitBase:Awake () (at Assets/@Scripts/Utils/InitBase.cs:20) NullReferenceException: Object reference not set to an instance of an objectGameScene.Init () (at Assets/@Scripts/Scenes/GameScene.cs:17)InitBase.Awake () (at Assets/@Scripts/Utils/InitBase.cs:20)지속적인 오류가나는데 원인을 못찾겠습니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
KeyActon 부분 질문있습니다!
다른 수강생분들 질문을보니 InputManager이 나중에는 삭제된다고 봤습니다. 그렇지만 제가 이해하고있는게 맞는지가 궁금하여 질문남깁니다.! void Start() { Managers.Input.KeyAction -= OnKeyboard; Managers.Input.KeyAction += OnKeyboard; }PlayerControllor 에서 저부분이 KeyActon에 += OnKeyboard 구독 신청 -> InputManager 의 KeyAction 이 null이 아니게 됨 -> Invoke가 실행 -> 이벤트 활성화 -> OnKeyboard 사용가능 -> 움직일 수 있음. 이렇게 이해했는데 이 과정이 맞는건가요??
-
해결됨[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
유니티에서 internal 클래스가 사용되는 예
강의를 들으며 코드를 훑어보던중에 PoolManager.cs에서 Pool 클래스가 internal 접근제한자로 작성되어있는 부분이 궁금하여 질문 드립니다. 현재 코드에서는 어셈블리가 나눠진게Assembly-CSharp, Assembly-CSharp-Editor 인데Pool 클래스가 internal로 작성되는 이유가 있는가요? Editor 어셈블리에서 사용되지 않도록 하는것 인가요? 그리고 유니티에서 internal 접근 제한자가 사용되는 경우가 어떤 경우가 있나요? 간혹 게임 에셋이나 코드드를 보며 공부할때 특정 클래스들이 internal로 되어있는 경우를 보는데이유가 뭔지 궁금점이 생겨 질문 드립니다.
-
미해결[유니티 3D] 실전! 생존게임 만들기 - Advanced
멀티로 개발하고 싶으면 어떤것을 알아야할까요?
해당 강의를 수강하고, 공식서버가 아니고, 한명이 호스트가 되고 친구를 초대해서 같이 할수 있게끔 개발을 해나가고 싶습니다.어떤부분을 참고하면 좋을지에 대한 방향성 제안이 가능할까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
점프가 동기화가 되지 않습니다..
안녕하세요! 루키스님 강의를 토대로 2D 플랫포머 형태의 멀티플레이어 게임을 만들어보고 있습니다! 항상 감사합니다. 현재 제가 액션들을 구현하고 동기화를 해보고 있는데,걷기, 뛰기, 구르기까지는 동기화가 잘 되는데 점프가 동기화가 되질 않습니다.. 점프는 Rigidbody2D의 AddForce를 사용하여 작동되고,다른 이동 액션들은 루키스님이 보여주신 방식처럼 다음 프레임의 transform.position을 계산하여 PosInfo에 넣어 패킷을 전송하고 있는데요. 점프는 우선 클라이언트에서 AddForce를 통해 점프를 먼저 한 뒤,현재 위치를 PosInfo에 넣어 패킷을 보내는 방식을 써보았습니다..그런데 다른 빌드의 화면에서 볼 때, 점프 애니메이션만 작동하고 실질적인 점프는 작동하질 않습니다. 디버깅 해보았을 때, 클라이언트 -> 서버로 패킷을 보낼 경우에는 패킷이 정상적으로 송신되는 것으로 보이고,서버 -> 클라이언트로 패킷을 보내는 경우에도 정상적으로 송신이 되는 것 같은데,클라이언트에서 서버에서 받은 패킷을 디버깅 하는 방법을 모르겠습니다.. 좀 오랜시간 붙잡고 있던 문제라 장황하게 늘어놓아 버렸는데, 궁금한 점은 아래와 같습니다.Q. Rigidbody를 사용한 물리 작용(점프)을 패킷으로 보내기 위해서 제가 사용한 방법이 틀린걸까요?(정말 될 것 같은데 왜 안되는지 모르겠네요..)
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
lock()과 InterLocked를 사용한 락 구현에서 원자성 보장의 차이
데드락 강의에서"Lock을 통해 원자성을 구현하는 것인가요?"라는 질문에 아래처럼 답변하신 글을 보았습니다.Lock은 말 그대로 신호등처럼 순차적으로 접근하기 위한 도구이지.어떤 연산이 원자적으로 이루어진다는 보장을 하는 것은 아닙니다. 이번 강의에서는한가지 더 궁금한게, 의사코드로 설명해주실때, 이게 3줄이라서 이 사이에 끼어든거다라는 늬앙스로 처음에는 이해를 했거든요. 그런데 지금 설명을 들어보니까 몇줄이건 관계없이 CPU에서 locked계열 명령어가 적용되면 해당 부분은 원자성이 보장되는건가요?라는 질문에는 그렇습니다. 말 그대로 특수한 명령어이죠. 라고하신걸 보고 헷갈려서 질문 드립니다. Q. 데드락 강의 실습처럼 제가 직접 lock()으로 임계 영역을 감싸서 구현하는 것은 해당 영역의 연산들이 원자적으로 이루어진다는 것을 보장받을 수 없고Interlocked 클래스 같이 마련된 것을 사용하여 임계 영역을 관리하면 해당 영역의 연산들은 원자성이 보장되는 것인가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
이동 동기화가 너무 어렵습니다..
안녕하세요 루키스님이번 강의 보고 열심히 따라해봤는데 이상하게 똑같이 동작을 안하네요,, 지금 10시간 넘게 강사님의 코드 차이점을 찾고 있는데 못찾았습니다..혹시 몰라서 코드를 복사해서 직접 갖다 붙여도 비슷한 상황이 나오게 됩니다. 물론 강사님과의 코드와 간소한 차이가 있지만 로직틀은 벗어나지 않았습니다. 그나마 차이를 찾자면 유니티 에디터 버전 차이인것 같은데강사님꺼는 2019.3.15f 이고 제꺼는 2022.3.16f입니다. 제 코드로 서버를 돌리고 버전 바꾸고 강사님 코드로 클라를 돌렸을 때는 잘 작동했었습니다. 하지만 클라를 제 코드로 하면 이상하게 CellPos는 정상적으로 바뀌고 Object.Find로 확인해서 이동이 막히는것 까지는 정상 처리가 됩니다. PacketHandler 에서 여러번 확인해봤는데 MyPlayer와 Player의 id가 다른 패킷을 받는걸 봤습니다. 패킷의 내용도 예상대로 잘 받고 있는데 이상하게 Player컴포넌트를 들고있는 오브젝트만 MoveToNextPos로 이동하지 않습니다. 혹시 예상되는 부분이 있으실까해서 적어봅니다
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
ShowBaseUI, ShowSceneUI 차이
UIManager에서 ShowPopupUI는 말 그대로 팝업ShowSceneUI는 게임에서 고정되는 UIShowBaseUI는 뭔지 모르겠습니다.