현재 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 메소드 코드 전체가 나옵니다. 이 부분을 보고 직접 수정해야할 듯 합니다.
InvalidOperationException: You are trying to read Input using the UnityEngine.Input class, but you have switched active Input handling to Input System package in Player Settings. UnityEngine.Input.GetKey (UnityEngine.KeyCode key) (at <88b3b0a97d794d04b5f7cb0271c4f6e6>:0) NewMonoBehaviourScript.Update () (at Assets/scripts/PlayerController.cs:15) 이런식으로 뜨는데 왜그럴까요 ㅠㅠ
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를 눌렀을 때 함수가 나타나는 걸로 임시로 수정을 했었는데 이부분을 어떻게 수정해야 하는지 궁금합니다.
안녕하세요, 유니티 , 씨샵 공부를 선생님?에게 첫 스타트를 끊은 40살 입니다. 해당 강좌에서 씬뷰에서 흰색사각형 저는 정사각형 입니다. 선생님꺼는 직사각형인데 어디서 변환해야 해야 하나요.ㅜ 직장과, 투잡에 공부를 하려니 쉽지 않네요. 선생님강의는 짤막해서 운전중 보고, 자기전 보고 잠깐 짬내서 하고 하기 너무 좋습니다.
안녕하세요! 방금 작년부터 시작해서 1년동안 해당 강의 5회독 마쳤습니다. 문득 궁금해지는데, 이 정도 수준의 서버라면 개인적인 온라인 게임 프로젝트에 사용할 서버의 수준이 되는지 궁금합니다. 제가 게임 회사의 서버를 본 적이 없어서 궁금해지는것 같아요. 이 정도 수준의 서버를 프레임워크처럼 앞으로 사용하여 여기서 쌓아 올리면 될 것 같은데 어떤 의견이신지 답변 해주시면 감사하겠습니다!
안녕하세요. bullet을 prefab만들때 상위 wrapper를 만들어서 fbx를 자식으로 하는건 이해를 했습니다. player도 마찾가지로 wrapper를 만들고 player fbx를 자식으로 하려니 뭔가 firePos, animator등을 코드에서 찾으려니 GetComponent나 Find를 쓰기가 좀 애매하네요. 바로 자식만 찾으니... GetComponentInChildren 이런걸 쓰면 좋을지. 아니면 model을 찾고 거기서 다시 찾는지... player처럼 model에 직접 콤포넌트를 붙이는 식으로도 많이 하시나요? 어떤 방식으로 하는게 유지보수하는데 좋은지 궁금합니다.
안녕하세요. 강의 잘 듣고 있습니다. 총알을 아래와 같이 쐈습니다. 총구는 void Shoot() { Debug.Log($"FirePos Position: {firePos.position}, Rotation: {firePos.eulerAngles}"); Instantiate(bulletPrefab, firePos.position, firePos.rotation); } 총알 자체는 이렇게 힘을 주었습니다. void Start() { rb = GetComponent<Rigidbody>(); rb.AddRelativeForce(transform.forward * speed); } AddForce를 하면 정확히 잘 나가는데 AddRelativeForce를 하면 2배로 각이 회전되어 날라갑니다. 0도에서는 직진, 45도에서는 90도? 이런식으로 날라가네요. 로그로 각도를 확인해봐도 생성시 전역좌표는 문제가 없어보입니다. 제가 뭔가 잘못한것일까요? 확인 부탁드립니다.
안녕하세요! 강의 내용은 name을 받는 과정에서 byte[] 직렬화 및 역직렬화 하기 위해 nameLen을 count하고, 이를 ArraySegment에 넣는 과정인데요. 그 과정에서 다음과 같은 코드를 사용합니다. ServerSession.cs 이고, public override ArraySegment<byte> Write() 함수 내부입니다. // string ushort nameLen = (ushort)Encoding.Unicode.GetByteCount(name); success &= BitConverter.TryWriteBytes(s.Slice(count, s.Length - count), nameLen); count += sizeof(ushort); // nameLen(2) Array.Copy(Encoding.Unicode.GetBytes(name), 0, segment.Array, count, nameLen); count += nameLen; // name(n) 여기서 Array.Copy(Encoding.Unicode.GetBytes(name), 0, segment.Array, count, nameLen); 이 부분에서 count 대신 count + segment.Offset 를 사용하는 것이 올바르지 않을까 하여 질문드립니다. 이는 for문을 포함하여 코드 실행시 서버 측에서 다음과 같이 나타나기 때문입니다. Listening... PlayerInfoReq: playerId=1001, Name=NPC Received packet: size=20, packetId=1 PlayerInfoReq: playerId=1001, Name= Received packet: size=20, packetId=1 PlayerInfoReq: playerId=1001, Name= Received packet: size=20, packetId=1 PlayerInfoReq: playerId=1001, Name= Received packet: size=20, packetId=1 PlayerInfoReq: playerId=1001, Name= Received packet: size=20, packetId=1 Client connected: [fe80::9e56:3a99:3a3a:58be%18]:55626 OnDisconnected: [fe80::9e56:3a99:3a3a:58be%18]:55626 이처럼, 첫 1회만 NPC라는 네임이 제대로 나타나는 것을 볼 수 있습니다. 그러나 count + segment.Offset 를 사용했을 경우는, 다음과 같이 제대로 나타납니다. Listening... Client connected: [fe80::9e56:3a99:3a3a:58be%18]:55458 PlayerInfoReq: playerId=1001, Name=NPC Received packet: size=20, packetId=1 PlayerInfoReq: playerId=1001, Name=NPC Received packet: size=20, packetId=1 PlayerInfoReq: playerId=1001, Name=NPC Received packet: size=20, packetId=1 PlayerInfoReq: playerId=1001, Name=NPC Received packet: size=20, packetId=1 PlayerInfoReq: playerId=1001, Name=NPC Received packet: size=20, packetId=1 OnDisconnected: [fe80::9e56:3a99:3a3a:58be%18]:55458 물론 이후 리팩토링을 통해 작성한 코드에서는 전부 제대로 나타납니다. ushort nameLen = (ushort)Encoding.Unicode.GetBytes(this.name, 0, this.name.Length, segment.Array, segment.Offset + count + sizeof(ushort)); (리팩토링 코드) Offset을 사용하지 않을 경우 아마도 패킷을 덮어써서 이런 결과가 나타나는 것 같습니다.
안녕하세요 이 강의 80% 이상 수강하고 다시 반복해서 듣고 있고 있는데요. 초보지만 퀄리티 높고 유익한 강의로 오늘도 많이 배우고 있습니다. 정말 감사합니다. 다름이 아니라 PlayerPrefs 에 대해서 궁금해서 문의 좀 드리려고 합니다. PlayerPrefs 에 대해서 궁금해서 구글링을 했을 때에는 PlayerPrefs 의 경우 '편하게 사용할 수는 있지만 속도가 늦고 타입에 한계가 있고 특히 보안에 취약'하다고 파악을 했습니다. 사실 만들고자 하는 게임이 속도나 타입에는 크게 영향을 받지는 않지만 나중에는 굿즈나 인벤토리 데이터까지 데이터를 관리하게 되니 보안이 문제가 될 것 같아서 문의 드립니다. 궁금한 점은 PlayerPrefs 그럼에도 실제 프로젝트에서도 사용이 되는지? 만약 사용된다면 PlayerPrefs 보안관련 작업을 따로 수행하나요? 구글링을 하면서 Easy Save 라는 에셋 사용까지 이르게 되었는데, Easy Save 툴로 암호화된 파일로 유저 데이터를 로컬과 게임 규모에 따라서 서버에 저장해서 사용하는 것이 안정성이 있다고 파악을 했는데 이것도 괜찮은 방향인지 문의드립니다.