묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
클라이언트 에러 및 버그들
안녕하세요! 강의를 보며 멀티플레이 게임 제작을 공부 중인 학생입니다.현재까지 나온 강의를 모두 듣고 클론 코딩을 하였는데 종종 클라이언트에서 에러가 발생합니다.깃허브 코드와 강의를 다시 봐도 해결이 힘들어 질문을 작성하게 되었습니다. client 화면에서 hero 들이 모두 화면 중앙에 배치되는 현상host는 문제 없이 host와 client영역으로 나뉘어져 있습니다.이 경우client에서 host보다 먼저 herospawn을 하면 null에러가 뜹니다.NullReferenceException: Object reference not set to an instance of an objectSpawner.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이 되어 에러 발생 버그들은 각 관련된 처리를 하지 않아 발생한 것 같지만, 위의 클라이언트 문제는 해결법을 모르겠습니다
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
multiplay부분 에러
Library\PackageCache\com.unity.multiplayer.tools\NetVis\Configuration\OwnershipSettings.cs(41,24): error CS0103: The name 'CustomColorSettings' does not exist in the current contextmultiplay 열심히 보고 있는데요. 시작부터 이런 에러가 나와서 앞으로 나가지를 못 하고 있네요.
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
Summon 소환
안녕하세요 선생님 잘 다녀오셨나요 ? ?? 😃 만들던 게임 날라가서 복습 한다 생각하고처음부터 다시 하고 있습니다 ......캐릭터 소환이 안됩니다시뮬레이터에서 소환버튼이 잘 눌려서 소환가능한데game 창에서는 소환버튼 클릭이 안됩니다 canvas 설정이나 그런게 필요한가요 ... 시뮬에서는 잘 소환되는데 game창에서는 소환이 안됩니다 이유를 모르겠습니다;;
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
유니티6로 배우는 실전 멀티플레이 디펜스의 [로비생성] 편에 질문있습니다.
이전까진 문제없이 잘 이해하고 코드도 실행되었습니다. 그런데 [로비생성] 강의를 보고 따라했더니 오류가 발생했습니다. Unity.Services.Lobbies.LobbyServiceException: lobby code 'BARB6QOAUYDBBMLVUPZQBE' contains an invalid character 'O' (U+004F) at index 6 ---> Unity.Services.Lobbies.Http.HttpException`1[Unity.Services.Lobbies.Models.ErrorStatus]: (400) HTTP/1.1 400 Bad Request...생략...... 호스트는 잘 만들어지는데요, 다른 플레이어로 조인하려고 하면 저런 빨강 글씨의 오류가 발생합니다.인터넷에 찾아보니 외국 포럼만 나오는데요, 버그같기도 하고 그러네요. 제가 고치기 힘들어서요. 혹시 중간강의에서 코드를 통째로 올려주실 수 있나요? 저 오류때문에 코드를 실행하진 못하고, 코드 따라치면서 논리만 이해하는 식으로 공부하고 있습니다.코드를 실행하면서 게임을 돌려보는 실습까지 해보면 재밌긴 하겠지만요. 강의는 재밌게 잘 보고 있는데, 저 오류가 아쉽네요.
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
섹션4-로비생성 작업 중(32:26)중 첫 실행시 [Vivox]: System.ArgumentException: 'server' is null or empty 오류 발생합니다.
섹션4-로비생성 작업 중(32:26)중 첫 실행시 다음과 같은 오류가 발생합니다.[Vivox]: System.ArgumentException: 'server' is null or emptyParameter name: serverUnityEngine.Logger:Log (UnityEngine.LogType,string,object)Unity.Services.Vivox.VivoxLogger:LogException (System.Exception) (at ./Library/PackageCache/com.unity.services.vivox/Runtime/SDK/Utils/VivoxLogger.cs:16)Unity.Services.Vivox.VivoxServiceInternal:.ctor (string,string,string,string,bool,bool,Unity.Services.Authentication.Internal.IAccessToken,Unity.Services.Authentication.Internal.IPlayerId,Unity.Services.Authentication.Internal.IEnvironmentId) (at ./Library/PackageCache/com.unity.services.vivox/Runtime/VivoxServiceInternal.cs:140)Unity.Services.Vivox.VivoxPackageInitializer:Initialize (Unity.Services.Core.Internal.CoreRegistry) (at ./Library/PackageCache/com.unity.services.vivox/Runtime/VivoxPackageInitializer.cs:41)Unity.Services.Core.Internal.CoreRegistryInitializer/<>c__DisplayClass3_0/<<InitializeRegistryAsync>g__InitializePackageAsync|2>d:MoveNext () (at ./Library/PackageCache/com.unity.services.core/Runtime/Core.Internal/Registry/CoreRegistryInitializer.cs:91)System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Start<Unity.Services.Core.Internal.CoreRegistryInitializer/<>c__DisplayClass3_0/<<InitializeRegistryAsync>g__InitializePackageAsync|2>d> (Unity.Services.Core.Internal.CoreRegistryInitializer/<>c__DisplayClass3_0/<<InitializeRegistryAsync>g__InitializePackageAsync|2>d&)Unity.Services.Core.Internal.CoreRegistryInitializer/<>c__DisplayClass3_0:<InitializeRegistryAsync>g__InitializePackageAsync|2 (Unity.Services.Core.Internal.IInitializablePackage)Unity.Services.Core.Internal.CoreRegistryInitializer/<>c__DisplayClass3_0/<<InitializeRegistryAsync>g__TryInitializePackageAsync|0>d:MoveNext () (at ./Library/PackageCache/com.unity.services.core/Runtime/Core.Internal/Registry/CoreRegistryInitializer.cs:63)System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Start<Unity.Services.Core.Internal.CoreRegistryInitializer/<>c__DisplayClass3_0/<<InitializeRegistryAsync>g__TryInitializePackageAsync|0>d> (Unity.Services.Core.Internal.CoreRegistryInitializer/<>c__DisplayClass3_0/<<InitializeRegistryAsync>g__TryInitializePackageAsync|0>d&)Unity.Services.Core.Internal.CoreRegistryInitializer/<>c__DisplayClass3_0:<InitializeRegistryAsync>g__TryInitializePackageAsync|0 (Unity.Services.Core.Internal.IInitializablePackage)Unity.Services.Core.Internal.CoreRegistryInitializer/<InitializeRegistryAsync>d__3:MoveNext () (at ./Library/PackageCache/com.unity.services.core/Runtime/Core.Internal/Registry/CoreRegistryInitializer.cs:48)System.Runtime.CompilerServices.AsyncTaskMethodBuilder`1<System.Collections.Generic.List`1<Unity.Services.Core.Internal.PackageInitializationInfo>>:Start<Unity.Services.Core.Internal.CoreRegistryInitializer/<InitializeRegistryAsync>d__3> (Unity.Services.Core.Internal.CoreRegistryInitializer/<InitializeRegistryAsync>d__3&)Unity.Services.Core.Internal.CoreRegistryInitializer:InitializeRegistryAsync ()Unity.Services.Core.Internal.UnityServicesInternal/<>c__DisplayClass32_0/<<InitializeServicesAsync>g__InitializePackagesAsync|1>d:MoveNext () (at ./Library/PackageCache/com.unity.services.core/Runtime/Core.Internal/UnityServicesInternal.cs:170)System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Start<Unity.Services.Core.Internal.UnityServicesInternal/<>c__DisplayClass32_0/<<InitializeServicesAsync>g__InitializePackagesAsync|1>d> (Unity.Services.Core.Internal.UnityServicesInternal/<>c__DisplayClass32_0/<<InitializeServicesAsync>g__InitializePackagesAsync|1>d&)Unity.Services.Core.Internal.UnityServicesInternal/<>c__DisplayClass32_0:<InitializeServicesAsync>g__InitializePackagesAsync|1 ()Unity.Services.Core.Internal.UnityServicesInternal/<InitializeServicesAsync>d__32:MoveNext () (at ./Library/PackageCache/com.unity.services.core/Runtime/Core.Internal/UnityServicesInternal.cs:151)System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Start<Unity.Services.Core.Internal.UnityServicesInternal/<InitializeServicesAsync>d__32> (Unity.Services.Core.Internal.UnityServicesInternal/<InitializeServicesAsync>d__32&)Unity.Services.Core.Internal.UnityServicesInternal:InitializeServicesAsync ()Unity.Services.Core.Internal.UnityServicesInternal/<InitializeAsync>d__27:MoveNext () (at ./Library/PackageCache/com.unity.services.core/Runtime/Core.Internal/UnityServicesInternal.cs:80)System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Start<Unity.Services.Core.Internal.UnityServicesInternal/<InitializeAsync>d__27> (Unity.Services.Core.Internal.UnityServicesInternal/<InitializeAsync>d__27&)Unity.Services.Core.Internal.UnityServicesInternal:InitializeAsync (Unity.Services.Core.InitializationOptions)Unity.Services.Core.UnityServices/<InitializeAsync>d__21:MoveNext () (at ./Library/PackageCache/com.unity.services.core/Runtime/Core/UnityServices.cs:128)System.Runtime.CompilerServices.AsyncTaskMethodBuilder:Start<Unity.Services.Core.UnityServices/<InitializeAsync>d__21> (Unity.Services.Core.UnityServices/<InitializeAsync>d__21&)Unity.Services.Core.UnityServices:InitializeAsync (Unity.Services.Core.InitializationOptions)Unity.Services.Core.UnityServices:InitializeAsync () (at ./Library/PackageCache/com.unity.services.core/Runtime/Core/UnityServices.cs:79)NetManager/<Start>d__2:MoveNext () (at Assets/00_Scripts/Network/NetManager.cs:22)System.Runtime.CompilerServices.AsyncVoidMethodBuilder:Start<NetManager/<Start>d__2> (NetManager/<Start>d__2&)NetManager:Start () at Assets/00_Scripts/Network/NetManager.cs:22 여기 부분 코드가 await UnityServices.InitializeAsync(); 인데 어떻게 디버깅 해야 할 지를 모르겠습니다.
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
씬의 기즈모 조절
섹션3. 캐릭터 공격 시작부분에서 씬 화면에 있는 이런 기즈모들은 어디서 조절 가능한가요?
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
애니메이션
안녕하세요 애니메이션 작업 하실때 시간 나누어 주는거 기준이 있나요 ?? 한개당 5초씩 잡아 주는게 좋은가요 ?
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
Animator오류
안녕하세요 똑같이 다 수정했는데 공격 애니가 실하지않고 사진처럼 저 오류 가나옵니다 뭐가 잘못되고있는건가요 선생님
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
네트워크 오브젝트 설정
학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요 안녕하세요 선생님 Hero에게 network Object 넣었을때 hash값이 저는 0이고 선생님은 다르네요 그래서 Default network Prefabs 에 자동으로 추가되지않아서플러스 버튼 눌러서 추가하면 정상 작동되긴하나 선생님이랑 방법이 틀려서 찝찝합니다 뭐를 실수하고있는건가요
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
NetworkVariable<>, ClientNetworkTransform 사용 질문
강의를 보던 중 궁금한 점이 생겼습니다. 몬스터의 체력변경을 수동으로 ServerRpc,ClientRpc를 사용했는데, NetworkVariable<>을 사용하지 않으신 이유가 있으실까요? NetworkVariable<int> 같은 형식으로 해당 변수를 선언하면 그 변수가 알아서 다른 클라이언트에게 전파되어 동기화 된다고 배웠습니다. ugs 패키지를 임포트하고나면 오브젝트에 ClientNetworkTransform 컴포넌트를 부착할 수 있더라구요. 이걸 추가하면 그 오브젝트의 TRS(이동,회전,크기) 모두 자동으로 동기화를 해주는 듯 하던데 이것을 사용하지 않으신 이유가 있으실까요? 처음 배우는 입장에서 동기화를 신경쓰기가 제일 까다로운 부분인데 이 컴포넌트를 사용하면 적어도 트랜스폼에 한정해서는 동기화에서 도움을 받을 수 있는 것처럼 보입니다.
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
소환 위치
안녕하세요 선생님 혹시 나중에 한 자리에같은 속성끼리 3마리 씩 소환예정인가요??아니면 한자리에 한마리만 스폰가능하나요