묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[Rookiss 켠김에 출시까지] MMO Lab 1기 <유니티 방치형 키우기 게임>
구현에 수학이 필요한 경우
실무에서도 개발자들이 전부 수학을 잘하진 않을텐데,구현에 수학이 필요한 경우 어떻게 구현하나요?지금까찌 수학 식이 들어간 코드가 꽤 나왔었는데구조나 설계?가 중요하지 그 부분은 별로 중요하지 않다고 하셨는데, 롤 케릭터 스킬들을 어떻게 구현할 지 생각해보라고 해셔서생각하다가 멀티플레이 기준으로 구현한다고 했을 때 다이애나,카밀,아트록스 등등 수학적으로 구현?해야될 것 같은 스킬들이 꽤 많은 것 같은데 게임 개발자들은 수학도 다 잘하는 건지 궁금하네요,,,
-
해결됨[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번째 강의를 듣고 있습니다. 이전에 동일한 질문이 있어 따라해봤더니 안 되네요. 메일 주소를 알 수 있을까요?그 부분만 한 번 봐주시면 감사하겠습니다.
-
해결됨[Rookiss 켠김에 출시까지] MMO Lab 1기 <유니티 방치형 키우기 게임>
하반기 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쉐이더를 포함하면 된다고 하는 말도있어서 그것도 해봤는데 그것마저도 안되더라구요..ㅜㅜ
-
미해결[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작
콜라이더
콜라이더를 이 대각선에 맞게 지정하고싶은데 박스 콜라이더는 대각선 박스모양이 안되네요 ㅠㅠ 폴리곤 콜라이더로 해야하나요?
-
미해결[Rookiss 켠김에 출시까지] MMO Lab 1기 <유니티 방치형 키우기 게임>
지속적인 오류 베이스맵 로드오류
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 사용가능 -> 움직일 수 있음. 이렇게 이해했는데 이 과정이 맞는건가요??
-
해결됨[Rookiss 켠김에 출시까지] MMO Lab 1기 <유니티 방치형 키우기 게임>
유니티에서 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로 이동하지 않습니다. 혹시 예상되는 부분이 있으실까해서 적어봅니다
-
미해결[Rookiss 켠김에 출시까지] MMO Lab 1기 <유니티 방치형 키우기 게임>
ShowBaseUI, ShowSceneUI 차이
UIManager에서 ShowPopupUI는 말 그대로 팝업ShowSceneUI는 게임에서 고정되는 UIShowBaseUI는 뭔지 모르겠습니다.
-
미해결[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작
2D게임 개발인데 백터3를 사용하는 이유가 있나요?
이번 프로젝트에서 보통 dir은 Vector3로 사용하시던데 이유가 있나요? 어떤거는 Vector2로하고 어떤거는 Vector3로 해서 살짝 혼란이 오네요. 만약 내가 2D게임을 코드를 짤 때 무엇을 기준으로 Vector2, Vector3 사용을 해야할까요?
-
미해결[Rookiss 켠김에 출시까지] MMO Lab 1기 <유니티 방치형 키우기 게임>
UI_Base 질문
protected void Bind<T>(Type type) where T : UnityEngine.Object{string[] names = Enum.GetNames(type);UnityEngine.Object[] objects = new UnityEngine.Object[names.Length];_objects.Add(typeof(T), objects);for (int i = 0; i < names.Length; i++){if (typeof(T) == typeof(GameObject))objects[i] = Util.FindChild(gameObject, names[i], true);elseobjects[i] = Util.FindChild<T>(gameObject, names[i], true);if (objects[i] == null)Debug.Log($"Failed to bind({names[i]})");}} 에서 순서가 for (int i = 0; i < names.Length; i++){if (typeof(T) == typeof(GameObject))objects[i] = Util.FindChild(gameObject, names[i], true);elseobjects[i] = Util.FindChild<T>(gameObject, names[i], true);if (objects[i] == null)Debug.Log($"Failed to bind({names[i]})");}로 object에 value를 findchild로 먼저 다 넣어주고그 뒤에 objects.add로 dic형태 _objects에다 채워주어야 하지않나요? 상관없나요?
-
해결됨[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; // ... 생략 } 강의 재밌게 듣고 있습니다.미리 답변 감사합니다.수강자 올림.