묻고 답해요
144만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결레트로의 유니티 C# 게임 프로그래밍 에센스
유니티 에디터 버전
유니티 버전을 2019.1이 아닌 다른 최신버전인 2022.3 버전으로 사용해도 되나요?
-
미해결유니티 Addressable 을 이용한 패치 시스템 구현
윈도우 빌드 파일에 업데이트가 반영되지 않습니다
안녕하세요 선생님, 강의 잘들었습니다!윈도우 빌드로 진행했고, 업데이트가 잘 되는지 확인하려고 아래 과정을 거쳤습니다.AddressableAsset을 추가해 Update a Previous Build로 에셋 빌드하고, play mode > use existing build로 이상 없이 파일 업데이트 하고 잘 진행됨.하지만 빌드 파일에서는 이 업데이트 내용이 전혀 반영되지 않아 질문 드립니다.hash값도 제대로 바뀐걸 확인했고, 서버에도 파일도 잘 업로드가 되었는데, 빌드 파일에서는 다운받을 데이터를 전혀 찾지 못합니다. 이름을 덮어쓴 파일은 반영이 잘되는데, 새로 에셋을 추가한 부분에 대해서는 전혀 읽어오질 못합니다.use existing build로 플레이한 경우랑 어떤점이 달라서 작동하지 않는지 궁금합니다! (+그리고 Build > Update a Previous Build 선택했을때 팝업창이 뜨는게 아니라 바로 아래의 사진으로 넘어가는데, 이부분은 상관없을까요?)
-
미해결이득우의 꼭 배워야하는 게임 알고리즘
BSP트리를 활용한 렌더링 순서 관련 질문
안녕하세요, 강사님. BSP트리를 활용한 렌더링 순서에 대해서 설명해주시는 부분에 있어서 궁금한 점이 있어 여쭈어보고자 합니다. 다음 예시에서 플레이어가 평면 F로 분할된 공간의 양의 공간에 있을 때, 음의 공간의 폴리곤부터 먼저 렌더링을 해야한다고 설명해주셨습니다(10:13~). 그런데 단순하게 생각하면 플레이어 입장에서 보여지는 부분부터 순서대로 렌더링 되어야 하는 것이 아닌가 하는 생각이 들었습니다. 예를 들어 F앞면 - A1 - B - C1 / G앞면 - A2 - D1 / H앞면 - D4 - C2 / D3 와 같은 순서처럼 말입니다. 렌더링 순서는 사실 크게 중요하지 않은 것인지, 그게 아니라면 해당 예시와 같이 플레이어 입장에서는 보이지 않는 영역인 음의 공간의 폴리곤부터 먼저 렌더링하는 이유(성능적인 부분)가 특별히 있는 것인지 궁금합니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Completed가 자동 콜백 해줄텐데 왜 직접적으로 또 호출하나요?
public void Init(IPEndPoint endPoint, Action<Socket> OnAcceptHandler){_acceptHandler += OnAcceptHandler;_listenSocket = new Socket(endPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);_listenSocket.Bind(endPoint);_listenSocket.Listen(10);SocketAsyncEventArgs e = new SocketAsyncEventArgs();e.Completed += new EventHandler<SocketAsyncEventArgs>(OnAcceptCompleted);RegisterAccept(e);}void RegisterAccept(SocketAsyncEventArgs e){e.AcceptSocket = null;bool pending = _listenSocket.AcceptAsync(e);if (pending == false)OnAcceptCompleted(null, e);} 이 코드에서 RegisterAccept안에 pending이 false일 때 OnAcceptCompleted를 호출하는 코드를 보여주셨는데 이미 SocketAsyncEventArgs.Completed에 콜백 함수 넣어줘서 자동 처리 되는거 아닌가요?? 실제로 저렇게 함수를 재호출해주는 코드를 빼봐도 정상 작동되는것 같았습니다. 이중으로 함수 호출하시는 이유가 뭔지 궁금합니다!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
비트 마스크를 사용하는 이유가 무엇인가요?
안녕하세요.강의 정말 잘 듣고 있습니다.처음에는 단순 게임 서버를 구현하는 강의라고 생각했는데, 이론으로만 보던 CS, 네트워크 지식을 직접 구현해보면서 하니 기본기 다지는데 정말 도움이 되네요.그리고 꽤나 자바와 같은 모던 언어를 사용하다보니 깊게 생각하지 않던 부분도 고민할 수 있는 최고의 강의인것 같습니다. 질문으로 돌아가서비트 마스크를 사용하는 이유가 C# 에서 원자적 연산을 제공하는 Interlocked 클래스 함수의 파라미터 때문인가요?처음에는 writer, reader를 체크할 수 있는 클래스 변수를 따로 만들면 되지 않을까? 라고 생각했는데 그렇게 되면 if, if 이런 조건문이 계속 들어가서 원자적 연산이 어려워 져서 그런가요?(별도로 락이나 모니터로 잡을 수 있지만 가독성 측면에서도 그렇고, Interlocked가 표준화 되어 있기 때문에 저렇게 사용하나? 추측합니다.)몇개의 질문을 살펴보니 비트마스크와 Interlocked의 CompareExchange의 조합이 강력하네요. 지금 강의는 언어 레벨에서 지원하는 읽기 쓰기 락 동작 원리를 보여주신 것인데 실제 프로덕션 코드에서 사용하려면 락 타임아웃 같은것도 구현해야하나요?생각해보면 어떠한 경우에 읽기 락이 많이 쌓이고 해제하지 못한 경우일 때 쓰기락에 대기시간이 길어지니 일정 시간 후 락 해소를 시켜줘야 하나 궁금하네요.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
왜 SendBuffer 를 Session 이 가지면 성능에 문제가 되나요?
1명의 움직임을 100명에게 패킷으로 보내려면 Session 이 가진 버퍼를 100명에게 보내면 될 것 같아서...왜 위 경우에 하나만 만들어서 100명에게 보낼 수 없는지 궁금합니다.
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
Adressable그룹에서 Sprite부분에 . 을붙인이후 작동이안됩니다.
영상을 따라했는데 Object_Firewood.sprite를 추가한 이후부터 wizard_SkeletonData : 4/7 에서멈추고있어요 어드레서블을 다시 빌드해도 같은현상이 일어나고있습니다. 유니티버전은 2022.3.16f1에디터 타겟플렛폼 윈도우 입니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요 재귀허용 WriteUnlock() 질문드립니다!
public void WriteUnlock(){int lockCount = --_writeCount;if (lockCount == 0)Interlocked.Exchange(ref _flag, EMPTY_FLAG);}위의 코드에서 lockCount 지역변수를 만들어주신 이유가 따로 있으신지 궁금합니다! writeCount는 어차피 WriteLock을 잡은 애만 쓰는 변수라고 이해했는데, 그러면 writeCount-=1; if(writeCount==0) 이렇게 써도 괜찮지 않을까라는 생각이 들었습니다!너무 사소한 질문인 것 같은데, 열심히 듣다가 궁금해져서 질문드립니다ㅠㅠ
-
미해결이득우의 꼭 배워야하는 게임 알고리즘
쿼드트리 삽입 프로그램 실행 예시 질문
안녕하세요, 강사님. 5강 코드트리의 구현 강좌 초반부에서 삽입 예시를 설명해주신 부분에서 의아한 부분이 있어 여쭈어보고자 합니다. 첫 번째 삽입 예시의 Depth를 설명해주실 때, Depth를 4라고 말씀해주셨는데, 5가 아닌가 생각이 들었습니다.이후 세 번째 삽입 예시의 Depth를 설명해주실 때, 첫 번째 삽입 예시보다 한 단계 작게 삽입이 이루어지는 예시일 때도 Depth를 4라고 말씀하셔서, 어느 부분이 맞는 것인지 궁금합니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
아래 질문 확인 한번 부탁드립니다!
루키스님 안녕하세요? 지난 질문 답변을 아직 못받아서 재질문 드리게 되었습니다. 인프런 AI가 답변을 남겨서 일까요?아님 제 질문에 실수가 있었을까요?후자의 경우라면 좀 더 신경쓸 수 있도록 하겠습니다 https://www.inflearn.com/questions/1126711/%EC%9E%A1%ED%81%901-2%EB%A5%BC-%EB%93%A4%EC%9C%BC%EB%A9%B0-%EC%A7%88%EB%AC%B8%EC%9D%B4-%EC%9E%88%EC%8A%B5%EB%8B%88%EB%8B%A4-push-%ED%81%90%EB%A1%9C%EC%A7%81-send-%EC%9D%98-%EC%8B%9C%EA%B0%84%EB%B3%B5%EC%9E%A1%EB%8F%84-%EA%B4%80%EB%A0%A8
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
lock과 비동기화
SendAsync를 상위 참조에서 lock을 사용하여 관리하고 있습니다. 이러한 상황은 일반 Send를 사용하는 상황과 마찬가지로 비동기화의 강점을 이용하지 못하는 상황아닌가요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
callback 함수 사용에 있어 궁금증
bool pending = _listenSocket.AcceptAsync(args); if (pending == false) OnAcceptCompleted(null,args);해당 코드는_listenSocket.AcceptAsync(args);에서 이미 call back 함수를 사용하여 해당 비동기 작업이 실행될 때 까지 기다린 다음 위에서 정의해준 call back 함수인 OnAcceptCompleted를 호출하는 것으로 이해하고 있습니다.그런데 굳이 return을 bool형인 peding으로 받아 보류인지 아닌지 확인하여 바로 peding이 false이면 직접적으로 OnAcceptCompleted 함수를 호출할 필요가 있는가 하는 의문이 들었습니다.이는 멀티 쓰레드 상황을 대비한 사항인가요?보류를 확인하여 바로 통과 하였다면 직접적으로 함수를 호출하는것은 속도 측면의 이유에서 추가하는 것인가요?그렇지 않다면 굳이if(pending == false) OnAcceptCompleted(null, args);부문을 해당 코드에서 삭제해도 무관하지 않을까 하는 궁금증이 생깁니다.
-
미해결이득우의 꼭 배워야하는 게임 알고리즘
알고리즘 확인(?) 질문
아직 아리까리해서 확인 질문드립니다 ㅜㅜ... 강의 예시 부분에서 주황색영역(AABB체크할 영역)에 포함되는 노드를 찾아 검사대상에 올리는데요. 깊이3 쿼드트리 노드 85개 전체를 돌면서 주황생영역이 포함된 노드를 찾게 되는 것일까요? 그런다음 검사대상인 노드만 돌면서 노드에 등록된 물체에 대해 AABB충돌체크를 진행 하게 되는걸까요?
-
해결됨두고두고 써먹는 유니티 VR
Environment와 Bomb이 충돌이 안되고 있어요
프로젝트 셋팅에서 Physics에 레이어 콜리젼 메트릭스도 체크 해둿는데도 폭탄이 자꾸 떨어집니다.. 해결방법이 무엇일까요?레이어도 각각 자식까지 각자로 해뒀습니다.xr toolkit버전은 2.5.2입니다!
-
미해결게임 디자인 패턴 with Unity
GameManager에 씬전환은 왜 문제가 되나요 ?
어떤 점이 문제가 되나요 ?또 다른 기능들을 다 넣어버리면 문제가 된다고 하셨는데 예를 들어 어떤 기능인가요 ?
-
미해결이득우의 꼭 배워야하는 게임 알고리즘
우선순위큐로 구현시
최적화전 코드에 openSet에 이미 전에 계산한 중복노드가 있다면 낮은값일때 값을 바꿔주는 부분이 있었는데요. 우선순위큐에서 pop을하면 어차피 최소값을 보장하닌까 우선순위큐로 교체해준다면 굳이 바꿔줄 필요가 없겠지요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
애니메이션 만드는데 자꾸 경고가 뜹니다
To Debug, run app with -diag-job-temp-memory-leak-validation cmd line argument. This will output the callstacks of the leaked allocations. Internal: JobTempAlloc has allocations that are more than the maximum lifespan of 4 frames old - this is not allowed and likely a leak 2D로 여러 이미지를 만들고 애니메이션으로 움직이게하는데 위의 두 오류가 계속 떠서 처음엔 이미지 용량이 커서 그런가해서 최소 60 최대 130px로 줄였습니다. 근데 저 경고가 뜨는 타이밍도 일관적이지 않고, 인터넷에 쳐봐도 뭔가 해결책을 정확히 모르겠어서 질문해봅니다.일반적으로 하는 방법대로 png 하나하나 끌어왔는데 왜그럴까유..?움직이게 하기 위해 사용하는 이미지가 다 다르면 안되는걸까요..?한 캐릭터가 여러 행동을 하도록 여러 개의 애니메이션을 만들고 있는거라 파악하기가 어렵네요
-
해결됨[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
강의 참여 질문
강의 수강 중인데 디스코드 채널 어떻게 참가할 수 있나요?
-
미해결이득우의 꼭 배워야하는 게임 알고리즘
19:35 리스트와 이진힙의 구조비교
리스트의 경우 메모리가 분산 될수 있고 이진힙은 고정된 배열을 사용할수 있기 때문에 알고리즘에서 파악할수 없는 캐시 효과를 부과적으로 누릴수 있다. 이부분에대해 추가적인 설명을 해주실 수 있을까요?? 잘 이해가 가지 않습니다...
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
lock 사용에 있어 근본적 질문
안녕하세요 강의 잘 듣고 있습니다. 전역변수 사용에 있어 원자화 되지 않은 함수들로 인한 race condition 문제로 저희가 원하지 않는 값들이 return 되기에 lock을 사용하여 해당 lock동안에는 다른 Thread의 사용을 방지한다고 이해하였습니다. 그렇기 때문에 lock의 사용이 빈번해진다면 전반적으로 코드의 구성도 복잡해지고 성능 측면에서도 좋지 못하다 이해하였고, 그렇다면 lock의 사용은 변수를 공유하지 않는 부분에서는 필요치 않을까? 하는 의문이 들었습니다. 나아가 만약 lock을 사용하는 Thread가 있다면, 그 기간 동안에는 lock을 사용하지 않는 다른 Thread들 도 lock의 명령어들이 끝날 때까지 기다려야 하는 것인지 궁금합니다.