안녕하세요. 이번에 처음으로 루키스님 강의를 접하게 되었습니다. 사실 서버나 데이터베이스 이런거 연동없이 클라이언트로만 게임을 만들어보는 건 어느정도 해봐서 괜찮을 줄 알고 강의를 구매했습니다. 하지만 이 부분에 대한 개념이 없다보니 수업자료의 소스코드를 봐도 뭐가뭔지 하나도 모르겠더군요. 그래서 루키스님이 따로 만드신 유니티 기본 강의를 먼저 듣거나 병행하는 등의 방법으로 해당 강의를 들으려 합니다. PART4부터 PART9까지 수강을 하고 들으면, 이 정도 프레임워크까지는 혼자서 만들 수 있는 수준이 될 수 있을까요?
강의 23:26초 화면 동일 쓰레드가 락을 획득했는지 여부 확인하는 코드에서 int lockThreadId = (_flag & Write_mask ) >> 16; if (Thread.CurrentThread.ManagedThreadID == lockThreadId) 이 부분이 있는데 쓰레드 아이디는 항상 15비트 이하의 정보로 제한이 되어있는건가요? 15비트 정보를 초과한 숫자가 들어오면 문제가 될듯 보이는데 코드 실행해보면 정상작동되네요.
public void Send(byte[] sendBuff) { lock (locked) { sendQueue.Enqueue(sendBuff); if (pendingList.Count == 0) RegisterSend(); } } 이 부분에서 lock이 걸려있으면, 먼저 들어간 스레드가 작업을 완료할 때 까지 다른 스레드가 접근을 못하잖아요? 근데, 먼저 작업을 하는 스레드가 pendingList에 있는 값을 다 처리하기 전까지는 lock이 안 풀리고, 다 처리를 했다면 pendingList.Clear();를 통해 Count는 항상 0을 반환할텐데 if(pendingList.Count == 0) 부분을 체크할 필요가 있는지 궁금합니다.
PriorityQueue.cs 파일을 chat gpt 돌려가며 공부하던 중 최대힙과 최소힙이 있다는 것을 알게 되었습니다. 해당 스크립트에서 사용하는 힙은 최대힙인것 같은데 우선순위큐를 힙으로 구현할 수 있다고 알고 있습니다. 이 강의서 사용하게 된 소스에서 최대힙을 사용하는 이유가 처리해야할 작업의 우선순위가 가장 높은것부터 작업시키기 위해 그런것 같은데 최소힙을 사용하게 되면 어떤 문제가 발생하는지 궁금합니다~
안녕하세요 M2 1주차 강의(섹션 1. 클라/서버 프레임워크와 이동 동기화)를 들어봤는데 서버와 클라 강의가 너무 문외한이라 환불하고 M1강의를 살려고 했는데 이미 자료를 다운받아서 환불이 불가능 하더라고요. 질문1. 2주차부터는 전투, AI, 자동사냥등 유니티 게임 기능구현이 주된 내용같은데 2주차부터 제대로 들으면 될까요? 질문2. 1주차 내용이 설명이 없어 이해가 안되는데 이에 맞는 강의추천이나 문서 알려주실 수 있나요?
안녕하세요 루키스님^^ 루키스님 덕분에 고퀄 강의를 또 듣게 되어 정말 무궁한 영광입니다. 프로젝트가 어떻게 완성되어 갈지 흥미진진하고 너무 기대됩니다. ㅎㅎ 들뜬 마음을 부여잡고 복습을 하다가 문득 라이브에서는 캐치를 못한 부분이 있어서 바쁘신 와중에 질문을 올리게 되었습니다ㅜ 다름이 아니고 기존 강의에서는 서버 프로젝트에서 패킷모아보내기 관련 코드가 있던 것으로 기억합니다. 이번에는 해당 부분이 보이질 않는 것을 보니 일부러 해당 부분을 빼놓으신 것 같은데 혹시 이번 프로젝트에서는 패킷 모아보내기 작업은 따로 안하실 예정이신가요?
C#게임서버 part4 도 보고 유니티연동 part7도 보고 이것저것 띄엄띄엄 보느라 제대로 정리도 안되고 그러고 있는데요 M2 이번에 수강신청후 코드다운받아서 비주얼 2019로 켰는데 위와같이 오류가 뜹니다...이걸 어떻게 해결할수있나요? 잘 안보이는데 현재.NET SDK에서는 .NET 8.0을 대상으로 하는것을 지원하지 않습니다 .NET 6.0 이하를 대상으로 하거나 .NET8.0을 지원하는 .NET SDK버전을 사용하세요 이렇게 프로젝트들 마다 뜨네요...
똑같이 디버깅을 실행을 하는데 mg 값에 Managers를 찾지 못하고 null 값으로만 출력이 됩니다 실행 전에도 불필요한 값 할당이라는 경고가 뜨는데 어떤 문제가 있을까요? 앞 부분에서 실수가 있을까 해서 unity 설정부터 다시 따라했음에도 똑같이 Managers를 찾지 못하고 null 값만 나오네요.
transform.rotation = Quaternion.LookRotation(Vector3.forward); transform.position = transform.TransformDirection(Vector3.foward * Time.deltaTime * _speed); 강의를 듣고, 질문글들을 읽어보았을때 위의 코드에서 rotation일때 Vector3.forward는 world 좌표계에서의 (0, 0, 1) 이고, position일때의 Vector3.foward는 local 좌표계에서의 (0, 0, 1)이라고 이해했는데 Vector3가 어느경우에 world 혹은 local 좌표계에서 사용되는건지 이해가 잘 가지 않습니다.
강의 듣고 활용 중에 도저히 스스로도 해결 못하겠는 부분이 생겨 질문합니다! Animator anim; <을 붙히지 않으면 the name 'anim' does not exist in the current context 오류가 발생하고 앞에 Animator anim;을 붙혀주면 NullReferenceException: Object reference not set to an instance of an object 오류가 발생합니다 해결 방법을 꼭 알고 싶습니다 ㅠㅠ anim.SetBool을 지워주면 정상적으로 작동하는 것으로 보아 위 코드가 문제는 맞는 것 같습니다
ThreadLocal을 사용하는 이유 ThreadLocal을 사용해서 전송작업중인 스레드마다. 독립적인 버퍼를 보장해주었는데 , 강의 마지막에 왜 여러 스레드에서 인스턴스에 접근이 가능하다는건지 이해가 되지 않습니다. 세션에서 스레드 버퍼를 참조하고 있을 가능성 때문인가요? 스레드 로컬을 이용해 공간 독립성을 보장해준 것이 아닌가요? 또한 실제 SendBuffer를 이용하는 부분은 스레드별로 보장되어 있는것이 아닌가요? 이해가 되지 않습니다 ㅠ