묻고 답해요
148만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
빈공간 이동에서 잔상
저번과 같은 질문을 드려서 죄송합니다.빈공간이동에서 보면 30:43초 쯤에 클라이언트가 이동할때 서버 쪽에 저랑 같은 잔상이 생기는데해결방법이 없나요?
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
잔상
안녕하세요. 혹시 캐릭터의 위치를 서로 바꿀때 클라이언트의 서버 스포너위치에 옮겨질 캐릭터의 잔상이 남는데 무엇이 문제인가요? hero쪽에 if (IsServer) transform.parent = target.transform; 이 구문을 빼면잔상이 없어지긴 합니다.
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
프리팹 변경할때 가상플레이어 껏다 키면 됩니다!!
10:36초에서 프리팹 변경될때 virtual gamemode에서 해당 player를 껏다 키면 다시 적용 되어서 굳이 유니티 안끄고도 잘 플레이 되더라구여 다른 분들 위해서 혹시나 해서 올려봅니다!!!
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
안녕하세요. SetDamage() null 오류
SetDamage부분에서 계소 null이 나는데요. 어떤 부분을 확인해야 할까요? NullReferenceException: Object reference not set to an instance of an objectHero.SetDamage () (at Assets/02.Scripts/Player/Hero.cs:170)Bullet.Update () (at Assets/02.Scripts/Player/Bullet.cs:34)
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
릴레이 서비스 방코드를 찾지 못하는 문제
Unity.Services.Relay.RelayServiceException: Not Found: join code not foundrequestId: 549200a3-33be-4931-800c-0a0338144896 ---> Unity.Services.Relay.Http.HttpException`1[Unity.Services.Relay.Models.ErrorResponseBody]: (404) HTTP/1.1 404 Not Found릴레이 서버 잘 할당 되었고 방 코드도 잘 나왔는데 InputField에 직접 넣어서 실행하니까 위 에러가 뜹니다.. 어떻게 해결해야할지 모르겠습니다..
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
랜덤 매칭 대기시간 연장
로비 생성 강의의 33분경에 로비가 오랜 시간 방치되면 그 방으로 못 들어 가는 것을 확인했습니다. 하지만 강의 이후에 테스트를 해본 결과 꽤 짧은 시간이 경과했어도 이게 서버가 새로 만들어집니다.. 거의 동시에 (3~4초정도 까지) 눌러야 큐가 잡히게 됩니다.. 서버 생성 후 유효 기간을 늘릴 수 있는 방법에 대해 알고 싶습니다.
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
영웅 소환 오류
안녕하세요. Host는 정상적으로 작동이 됩니다. Client에서는 Host와 Client에서 생성한 영웅 모두 아래 가운데에 소환이 됩니다.그리고 Client측을 보면 index가 어떤 이유에서인지 모두 -1이 나와 히어로 홀더가 모두 아래쪽 가운데에 위치하고 있습니다.
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
빈 공간 이동에서 에러발생
안녕하세요 빈 공간 이동에서 에러가 발생해서요. 영웅 소환을 할 경우 client쪽에서 아래쪽 가운데에 계속 소환이 됩니다.원인은 클라이언트가 시작 시 홀더가 생성될 때 모두 아래쪽 가운데에서 생성되고 있었습니다.강의를 세번이나 보고 확인했는데 틀린 곳을 찾지 못하겠어요. 깃헙 주소도 부탁드려요.
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
몬스터 스폰 관련 질문
안녕하세요 강사님.강의 잘 보고 있습니다.지금 섹션 4. Multiplay의 몬스터 스폰 영상을 보고 있는데, Spawner 로직과 관련하여 궁금한 점이 있어 글을 남기게 되었습니다.영상 중에 강사님께서 “상대방의 몬스터는 위쪽에, 자신의 몬스터는 아래쪽에 나오는 것을 볼 수 있다.”라고 설명해주셨는데요,제가 직접 클라이언트 쪽 스폰 로직을 수정하여 테스트해본 결과, 호스트와 클라이언트 각각에서 상대방이 요청한 몬스터가 화면의 하단에 표시되는 것으로 확인되었습니다.물론 제가 아직 섹션 4. Multiplay의 몬스터 스폰 영상까지만 본 상태이므로, 이후 강사님께서 정정해주셨을 수도 있습니다. 다만 혹시라도 같은 부분에서 궁금증을 가지실 수강생들을 위해, 가능하시다면 이 내용을 한 번 확인해주시면 감사하겠습니다.제가 잘못 이해한 부분이 있다면 언제든 말씀 부탁드립니다.항상 좋은 강의 제공해주셔서 감사합니다.좋은 하루 되세요![Spawner에서 수정한 부분][클라이언트에서 본 각각의 몬스터]Client 0 즉, 호스트의 요청으로 스폰된 몬스터가 상대방인 클라이언트의 입장에서 아래쪽에 보이는 모습.Client 1 즉, 클라이언트 자신의 요청으로 인해 스폰된 몬스터가 상단에 위치한 모습 [호스트에서 본 각각의 몬스터]
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
영웅 랜덤 소환
안녕하세요 영웅 랜덤 소환에 대해서 궁금한 게 있어서 질문 드립니다사용하려는 히어로 에셋들이 다 프리팹으로 되어있고 스프라이트가 없어서 강의처럼 애니메이션을 갈아끼우는 방식이 적용되지 않습니다. 그래서 Hero_Database 스크립터블 오브젝트에 프리팹들을 저장하고 HeroSpawn함수 호출 시 database에 가져와서 생성하는 방식을 이용했습니다var data = Hero_Database.GetHero_Random();var go = Instantiate(data);이런 식으로 하면 사용하려는 모든 프리팹에 NetworkObject 컴포넌트를 달아야하는데 이 부분에 문제가 있을까요??..... 아니면 더 좋은 방법이 있을까요??
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
게임출시 관련
안녕하세요. 저는 이 게임을 조금만 변형하여 출시해 보고 싶은데요. 만약 이 게임을 출시한다면 제가 바꿔야 하는 것들이 어떤 것일까요? 제가 생각해보자면 각종 캐릭터 및 이미지 자료정도로 생각이 되는데요. 게임에 스토리와 흐름을 조금만 변형해서 가져가도 되는 것인지 궁금합니다.
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
캐릭터 판매 38분 질문
CheckGetPosition과 같은 경우에는 ServerRpc에서 해도 되는 부분 같은데요. 이것은 ServerRpc에서 할지 clientRpc에서 할 지 당사자가 결정하면 되는 부분일까요?
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
강사님. 감사합니다.
혹시나 3D방치형 게임은 혹시 할인 프로모션이 계획돼 있을까요? 항상 결제하면 할인이 되는 경우가 많았어서요.
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
캐릭터 이동1 24분부터 잘 안되요.
캐릭터 이동1편에서 24분전에 holder자체를 교환할 때는 됐는데요. holder안의 캐릭터 이동으로 변경시 캐릭터들이 자꾸 가운데사 만나는 게 됩니다. 그리고 강의에 parentholder에 대해서는 언급이 없었는데 무엇일까요?
-
해결됨[Unity6] 유니티6로 배우는 실전 멀티플레이 디펜스
함수에 대한 질문
제가 확실히 이해한 것이 맞는지 체크하고 싶어 질문 드려요. NetworkObject는 생성시 Instantiate함수만으로도 양쪽에 동기화 되어 생성된다. (생성만 되는 것인지 이동시 위치까지 동기화 되는건이지 궁금합니다.) ServerRpc함수 : 이 함수는 client의 작업은 client에서 하는 것이 아니라 host가 대리처리해 주어야 하기 때문에 client만 주로 호출할 일이 많다. ClientRpc함수 : host가 작동시킨 것들을 clinet에게 전달하거나 ServerRpc함수에 작업한 것을 다시 양쪽에 동기화해서 전송해주는 역할을 한다. 이 함수는 host와 client컴퓨터 양쪽에서 모두 실행된다. 위에 두 함
-
해결됨[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(); 인데 어떻게 디버깅 해야 할 지를 모르겠습니다.