절대강좌! 유니티6 - 네트워크 게임 개발 마스터클래스 (Part3) : Netcode로 개발하는 2D RPG
강사님의 다른 강좌들을 보니 네트워크 게임쪽에 상당한 경험이 있으신거 같아 조언을 구하고자 합니다. 현재 네트워크 대전 디펜스 게임을 만들고 있는데, 로비가 별도로 있고 여기서 대전신청을 하면 조건에 맞는 유저를 찾아서 1:1로 방 생성해서 대전을 하는 구조입니다. 실제 인게임 내에서는 미니언들이 양쪽 모두 공평하게 생성되는 상황이고 내 크리처도 내보내고 타워도 지으면서 적의 미니언들을 막아내고 적의 본성을 부수면 이기는 게임을 작업 중에 있습니다. 한 화면으로 구성되며 한 화면에 최대한 등장하는 적들은 양쪽 합쳐서 30~60마리정도가 있을 수도 있을거 같습니다. 평균 10마리 내외일거 같구요. 사실 기존에 순수 C#서버에 gRPC 프로토콜로만 작동하던 게임이 있었는데 좀 옛날거라 요즘 기술로 다시 만들고 있습니다. 서론이 좀 길었는데 질문은 이것입니다. 위 상황으로 짐작해 봤을 때 Netcode for GameObjects 방식으로 작업이 가능할까요? 아니면 다른 솔루션을 이용해야 할까요? (포톤, Netfish, Netcode for Entitiese등) 솔직히 로비나 로그인 처리등은 기술적으로 크게 부담은 없는데 인게임내에서 다량의 적이 싸울때 싱크로 문제가 있을거 같아 걱정입니다.
누락된 부분이 있는거 같아서 질문드립니다 CardSelector.cs 에서 SelectCard 함수를 정의는 했지만 사용하는 곳이 없음 Base_Canvas.cs 에서 SetSkillFrame() 함수를 정의했지만 사용하는 곳이 없음. 추후 강의에 나올 순 있지만 섹션3 까지 들은 상태에서는 찾을 수 없어서 질문 남깁니다. 추가로, 위 부분들을 사용하려면 카드 클릭(선택) 하는 함수 A를 만들고 A -> 1번 -> 2번 흐름으로 실행되어야 할 것 같은데, 카드 선택하여 1,2번을 호출하는건 직접 만들어야 하는 부분일까요?
안녕하세요. 강의 잘 보고 있습니다. 선택 카드 UI 강의대로 진행 중 Selector의 Card 배열에 Card GameObject를 넣는 도중 아래 사진과 같은 에러가 발생해서 Q&A 드립니다. 사용 Unity 버전은 6.0(6000.0.58f2) 입니다. 아래는 게임 실행 시 발생하는 콘솔 로그 입니다. 혹시 이슈가 뭔지 아실까요? (첫번째 로그를 보면 Image 가 없다고 하는거 같은데 관련없는 내용인 것 같네요.) 추가로, 게임 시작할 때 다른 GameObject의 Inspector를 띄워놨다가 Seletor를 선택하는 순간 error 발생하고 게임이 멈추네요. 다른 Inspector를 선택하고 있는 상태로 계속 진행하면 잘 되네요! 혹시 이것과 관련해서 비활성화상태임에도 Selector를 클릭하는 순간 강제로 start나 awake 같은 유니티 함수가 실행되어서 문제가 발생하는걸까요?
12강이 안나온 상황에서 수료증이 필요해서 이전에 문의 드렸고 지식공유자님이 12강을 닫아주셨는데요 지금 현재 상황이 학습하기를 눌러서 목록 리스트에서는 100퍼센트라고 뜨는데요 아래 2개의 사진대로 98.11%로 되어서 수료증이 나오지 않는상황입니다. 이거는 시스템상 문제인것같은데, 확인 부탁드립니다.
현재 21강 화염구 강의를 시청하고 있습니다. 23분 51초에 가면 CardSelector.cs 의 SelectCard 메소드를 보는 장면이 있는데, 이 부분에서 if(i == value) { cards[i].SetAnimation("Card_Select"); MANAGER.SESSION.SelectedCard(cards[i].card); cards[i].StarCheck(); } 이렇게 코드가 있습니다. 그런데 cards[i].StarCheck() 이 메소드는 제가 이전 강의를 둘러봐도 안보이더라구요. 18강 카드 DataBase 강의의 SelectCard 메소드 수정하는 부분에서는 전혀 StarCheck 메소드가 나타나지않았는데, 위에 말한 23분 51초 장면에서는 저 코드가 떡하니 존재하네요. 혹시 이 코드는 중요한 부분이 아닌가요? 아니면 코드가 어떻게 되는지 알려주실 수 있나요? /// 09-16 추가 혹시 제가 잘못봤나싶어서 다시 강의를 보았지만 확실히 18강에서 card.cs 의 초기화 메소드 부분에 코드를 작성할 때 StarCheck 메소드는 없었습니다. 19강에서는 SkillFrame 스크립트만 소개하는 부분이였고, 20강의 10분 39초쯤에 가보면 card.cs에 갑자기 StarCheck 메소드가 이미 들어있습니다. 원래 19강에 있어야했던 것인지 모르겠지만, 현재 31강을 들은 시점에서, 31강의 10분 57초쯤으로 가시면 StarCheck 메소드 코드 전체가 나옵니다. 이 부분을 보고 직접 수정해야할 듯 합니다.
SelectCard()를 시작부터 작동하도록 넣었을 때, 오류가 발생하였습니다. NullReferenceException: Object reference not set to an instance of an object CardSelector.Initialize () (at Assets/Packages/06.Script/UI/CardSelector.cs:17) Base_Canvas.SelectCard () (at Assets/Packages/06.Script/UI/Base_Canvas.cs:61) Base_Canvas.Start () (at Assets/Packages/06.Script/UI/Base_Canvas.cs:45) 계속 찾아보고 있는데 일단 Null문제를 해결하지 못해 Update문에서 Q를 눌렀을 때 함수가 나타나는 걸로 임시로 수정을 했었는데 이부분을 어떻게 수정해야 하는지 궁금합니다.
저는 전부터 꾸준히 질문을 계속해 왔었던 사람인데요 개발 초보이긴 하지만 카드 셀렉터 문제도 스스로 결국 고치고 잘 따라 왔습니다. 하지만 또 문제가 생겼습니다. 39강 부터 입니다 저는 개발자님의 에셋 5개를 가지고 있는 데요 개발자님의 오브젝트를 보면서 Treasure 이미지는 보이지 않아 그냥 대체 하는 것으로 메모 하고 스크립트 작성하고 넘어왔습니다 하지만 42강 부터 게임 오브젝트 미리 조합하셔서 다 만드셨기에 초보자 로선 스스로 에셋들을 조합해서 폭탄 연출 만드는 것은 조금 버겁습니다. 혹시 폭탄 연출 오브젝트를 어떻게 만드셨는지, 어떤 에셋에 있는 것을 활용하여 만드셨는 지 방법을 자세히 알려주실 수 있으신가요?
그동안 수업을 정말 열심히 가르쳐주셔서 아주 즐겁게 들었습니다. 감사드립니다. 하지만 제가 어디서부터 무언가를 빠뜨렸는지 이런 오류가 생겼는데 이걸 어떻게 해결해야 할지 모르겠습니다. NullReferenceException: Object reference not set to an instance of an object CardSelector.Initalize () (at Assets/00.scripts/UI/CardSelector.cs:17) Base_Canvas.SelectCard () (at Assets/00.scripts/UI/Base_Canvas.cs:73) Base_Canvas.Start () (at Assets/00.scripts/UI/Base_Canvas.cs:25) 현재 이런 오류가 나고 있습니다. 실행하면 낙뢰 카드만 3개가 나오고 눌러도 진행이 안됩니다. Base_Canvas에서 private void Start() 여기서 SelectCard(); 이 부분을 지우면 실행은 됩니다만, 이렇게 해결하는 것은 아닌 것 같아서 질문합니다. 저는 21.화염구 강의를 듣고 있던 사람인데, 그동안 열심히 오류를 해결해왔지만 이번엔 어떻게 해결해야할지 모르겠습니다.
HP 패시브 10:35때부터 별표 문제에 대한 언급이 들어갑니다. 그리고 1분 정도 할애되면서 별표 생성과 문제를 해결하는 부분이 나옵니다. 혹시나 별표 구현에 질문이 있으실 분들에게 도움이 되실 내용을 옮겨봅니다. 1단계 : 별표 UI 구현 별표 UI는 이렇게 구현하였습니다. 강의 내용 중 Horizontal Layout과 Content Size Fitter를 활용하는 부분을 응용하였습니다. 영상 내용에서는 나중에 나올 것 같습니다. (찾게 되면 남기겠습니다.) 2단계 : 인스펙터창 파라미터 넣기 StarParent 라는 변수는 "31강 HP패시브의 11:30"부근에서 StarParent 변수에 대한 짤막한 내용이 나오길래 유추하여 작성하였습니다. 3단계 : 실제 구현 상황 강의 내용을 따라했을 경우, 올바르게 작동되는 걸 확인할 수 있었습니다. 구체적으로 31강 HP 패시브의 10:35 ~ 11:40 동안 나오는 코드와 내용을 보고 유추하여 제작하면 별표 UI를 제작할 수 있습니다. 혹여나 이 부분에 대해서 언제 해결되나 또는 어떻게 해결해야 하나 고민하시는 분들이 계실까봐 내용 공유합니다.
SelectCard()를 시작부터 작동하도록 넣었을 때, 오류가 발생하였습니다. 그 전에는 강의 내용과 동일한 오류를 내면서 강의 내용대로 따라왔는데 해당 구간의 오류를 이해해보려다가 임시 해결책으로 대체하였습니다. NullReferenceException: Object reference not set to an instance of an object CardSelector.Initialize () (at Assets/Packages/06.Script/UI/CardSelector.cs:17) Base_Canvas.SelectCard () (at Assets/Packages/06.Script/UI/Base_Canvas.cs:61) Base_Canvas.Start () (at Assets/Packages/06.Script/UI/Base_Canvas.cs:45) 이런 오류가 발생하였습니다. 다음과 같이 조치를 취해서 정상 작동하고 있으나 혹시나 동일한 이슈가 발생하셔서 시작부터 레벨업을 못 하시는 분들이 계실까봐 글 남깁니다. 저는 Update()문에다가 레벨업해서 카드 고르는 메서드를 별도로 입력해두었습니다. 그리고 Start() 문에 있는 SelectCard() 메서드를 주석처리하였습니다. private void Update() { TimerText.text = Util_UI.FormatTime(MANAGER.SESSION.GameTime); if (Input.GetKeyDown( KeyCode.Space )) { SelectCard(); } } 혹시나 이 이슈를 이해하고 해결하신 분이 계신다면 꼭 좀 답변 부탁드립니다...
SkillFrame.cs 자료와 Base_Canvas.cs 자료는 확인할 수 있었습니다. 그러나 SkillFrame.cs의 Ienumerator CooltimeCoroutine(CardDB card, int Level) 메서드에서 메서드 지역 변수로 float cooltime을 초기화하고 설정해줄때 (9:32 부분) card.baseCooldown과 card.cooldownPerLevel 부분이 누락되어서 테스트를 해볼 수가 없네요... CardDB 스크립트도 참조되었으면 좋았을텐데 아쉽습니다..
앞으로의 강의에서 충분히 해결될 이슈 같지만, 그래도 12강에서 테스트 하시다가 의문을 가지실 분들도 계시지 않을까 싶어서 질문 하나 남깁니다. 이 이슈가 나중에 몇 강 강의에서 해결되는지 또는 간단하게 해결할 수 있는방법을 알고 싶습니다. 강의 내용 27분 22~34초대에서 스켈레톤이 움직이지 않고 앞으로만 움직이는 현상이 목격됩니다. 애니메이터의 MOVE 트리거가 발동되기 전에 스켈레톤이 비활성화되면서 생긴 이슈 같습니다. 실제로 강의 내용을 따라하다보면 똑같은 시점에서 같은 문제가 발생합니다. 스켈레톤 A는 애니메이션이 정상 작동하는 대상이고 스켈레톤 B는 애니메이션이 작동하지 않은 채 앞으로만 움직이는 대상입니다. 앞으로 다양한 몬스터가 나올 것을 기대하고 있기에, 충분히 추후에는 해결되는 이슈라고 생각하고 있습니다. 그래도 혹시나 12강에서 똑같은 이슈를 만나시고 궁금해하시는 분들이 계실까봐 가볍게 내용을 남깁니다.