묻고 답해요
144만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
6:00
릴리즈 모드로 해도 디버그 모드랑 동일하게 출력되는데 뭐가 문제인가요? using System.Threading;namespace ServerCore{ internal class Program { // 전역이기 때문에 쓰레드들이 동시에 접근 가능 static bool _stop = false; static void ThreadMain() { Console.WriteLine("쓰레드 시작!"); while(_stop == false) { // 누군가가 stop 신호를 해주기를 기다린다 } Console.WriteLine("쓰레드 종료!"); } static void Main(string[] args) { // Thread t = new Thread(ThreadMain); Task tt = new Task(ThreadMain); tt.Start(); // 1초 존야 후 다시 실행 Thread.Sleep(1000); _stop = true; Console.WriteLine("stop 호출"); Console.WriteLine("종료 대기중"); tt.Wait(); // t.Join(); 과 동일 Console.WriteLine("종료 성공"); } }
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
인벤토리 저장전에 클리어
안녕하세요세이브 하기전에 데이터 클리어 하면 저장 가능한건가요?...헷갈리네요
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 퀘스트&업적 시스템
Task 예시
테스크에 Count Task와 Set Task를 예로 들어주셨는데 두개의 차이점을 모르겠습니다
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
LoadAllAsync에서 result.PrimaryKey.Contains(".sprite")) 부분을 안타는데 왜그럴까요?
public void LoadAllAsync<T>(string label, Action<string, int, int> callback) where T : Object { var opHandle = Addressables.LoadResourceLocationsAsync(label, typeof(T)); opHandle.Completed += (op) => { int loadCount = 0; int totalCount = op.Result.Count; foreach (var result in op.Result) { if (result.PrimaryKey.Contains(".sprite")) { LoadAsync<Sprite>(result.PrimaryKey, (obj) => { loadCount++; callback?.Invoke(result.PrimaryKey, loadCount, totalCount); }); } else { LoadAsync<T>(result.PrimaryKey, (obj) => { loadCount++; callback?.Invoke(result.PrimaryKey, loadCount, totalCount); }); } } }; }해당 함수는 이렇게 작성되어있고 .sprite 로 보아 확장자를 .sprite 를 찾는것같은데 어드레서블 그룹에는 .png 로 되어있습니다 혹시 이것때문에 그러는걸까요?
-
미해결따라하면서 배우는 고박사의 2D 플랫포머 게임 제작
통과하는 발판(OneWay)을 움직이는 발판을 적용할 방법은 없나요
Platform_Moving에 Platform Effector Expention 스크립트를 적용해봤는데 올라타는것과 밑에서 올라타는 기능은 가능하나 움직이는동한 플레이어 오브젝트를 자식으로옮겨 플랫폼에 고정하는 기능은 작동이 안되네요 방법이 없을까요
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
픽셀아트 적용 하는방법
안녕하세요나중에 출시 할때 리소스는 사용 금지 라고하셨는데만약 픽셀이나 다른거 적용할때애니메이션은 변경하거나 뼈대같은거 사용못하면 어떻게 해야할지 ㅠㅠ 이미지 변경하면 호환하는방법 알수있나요...?? 어떻게 내 게임을 만들어야할지 막막해서질문해봤습니다 ㅠ
-
미해결이득우의 꼭 배워야하는 게임 알고리즘
쿼드트리 구현 강의자료에 포함된 LQNode의 GetQuads함수에 궁금한 점이 있습니다.
LooseQuadTree의 Query함수 호출 시 겹칠 가능성이 있는 모든 LQNode를 수집할 때 일부 결과가 누락된 것으로 판단되어서 문의합니다.강의 자료의 Query함수의 기능이 틀린 내용인지, 아래 내용이 옳은지 그리고 더 최적화된 로직이 있는지 궁금합니다.public LQNode(LQuadtree tree, LQNode parent, Bounds bounds, int depth) { _tree = tree; _parent = parent; _bounds = bounds; _looseBounds = new Bounds(bounds.center, bounds.size * tree._constantK); _depth = depth; } private List<LQNodeIndex> GetQuads(Bounds bounds) { List<LQNodeIndex> quads = new List<LQNodeIndex>(); if (_children[(int)LQNodeIndex.UPPERLEFT]._looseBounds.Intersects(bounds)) { quads.Add(LQNodeIndex.UPPERLEFT); } if (_children[(int)LQNodeIndex.UPPERRIGHT]._looseBounds.Intersects(bounds)) { quads.Add(LQNodeIndex.UPPERRIGHT); } if (_children[(int)LQNodeIndex.LOWERRIGHT]._looseBounds.Intersects(bounds)) { quads.Add(LQNodeIndex.LOWERRIGHT); } if (_children[(int)LQNodeIndex.LOWERLEFT]._looseBounds.Intersects(bounds)) { quads.Add(LQNodeIndex.LOWERLEFT); } return quads; }
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
ReaderWriterLock은 반드시 재귀적으로 호출되어야 하나요?
만약 한 쓰레드에서 ReadLock과 WriteLock이 전부 호출된다고 했을 때 반드시 호출의 역순으로 Unlock을 호출해야 되나요? 아래는 C#에 구현돼있는 ReaderWriterLockSlim 클래스를 사용하여 실행한 예시입니다.class Program { static ReaderWriterLockSlim _lock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); static void Main(string[] args) { Task.WaitAll( Task.Run(() => { _lock.EnterWriteLock(); _lock.EnterReadLock(); Thread.Sleep(5000); _lock.ExitWriteLock(); _lock.ExitReadLock(); })); } }WriteLock -> ReadLock -> WriteUnlock -> ReadUnlock 순으로 호출했고 정상적으로 작동합니다.강의에서 구현한 ReaderWriterLock을 사용해도 예외가 발생하지는 않습니다만 위의 순서로 호출하면 flag가 엉망이 됩니다.public void WriteUnlock() { int lockCount = --_writeCount; if (lockCount == 0) Interlocked.Exchange(ref _flag, EMPTY_FLAG); }동일한 쓰레드가 ReadUnlock을 호출하지 않은 상태에서(즉 read count가 0이 아닌 상태에서) WriteUnlock을 호출할 경우 flag가 0으로 초기화되기 때문에 이후에 ReadUnlock을 호출할 경우 flag가 -1로 초기화됩니다. 제가 생각하기엔 굉장히 특이한 케이스고 실제로 함수가 재귀적으로 호출되기 때문에 발생할 일은 없다고 보는데요...혹시라도 휴먼에러로 위와 같은 상황이 벌어질 경우를 대비해서 예외를 추가하거나 WriteUnlock 로직을 수정해서 'EMPTY_FLAG'가 아닌 '_flag & READ_MASK'를 대입하면 어떤가요?
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
CoSendWebRequest 관련 문의
WebManager의 아래 코루틴 CoSendWebRequest에서yield return uwr.SendWebRequest(); 부분을 통해서 request를 보내는 것까지는 이해를 했는데,제가 알고있기로 코루틴에서 yield return 을 호출할 경우, 다음 프레임에서 코드가 이어서 실행되는 것으로 알고있는데요.response를 언제 받을 지 모르는 상황이니까 별도로 response를 받았을때의 콜백을 입력해서 처리하는 것이 아닌가 생각했었는데, 실제 코드에서는 아래와 같이 바로 이어서 response를 받았을 때 처리되는 부분을 입력하고 있고, 또 이게 제대로 작동을 하니 잘 이해가 안됩니다.아래와 같은 경우라면.. 다음 프레임 이전에 무조건 response가 온다는 확신이 있다는 것으로 이해가 되는데, 어떻게 이 부분을 확신할 수 있는건가요? using (UnityWebRequest uwr = new UnityWebRequest(sendUrl, method)) { uwr.uploadHandler = new UploadHandlerRaw(jsonBytes); uwr.downloadHandler = new DownloadHandlerBuffer(); uwr.certificateHandler = new CertificateWhore(); uwr.SetRequestHeader("Content-Type", "application/json"); yield return uwr.SendWebRequest(); if (uwr.result == UnityWebRequest.Result.ConnectionError) { Debug.Log($"CoSendWebRequest Failed : {uwr.error}"); } else { T resObj = JsonUtility.FromJson<T>(uwr.downloadHandler.text); res.Invoke(resObj); } }
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
과정 중에 사운드 리소스 추가는 없나요?
과정 중에 사운드 리소스 추가는 없나요?
-
미해결따라하면서 배우는 고박사의 유니티 기초
강의보다가 문득 궁금한게 있어서 여쭤봅니다.
안녕하세요강의보다가 문득 궁금한게 있어서 여쭤봅니다.마우스로 UI상 아무곳을 클릭하면 Input field가 나오게끔 해놨는데요 옆에 저장버튼도 만들어서마우스로 클릭한곳에 Input field가 나오면 메세지를 입력하고 저장버튼을 누르면 화면에 저장된 텍스트가 보이는데 근데, 저장된 텍스트가 클릭한 위치에 고정으로 있어야하는데 계속 카메라를 따라다니더라구요.. 뭐를 중점적으로 봐야할까요?
-
해결됨[유니티 레벨 업!] 모듈식으로 개발하는 퀘스트&업적 시스템
퀘스트의 상태인 QuestState를 다른 스크립트에서 받을 수 있나요
이 수업 내용을 토대로 프로젝트에 적용중입니다. 구현중인 내용이 퀘스트의 상태에 따라 대화문이 다르게 출력되도록 하고싶은데 대화문을 출력하는 코드에서 퀘스트의 현재 상태를 가져오지 못합니다. 이렇게 현재 구현했고 SerializeField 를 통해 불러오고 싶은 스크립터블 오브젝트 Quest를 참조했습니다.그런데 QuestGetDialogue()이 코드를 호출했을 때 퀘스트를 받고 난 후에도 Running 상태의 코드를 출력하지 않고 if(quest.State == QuestState.Inactive) { dialogueEvent.dialogues = DataBaseManager.instance.GetDialogue((int)quest.InactiveQuestline.x, (int)quest.InactiveQuestline.y); Debug.Log(quest.State); }여전히 이 코드를 받아옵니다. Debug.Log 를 통해 확인해봤을 때 Quest System에 등록된 퀘스트는 제대로 상태가 변하는데 이 스크립트에서 변한 상태를 못 받아오는거 같아 질문드립니다. ㅠㅠ
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
딕셔너리 new 로 생성하는 것에 대한 에러?
안녕하세요유니티짱 폴더를 강의와 같이 정리하다 보니, 위 경고 메시지가 떴습니다. 그런데 해당 위치는 Dictionary 등 유니티 모노비헤비어 에서 상속받은 게 아닌데... 왜 뜨는 걸까요? 그것도 유니티짱 경로 정리 하다가 그런 경고가 갑자기 뜨는 이유를 알 수가 없습니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
MMO 컨텐츠 구현의 MapTool에서 Util클래스 정보
이전 강의를 구매를 안해서 그런데, 만들어둔 Util클래스에 대한 코드는 어디서 확인할 수 있나요? 강의자료탭이 안보여서요.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Mac OS 쓰레드풀 사용 문제 질문드립니다. (11:12)
위쪽에도 같은 맥북 질문이 있는것으로 확인 하였는데 해결방법을 모르겠어서 질문드립니다. 쓰레드가 Console.WriteLine까지는 진입을 하지만 출력이 되지는 않는 문제가 발생합니다.또한 중간에 쓰레드가 전부 사라져버리고 디버깅이 더이상 진행되지 않는 문제가 발생합니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
PacketSession에서 buffer.Count와 dataSize의 비교
안녕하세요 PacketSession에서 if (buffer.Count < dataSize) break;이 부분의 코드가 왜 필요한지에 대해서 의문이 생겨 질물 남깁니다 예를들어 100바이트 크기의 버퍼가 OnRecv매개변수로 들어왔고 해당 100 바이트가 5가지 패킷의 정보를 들고 있다고 했을 때하나의 패킷을 처리할 때 마다 해당 크기의 dataSize만큼 buffer크기(Count)가 갱신 될텐데 그렇게 된다면 위의 조건에는 들어오게 될 일이 전혀 없게 되는거 아닌가요?
-
미해결유니티 머신러닝 에이전트 완전정복 (응용편)
예제 파일 실행 오류
a09.rnd_ppo.pya11.hypernetworks_ppo.py이 두 파일이 실행이 안됩니다. 나머지 파일은 잘 실행되네요.
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
Skill 관련 클래스가 빠져 있는 것 같습니다.
8주차 소스에 스킬 관련 클래스 들이 빠져 있는 것 같습니다.ColdSpread, AreaAirbone, LionShout,FireSword,MultiFireSword 등... 프리팹도 같이요.혹시 추가해 주실 수 있으실까요?
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
보충강의 해주시면 안될까요 ㅠㅠ
강의보다가 어렵고 헷갈린거 있으면 파트 3 보시라고해서 보면서 공부하고있습니다 그럼에도 ..복잡하고 이해하기어렵습니다 혹시 보충강의 만들어 주시면 안될까요 어렵고 흡수가 잘안될때 어떻게 하면 효율적으로 공부할수있나요 저만 못따라가는거 같고 속상합니다 게임 너무 만들고싶습니다 도와주시면 감사하겠습니다
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
Addressable 스프라이트 파일 가져오기
현재 프로젝트에서는 스프라이트 single 타입으로 하나씩 가져오면서 사용중인데만약 스프라이트들이 하나의 파일로 묶여있을땐 어떻게 가져오고 사용법은 어떻게 해야하나요?