묻고 답해요
169만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Util에 짠 코드가 잘이해 안됩니다.
Transform transform = go.transform.GetChild(0); 여기에서 게임오브젝트의 직속자식을 가지고 오는데 transform을 사용 한다는게 잘이해가 가질 않습니다... tansform은 위치와 관련된 컴포넌트 아닌가요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
lock과 send 질문!
public void Send(byte[] sendBuff) { lock (_lock) { _sendQueue.Enqueue(sendBuff); if (_pendinglist.Count == 0) RegisterSend(); } } // private void RegisterSend() { while (_sendQueue.Count > 0) { byte[] buff = _sendQueue.Dequeue(); _pendinglist.Add(new ArraySegment<byte>(buff, 0, buff.Length)); } _sendArgs.BufferList = _pendinglist; bool pending = _socket.SendAsync(_sendArgs); if (pending == false) { OnSendCompleted(null, _sendArgs); } } 처음에 send에서 lock을 걸고 pendinglist의 Count가 0일 때만 RegisterSend()를 호출하는데, RegisterSend() 내부에서 while문을 돌며 sendqueue의 count만큼 pendinglist에 sendqueue 데이터를 넣어주고 있잖아요? 근데, sendqueue의 count가 2이상인 경우가 가능한지 궁금합니다.. 위의 Send에서 lock을 걸어두면 RegisterSend()의 호출이 끝날때까지 다른 Session이 접근 못하지 않나요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
질문이있습니다
안녕하세요 선생님. class MyList<T> where T : Monster // T는 반드시 Monster 혹은 Monster를 상속받은 클래스여야 한다. 이 설명이 이해가 안가는데 T가 Monster 타입이어야되는 조건이 있는데 그럼 왜 모든 타입을 받을 수 있는 제너릭으로 만든건가요??
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
17:30 초 부근에 QueueUserWorkItem 테스트하는 부분에서
ThreadPool.SetMinThreads(1, 1); ThreadPool.SetMaxThreads(5, 5); for (int i = 0; i < 4; i++) ThreadPool.QueueUserWorkItem((obj) => { while (true) { } }); ThreadPool.QueueUserWorkItem(MainThread); for문 체크하실 때 5에서 4로 바꾸셨는데 저도 똑같이 했는데 출력이 안됩니다. 3이하로 내리니까 출력이 됩니다. 디버그로 쓰레드가 몇개 있는지 확인해봤는데 주 쓰레드 포함 5개밖에 없다고 뜹니다. 왜이럴까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
ReadOnlySpan관련
Rookiss님 강의 잘보고 있습니다. BitConverter로 ArraySegment<T> 또는 ReadOnlySpan을 new하는 부분에서 궁금한게 있습니다. struct는 stack영역에 할당된다고 하셨는데요 이걸 계속 쪼개서 new로 할당한다는 것은 Stack영역에 계속 복사된 부분만 새로 할당한다는 것이 맞나요? 만약 그렇다면 메모리에는 별 문제가 없는건가여?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
ArraySegment관련 질문
6분쯤에 ArraySegment가 Struct라서 스택영역에 할당되고 BufferList에 Add할 때 복사되어 전달된다고 설명하셨는데 struct가 스택영역에 할당되려면 몇가지 조건이 있는 것으로 알고 있습니다. 예를들면 16바이트 미만이고 멤버변수로 class가 없어야한다 등등... 그런데 위의 조건과 상관없이 Rookiss님이 설명하신 내용대로 되는 이유가 궁금합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
A* 알고리즘에서, 벽을 마주보고 있는 경우에 대해서
Monster와 Player가 벽을 마주보고 있는 상태에서 가끔 Monster가 Player에게 제대로 오지 못하고 있는 것 같습니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
설정 가져오기 내보내기.
"도구=> 설정 가져오기및 내보내기" 에서 본인의 비쥬얼 스튜디오 설정을 저장할수 있더라고요. 선생님 설정 하나 저장해서 crimsonasura@naver.com 으로 하나 보내주실수 없을까요? 가능하면 색상을 같이 맞춰서 따라해 보고 싶습니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
시점 이동 관련 질문
현재 내가 보고 있는 시점으로 카메로 이동이 되는 것과는 반대로 카메라가 보고 있는 시점으로 내가 이동 하는 방법이 있을까요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
void Start()
강의 내에서는 Init()로 순서와 상관없이 매니저 오브젝트를 생성하고 불러올 수 있게 했지만, 또 이후에도 비슷한 방법으로 처리를 하면 되겠지만 유니티 동작 순서를 알고 싶어서 질문드립니다. Managers.cs와 Player.cs 처럼 여러 오브젝트에 여러 스크립트가 있을 경우 void Start()와 Update()를 호출하는 순서가 궁금합니다. 그리고 이 순서가 맘에 들지 않는다면 순서를 바꾸는 방법이 있을까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
AcceptAsync() 수행시 항상 오류...
안녕하세요 마지막 DummyClient에서 ServerCore로 계속해서 요청 보내는 부분에서 이상한 에러가 나서 문의드립니다. ServerCore 쪽에서는 RegisterAccept에서 pending이 True 로 반환되고, DummyClient에서는 Connection refused Exception이 발생하네요 ㅠ System.Net.Internals.SocketExceptionFactory+ExtendedSocketException (61): Connection refused 192.168.35.35:7777 at System.Net.Sockets.Socket.DoConnect(EndPoint endPointSnapshot, SocketAddress socketAddress) at System.Net.Sockets.Socket.Connect(EndPoint remoteEP) at DummyClient.Program.Main(String[] args) in /Users/hun/Projects/Server/DummyClient/Program.cs:line 28 혹시 의심될만한 부분이 있을까요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
Fly()와 DoFly()
FlyableOrc orc = new FlyableOrc(); DoFly(orc); 를 메인함수에 작성을 하고 DoFly() 함수 안에서 flyable.Fly(); 를 호출하셨는데 그럼 FlyableOrc라는 몬스터는 Fly 속성 두개를 가지고 있는건가요? 인터페이스 함수안에 있는 Fly()와 FlyableOrc 클래스에 있는 Fly() orc.Fly(); 와 DoFly(orc);의 차이점이 궁금합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
타일맵의 크기 변경하기
Tilemap_Collision의 영역이 저렇게 크게 설정되어있는데, 저 네모 영역을 줄이고 싶으면 어떻게 설정해야 하나요?
-
미해결레트로의 유니티 C# 게임 프로그래밍 에센스
코드 다 똑같이 따라했는데 문제가 있습니다
이 Post Process 강의에 다른 분이 올려주신 질문과 저도 똑같은 문제인데요 ㅠㅠ 코드 다 똑같이 따라했는데 좀비들이 처음 시작하고 랜덤한 위치로 각자 달려가서 각자의 위치에 자리잡은 이후엔 순찰하지 않고 제 자리에서 멍때립니다. 그리고 좀비랑 맞닿을 정도로 앞까지 가야 그제서야 플레이어를 인지 합니다 다른 분 질문에 업데이트 해주시겠다고 댓글 남기셨던데 이에 대한 사항을 어디서 확인할 수 있을까요!
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강사님, 이동 동기화에 대한 질문 있습니다.
혹시, 이동 동기화에 대한 방법이 두 가지 있다고 하셨는데, 1) 서버에서 허락 패킷이 왔을 때 2) 클라이언트가 먼저 이동하고 있다가 서버에서 응답이 오면 보정(보간) 먼저, 2)은 배틀그라운드 게임이 제가 기억하기에 이동을 하다가 갑자기 순간적으로 뒤로 가는 현상이 발생하는데 이 방법을 사용한 것인가요?? --- 첫 번째 질문 1)의 경우에 대해서는 어떤 상황인지 잘 모르겠습니다. 혹시 예시가 있을까요?? --- 두 번째 질문 그리고, 제가 두달 전에 Unity의 WebGL 플랫폼을 사용하여 실시간 멀티플레이어 축구 게임을 만든 적이 있습니다. Unity Client + Node.JS로 만든 서버를 사용하였습니다. 저는 동기화에 대한 지식이 없었기에 생각해낸 방법이 Client에서는 숨겨진 '분신'을 만들어 절대 위치 패킷을 받으면 '분신'이 움직이고 실제로 보이는 캐릭터는 따라가도록 구현하였습니다. 그리고 서버에 보내는 좌표는 실제로 보이는 캐릭터의 좌표를 보냈습니다. (RagDoll Component를 사용하여서 다른 클라이언트와의 물리적 충돌이 활발하기 때문에 조금 늦게 모두 같이 이동시킬 방법을 생각하다가...) 물론 '분신'은 보이지 않고 Colider, Rigidbody도 없기 때문에 많이 애먹으면서 많은 런타임 버그들을 잡았었습니다. 혹시 이런 물리적 충돌이 많이 일어나는 경우의 실시간 멀티플레이어 게임들은 두 가지 동기화 방법 중 어떤 방법을 사용하나요? 또는 어떤 방법을 더 많이 사용하나요? --- 세 번째 질문 그리고 수업 너무 좋았습니다. 아직 더 배워야 겠다는 생각과 함께 뿌듯합니다. 감사합니다!! 답변부탁드리겠습니다!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Connect를 이용하여 여러소켓 생성후 문제점
안녕하세요 루키스님 정말 강의 도움 많이 받고 있어요 !!소켓을 10번 생성과함께 커넥트를 요청하는 부분에0.1초 딜레이를 주면 (*대부분*) 잘작동하더라구요 하지만, 저 딜레이를 빼면 아래 그림과같은 에러가 나와요! 저는 이것을 비동기에서 발생하는 문제점이라고 생각했습니다. 그래서 Receive에 _lock을 걸어서 실험도해봤지만여전히 같은 오류를 내고 있더라구요 혹시 이런 에러가 발생하는 부분의 가능성이나해결방법이 어떤게 있을까요? 딜레이를 주는경우대부분 잘되는것은 비동기 문제가 맞는걸까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘
질문
일반적인 게임에서는 실시간으로 계속 렌더링해주는것이 자연스럽지만 공부차원에서 질문드립니다. Program.cs에서 지금과 같은 상황은 Initialize()와 GenerateByBinaryTree()에서 이미 tile이 다 결정되므로 렌더링하는 board.Render()는 한번만 호출하면 되는 것이 아닌가요? 혼자 복습하는차원에서 다시 만들다가 프레임관리쪽을 구현하지 않은 상태에서 Render()했을때 윗쪽 wall이 Empty로 구멍이 뚫리는 현상이 발생했습니다. 그런데 while loop를 구현하면 Render()가 루프 안에 없어도 위쪽 wall이 문제가 되지않습니다. 프레임관리와 위쪽 wall이 뚫리는것이 무슨 관련이 있을까요? (Render함수가 while loop 바깥에 있음에도 while loop를 지우면 문제가 생기고 다시 구현하면 문제가 사라집니다.) ------------------------- 문제상황과 질문을 정리하면 1. Render()는 한번만 호출되도 될 것같아서 while loop 바깥으로 뺐다. 2. 뺴도 문제가 없음, 그러나 while loop를 지우면 위쪽 wall이 Empty로 뚫리는 문제 발생 3. 분명 1에서는 Render()가 while loop 바깥에 있었음에도 문제가 없었는데 2에서 while loop를 지우는게 왜 Render()에 영향을 주는지 궁금합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Player GameObject의 name이 이상해요.
전 캐릭터 오브젝트 이름을 Player로 하고 있는데, 이런 식으로 생성되는 캐릭터들의 이름에 Player_Root이 붙더니 실행할 때 마다 이름이 초기화가 되지 않고 _Root가 계속 뒤에 붙고 있습니다. vs에서 확인해보니, Root.name = $"{original.name}_Root"; 이후에 Original의 name도 뒤에 _Root가 붙고 있습니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문
팩토리얼 함수
마지막 팩토리얼 함수 오버플로우 문제를 해결할 때 if문에서 왜 return 1; 이 들어가야하는지 궁금합니다!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
transform.TransformDirection()에 대한 질문입니다.
안녕하세요 강의를 듣다 의문점이 생겨 질문을 드립니다 Debug.DrawRay()와 Physics.RaycastAll()은 월드를 기반으로 되어있고 레이저를 유니티짱이 바라보는 방향(로컬)으로 쏘기위하여 Vector3 look = transform.TransformDirection(Vector3.forward);로 좌표를 대체하셨는데, 1. Vector3.forward는 월드벡터를 나타내고, transform.TransformDirection()은 로컬벡터를 월드벡터로 바꾸는 기능을 한다고 알고 있습니다. 이것은 월드벡터를 월드벡터로 바꾸는 작업이라고 생각되어 이해가 잘 가지 않습니다. 2. 또, look 대신 Debug.DrawRay()와 Physics.RaycastAll()에 transform.forward를 집어넣어도 같은 기능을 하는 것 같은데 이렇게 써도 되는건지 궁금합니다.