안녕하세요! 강의를 보며 멀티플레이 게임 제작을 공부 중인 학생입니다. 현재까지 나온 강의를 모두 듣고 클론 코딩을 하였는데 종종 클라이언트에서 에러가 발생합니다. 깃허브 코드와 강의를 다시 봐도 해결이 힘들어 질문을 작성하게 되었습니다. client 화면에서 hero 들이 모두 화면 중앙에 배치되는 현상 host는 문제 없이 host와 client영역으로 나뉘어져 있습니다. 이 경우 client에서 host보다 먼저 herospawn을 하면 null에러가 뜹니다. NullReferenceException: Object reference not set to an instance of an object Spawner.HeroSpawn (System.UInt64 clientId, System.String rarity) Spawner 스크립트의 HeroSpawn(ulong clientId, string rarity) 함수의 var existingHolder = GetExistingHolder(temp, data.Name); 이 부분이 문제라고 뜹니다. host에서 herospawn을 먼저 하고 client에서 herospawn을 하면 null 에러 없이 랜덤하게 두 가지 경우가 나옵니다.. 위 사진처럼 client 화면의 중앙에 모든 hero가 배치되는 경우 host, client모두 정상적으로 배치되는 경우 그러나 위 두 가지 경우 모두 client는 host가 마지막으로 생성한 영웅만 생성됩니다. ex) host가 warrior 소환 시 client는 warrior 만 소환, host가 summon 버튼을 눌러 archer 소환 시, client는 그 후로 archer만 소환 client 에서 영웅 클릭 시, NullReferenceException 발생 CameraRay 스크립트의 MouseButtonDown() 함수의 else if (value == 1) Canget = holder.Holder_Part_Name.Contains("CLIENT"); 부분에서 발생합니다. 위 두 문제의 해결법을 알고 싶습니다 ㅠㅠ 게임을 실행하며 찾은 버그들 입니다. 내 진영에서 상대 진영으로 hero 이동 가능 hero 없는 빈 홀더 클릭 및 이동 가능 (ui도 뜸) 빈 홀더 클릭 후, sell 버튼 클릭 시 Sell() 함수 내의 UI_Main.instance.GetNavigation 부분 인덱스 범위 에러 발생 몬스터 클릭 시 CameraRay 스크립트 MouseButtonDown()가 호출되어 heroholder가 null이 되어 에러 발생 버그들은 각 관련된 처리를 하지 않아 발생한 것 같지만, 위의 클라이언트 문제는 해결법을 모르겠습니다
강의를 듣고 제가 느낀 매니저들을 관리하는 방식은 최상위 Managers를 통해 각각의 매니저를 접근하도록 만든 방식인거 같더라고요(저의 해석이 틀렸다면 지적부탁드립니다.) 제가 여기서 궁금한 점은 다른 방식으로 각각의 매니저들을 싱글톤으로 만들어서 하는 방식이 존재하는데, 강의가 만약 게임의 규모가 커진다면을 생각해서 코드를 확장하기시기때문에 저도 좀 더 생각해보아서 후자의 방식이 더 좋은방식이지않을까?라는 생각이 들었습니다. 이 주장의 근거는 1.매니저들이 점점커지면 Managers에게 초기화 부담도 커질것이다. 2.Managers에 문제가생기면 모든 개별 Manager가 작동하지 않는다. 3.각 매니저는 전부 Managers에서 초기화 되기때문에 한 매니저에 의존성이 있는 매니저가 있을때 초기화 순서를 잘 해놓지않으면 오류가 발생한다. 다시 강조하자면 "게임의 규모가 커진다면 개별적으로 매니저들을 관리하는게 더 관리하기 좋은 방식이지 않을까?"에 대한 루키스님에 의견을 듣고싶어 질문을 올립니다.
안녕하세요. 강의 자료 중 리소스 관련 질문 드립니다. 아래와 같이 강의 공지를 인지하고 있으나, 이제 막 게임 개발을 공부중이기에 참고용 리소스 제공이 가능하실지 문의 드립니다. 특정 장르의 게임 플레이 구현을 다루지 않습니다. 즉 RPG, 플랫포머, 퍼즐 등 특정 게임 자체의 구현을 다루는 강의가 아닙니다. 현재 문의중인 강의 마지막 부분 중 Stages/ 부분 구현에 막혀있습니다.
안녕하세요! 영웅소환 부 강의를 듣고 Ui 팝업 생성을 구현했습니다. 하지만 버튼을 누를 때마다, 팝업 clone이 계속 생성됩니다. 요부분 싱글턴 처리라던지, 이미 해당 팝업이 열려있는지 여부를 확인하는 부분과 같은 방어 로직 내용이 있는 강의가 있나요? 있다면 강의가 꽤 길어 제가 못찾고 있는 것 같아요 ㅠㅠ 강의 너무 잘 듣고 있습니다~ 그리고 제가 게임개발 인강에 기대했던 부분이 로딩시에 서버에서 리소스 다운받는 것, 저녁 이벤트 보상 같은 앱 푸시 어떻게 구현했나 궁금했는데요. 뒷 강의에 있는지 또는 추후에 강의하실 예정인지 문의드려요!
Library\PackageCache\ com.unity.multiplayer.tools \NetVis\Configuration\OwnershipSettings.cs(41,24): error CS0103: The name 'CustomColorSettings' does not exist in the current context multiplay 열심히 보고 있는데요. 시작부터 이런 에러가 나와서 앞으로 나가지를 못 하고 있네요.
ui 생성할 때 메모리 관련 질문 있습니다. 강의를 쭉 듣는 중입니다. UI 생성시에는 프리팹 제작, Instantiate(Resources.Load<>("UI/xxxx"))로 ui 생성하고 팝업 안에 아이템이 있는 경우에는 전부 생성 사용 종료 후 destroy 하는 방식 으로 이해했습니다. gameObject 생성 때 Object Pool 방식 구현 강의에서 메모리 관련해서 얘기 주셨는데요, 이런 ui 생성,destroy사용방식이 메모리 부하는 따로 없을까요? 방치형 게임에서 유아이도 많이 눌러서 많이 일어날거라 생각이 들어서요. SetActive로 관리하면 어떤지.. 다른 방법이 없나?? 궁금하여 문의드립니다.
현재 맥으로 강의를 듣고 있어서 비쥬얼스튜디오 대신 vscode로 수업을 따라가고 있습니다. 이런저런 방법으로 고쳐보려해도 터미널 창에 수업과 같이 같은 위치에 동그라미가 재생산(?)되지 않고, 아래줄로 무한정 그려지네요 ㅠ 게시판에 올라온 방법들 다 해봤는데도 안되네요.. code runner 확장도 설치해봤는데 안됩니다.. 저와 같이 vscode로 수업 들으시는 분은 안계신가요?... 이거 해결안되면 파트2 강의는 그냥 눈으로만 봐야할까 합니다..
현재 맥으로 강의를 듣고 있어서 비쥬얼스튜디오 대신 vscode로 수업을 따라가고 있습니다. 이런저런 방법으로 고쳐보려해도 터미널 창에 수업과 같이 같은 위치에 동그라미가 재생산(?)되지 않고, 아래줄로 무한정 그려지네요 ㅠ 저와 같이 vscode로 수업 들으시는 분은 안계신가요?... 이거 해결안되면 파트2 강의는 그냥 눈으로만 봐야할까 합니다..
안녕하세요. 지금 단계에서는 완벽한 테스트가 어려워서 강사님이 보시기에 어떨지 의견 듣고 싶습니다. Send 과정에서 락을 최소화하고 싶어서 C++ 버전을 조금 차용했습니다. ProcessSend()에서 RegisterSend()를 호출하는 식으로, 한 번에 하나의 송신만 담당하면 락을 줄일 수 있을 것 같아서요. public void Send(byte[] sendBuffer) { lock (_lock) { _sendQueue.Enqueue(sendBuffer); } if (0 == Interlocked.Exchange(ref _sendRegistered, 1)) RegisterSend(); } 이렇게 해서 한 번에 하나의 스레드 만 접근하게 하구요. void RegisterSend() { lock (_lock) { while (0 < _sendQueue.Count) { byte[] buffer = _sendQueue.Dequeue(); _pendingList.Add(new ArraySegment<byte>(buffer, 0, buffer.Length)); } _sendEvent.BufferList = _pendingList; } bool pending = _socket.SendAsync(_sendEvent); if (false == pending) { OnSendCompleted(null, _sendEvent); } } 큐에서 데이터를 가져와 _sendEvent.BufferList에 세팅할 때만 락 을 잡습니다. OnSendCompleted 는 전체에 락을 안 잡고 중간에만 락을 잡았습니다. void OnSendCompleted(object sender, SocketAsyncEventArgs sendEvent) { if (0 < sendEvent.BytesTransferred && SocketError.Success == sendEvent.SocketError) { try { Console.WriteLine($"Transferred bytes {sendEvent.BytesTransferred}"); lock(_lock) { _sendEvent.BufferList = null; _pendingList.Clear(); if (0 == _sendQueue.Count) { Interlocked.Exchange(ref _sendRegistered, 0); return; } } RegisterSend(); } catch (Exception e) { Console.WriteLine($"OnSendCompleted Error {e.Message}"); } } else { Disconnect(); } } 답변 부탁드립니다. 감사합니다!
만약에 로딩씬에서 온갖 싱글턴 매니저를 초기화한 후 메인씬으로 넘어가는 로직을 만든 경우, 매니저 오브젝트들이 전부 로딩씬에 배치해서 메인씬에서 개발할때는 Hierarchy 창에 아무것도 안보이고, 개발 모드에 들어가도 로딩씬을 거치지 않으니 아무 매니저도 안생길것 같은데, 이럴때는 어떻게 해결할수 있나요?
Title 씬에 UIManager를 추가한 뒤에 생긴 문제인데요, 이전 질문을 참고하여 URP인 경우 Camera의 Environment의 BackgroundType값을 Uninitialized로 해줬지만, 여전히 다른 색으로 덮혀 있네요. UIManager의 카메라를 비활성화하면 이렇게 잘 나옵니다. 제 환경이 유니티 6이라서 그런 걸까요?