묻고 답해요
132만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
리소스 매니저 만들때 랩핑이라는게 나오는데 정확히 어떤 개념인건가요?
강의와 관련있는 질문을 남겨주세요.• 강의와 관련이 없는 질문은 지식공유자가 답변하지 않을 수 있습니다. (사적 상담, 컨설팅, 과제 풀이 등)• 질문을 남기기 전, 비슷한 내용을 질문한 수강생이 있는지 먼저 검색을 해주세요. (중복 질문을 자제해주세요.)• 서비스 운영 관련 질문은 인프런 우측 하단 ‘문의하기’를 이용해주세요. (영상 재생 문제, 사이트 버그, 강의 환불 등) 질문 전달에도 요령이 필요합니다.• 지식공유자가 질문을 좀 더 쉽게 확인할 수 있게 도와주세요.• 강의실 페이지(/lecture) 에서 '질문하기'를 이용해주시면 질문과 연관된 수업 영상 제목이 함께 등록됩니다.• 강의 대시보드에서 질문을 남길 경우, 관련 섹션 및 수업 제목을 기재해주세요. • 수업 특정 구간에 대한 질문은 꼭 영상 타임코드를 남겨주세요! 구체적인 질문일수록 명확한 답을 받을 수 있어요.• 질문 제목은 핵심 키워드를 포함해 간결하게 적어주세요.• 질문 내용은 자세하게 적어주시되, 지식공유자가 답변할 수 있도록 구체적으로 남겨주세요.• 정확한 질문 내용과 함께 코드를 적어주시거나, 캡쳐 이미지를 첨부하면 더욱 좋습니다. 기본적인 예의를 지켜주세요.• 정중한 의견 및 문의 제시, 감사 인사 등의 커뮤니케이션은 더 나은 강의를 위한 기틀이 됩니다. • 질문이 있을 때에는 강의를 만든 지식공유자에 대한 기본적인 예의를 꼭 지켜주세요. • 반말, 욕설, 과격한 표현 등 지식공유자를 불쾌하게 할 수 있는 내용은 스팸 처리 등 제재를 가할 수 있습니다. 리소스 매니저를 만드실때 랩핑을 한다고 하시면서 막 뭔가 하시던데 정확히 어떤 개념인건가요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
void OnHitEvent() 오류
플레이어 OnHitEvent()는 잘 작동했었는데, 몬스터 OnHitEvent()가 잘 안되어서 (디버깅으로 확인 해보니 몬스터 OnHitEvent()으로 안들어 오는 현상 확인.) 애니메이션에 문제가 있나 다른 애니메이션으로 넣어봤더니 플레이어 OnHitEvent()까지 작동이 안되기 시작했습니다. 혹시 Base Controller와 PlayerController와 MonsterController 사이에 Init의 문제가 있을까 싶어서 몬스터 AI#1 강의를 계속해서 돌려봤는데 스크립트에는 문제가 없었습니다. 메일로 파일 보내드리니 확인부탁드립니다.. ㅠㅠ 혼자 해결해 나가보고싶어서 계속해서 해봤는데 잘 되질 않아 죄송합니다. 항상 감사드립니다!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
실행시 자동으로 실행된다고 하셨는데
해당 방법은 디버그시 알아서 배치 파일을 열어준다는 의미인가요? 그렇다면 어떻게 할 수 있을까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요 선생님 Thread.Yeild(); 에 대해서 질문 합니다.
while(true) { int expected = 0; int desired = 1; if (Interlocked.CompareExchange(ref _locked, desired, expected) == expected) break; Thread.Yield(); } 이 코드를 정리를 해보면 만약에 A 쓰레드가 있고, B쓰레드가 있다 A쓰레드가 공유 자원을 점유하고 있으면 lock이 0에서 1로 바뀌고 B 쓰레드는 접근 하려니까 lock이 1이니까 계속 무한 루프를 돈다. 이것은 성능상의 저하를 불러 일으킨다. 왜? 쓸데없는 행동이기 때문에 따라서 A쓰레드가 공유자원을 사용을 끝날 때 까지 B쓰레드를 무한루프를 돌게 하지말고 재우는데 Thread.sleep, yeild.. 뭐 이런 함수를 이용해서 재우는데 그럼 무한 루프가 잠시 멈추는 상황이잖아요? 그럼 a쓰레드가 공유자원을 쓰고 나왔다는 것을 어떻게 알 수 있나요? 검색 해보니까 sleep을 os가 깨운다는데 그럼 정리를 해보면 면접관님 께서 만약 이런 질문을 하시면 일단 OS가 A 쓰레드가 할일을 끝냈으니, 잠자고 있던 B쓰레드를 깨워서 그때부터 반복을 해서 다시 LOCK 검사를 진행합니다. LOCK 변수 값이 0이라면 컨텍스트 스위칭이 일어나는데 A 쓰레드의 정보가 레지스터에서 지워지고 B 쓰레드 정보가 채워짐으로써 B 쓰레드가 CPU를 점유하고 이제 B쓰레드가 공유자원 _num변수를 사용해서 _num++연산이 진행이 됩니다. 이렇게 저는 해당 챕터 강의를 이해 하고 정리를 했거 든요 혹시 틀린 점이 있다면 알려주심 감사하겠습니다. 아 그 sleep 걸어놓고 os가 깨우는 거 맞는지도 알려주시면 감사하겠습니다. ^^
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
동일한 질문이 있는 것 같은데 이해가 잘 안되서 다시 질문 드립니다
transform.position += transform.TransformDirection(Vector3.forward); Vector3.forward는 (0,0,+1) 이것을 TransformDirection을 통해 월드좌표로 바꾸면 월드 +z축 방향으로 이동한다는 의미 아닌가요?? 저희가 원하는건 Player를 기준으로 한 로컬좌표에서 +z축 방향으로 이동하고 싶은것인데 말이죠 실제로 TransformDirection을 사용하지 않으면 그냥 월드좌표를 기준으로 진행하는데 여기서 TransformDirection을 통해 월드로 바꾼다는 것이 이해가 잘 되지 않습니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
이동 동기화들을 보면서 생각한게 있는데요.
만약에 애니메이션 이나 따로 동기화 하는 부분이라면 애니메이션 동기화를 예를들면, 파라미터 데이터를 하나씩 보내는거 보다는 한 캐릭터에 모든 파라미터 데이터를 모았다가 한번에 서버로 보내는게 최고에 방법인가요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
멀티쓰레드와 관련해서 질문이 있습니다.
멀티쓰레드를 학습하게 되면서 나름대로 정리를 해보았는데요. 멀티쓰레드 환경에서는 쓰레드가 공유하는 자원에 대한 일관성이 보장되어야 한다. 즉, 특정 쓰레드에서 공유 자원의 데이터를 변경하면 다른 쓰레드에서도 똑같이 변경된 데이터를 다뤄야한다. 이러한 문제를 해결하기 위해 쓰레드가 공유 자원에 접근하기 전 Lock을 걸고 들어가서 다른 쓰레드가 해당 자원에 접근하지 못하도록 막고, UnLock을 통해서 다른 쓰레드가 접근할 수 있게 해준다. 이 때 접근한 쓰레드는 변경된 공유 자원 데이터를 사용하게 된다. 이렇게 이해한게 맞는건가요 ? 원자성이라는 개념을 이해하기를 하나의 작업을 처리할 때 수행되는 모든 과정들을 일련의 한 묶음으로 보고 이것은 마치 더이상 나누어지지 않는 것처럼 모두 수행되거나 모두 수행되지 않아야 한다. 그런데 Lock을 통해서 원자성을 구현한다고 이해하고 있는데 이게 맞는건지 궁금합니다... 왜냐하면 Lock을 통해서 공유자원에 다른 쓰레드가 접근을 못하게 막는것은 맞지만 Unlock을 할 때까지 여러가지 작업을 할 수 있는데 그것은 원자성을 보장하지 않는 거 같다고 생각해서입니다.
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
코어와 프로세스, 쓰레드간의 관계에 대해서 궁금합니다
그림판 비유를 보면 컴퓨터에서 동시에 사용하는 프로그램마다 최소한 하나의 프로세스와 쓰레드를 가지고 있는데 컨텍스트 스위칭이 일어난다고 하면 코어 하나만 갈구는거 아닌가요? 그리고 아직 쓰레드를 직접 사용해본적이 없어서 잘 모르겠지만 메모리의 동기화를 보장하기 위하여 멀티스레드 프로그래밍에서 lock를 적극적으로 사용하는데 이러면 어느부분에서 성능향상이 일어나나요? lock을 사용하면 사용할수록 싱글코어와 다를것이 없다고 생각되서요 Web에서 종종 다루는 비동기적 처리를 하기 위해서 스레드를 사용하는건가요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
강의자님의 지식과 역량에 감탄중입니다
아직 3번째 단계의 강의를 듣는중이지만 강의의 구성요소와 강의내용 그리고 강사님의 역량에 감탄하고 있습니다. 단순히 게임엔진에 대해서만 배우는 것이 아니라 데이터베이스, 운영체제, 자료구조, 알고리즘, 컴퓨터구조등 컴퓨터공학의 기저에 있는 여러가지 내용들을 짚어주고 넘어가신다는게 좋은 강의 같습니다. 거두절미하고 몇몇 여쭤보고 싶은 내용이 있어 질문 드립니다. 강의 내용을 듣다 보면 중간중간 보간법등에 대한 내용이 나와있는데 수치해석에서 나오는 개념들이더군요 수치해석과목같은경우에는 저희학교는 컴퓨터공학에서 다루지 않고 기계공학이나 수학과쪽에서 다루고 있는데 타학과 수치해석 과목을 듣는게 클라이언트 지망 개발자한테 도움이 될까요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
질문있습니다!
안녕하세요. 좋은 강의를 보고 패킷모아 보내기를 테스트 해보고 있습니다. 강의와 같이 ServerSession을 500개 만들어서 테스트를 해보면 500개 까지 Connect가 안되고 400좀 넘어서 끝나버리는데(실행할때마다 달라요) 이게 피씨 사양과도 관련이 있나요? 아님 다른 이유가 있을까요? (선생님 파일을 받아서 실행해봐도 비슷해서요)
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
System.ArrayTypeMismatchException:
Map.cs -> ApplyMove 및 ApplyLeave 함수 부분에서 오류가 간헐적으로 발생합니다. public bool ApplyMove(GameObject gameObject, Vector2Int dest) { ApplyLeave(gameObject); PositionInfo posInfo = gameObject.PosInfo; if (CanGo(dest, true) == false) return false; { int x = dest.x - MinX; int y = MaxY - dest.y; _objects[y, x] = gameObject; // 이 부분에서 오류 발생 함 } // 실제 좌표 이동 posInfo.PosX = dest.x; posInfo.PosY = dest.y; return true; } System.ArrayTypeMismatchException: 'Attempted to access an element as a type incompatible with the array.' 이라는 오류가 발생합니다.... 첨부파일에 있는 프로젝트 실행해도 마찬가지입니다 .NET Core 3.1 Protobuf( 3.12.3) Newtonsoft.Json (12.0.) 입니다
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
if (s_instance == null) 을 체크하는 이유는 뭔가요?
싱글턴 구현을 위해서 한번만 인스턴스하기 위해 넣는것이라고 이해했는데 맞나요? 다소 이해가 안가는 것은, GameObject go = GameObject.Find("@Managers"); 를 한 다음에 if (go == null) 을 체크해서 게임오브젝트를 하나만 생성하도록 제한해 두었기에, 다른 파일에서 강제로 여러번 인스턴스를 하더라도 어차피 결과적으로는 한번만 인스턴스가 되는 것 같아서요. 굳이 if (s_instance == null) 를 체크해야 하는 이유가 잘 이해가 안갑니다. ㅠㅠ 알려주세요!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
파일 생성이 안됩니다
15:12 에 GenPackets.bat 파일 실행하면 .cs 파일이 생성이 안됩니다... 내용을 몇번이고 다시 확인하면서 대소문자까지 구별해서 재시도 해봤는데 아무 변화가 없네요 관리자 권한으로 해보고 별걸 다해봐도 아무 변화가 없습니다 Blazor 강의부터 제대로 되는게 없어서 좌절하게되네요...
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
19:00 쯤 Player를 찾고 로그를 남기는 테스트에서
19:00 쯤 Player를 찾고 로그를 남기는 테스트에서 chatPacket.chat를 로그로 남긴 후에 GameObject를 Find할 때 메인 쓰레드에서 사용하라는 예외가 발생합니다. 혹시 제가 잘못 작업했나 해서 올려두신 자료를 받아서 해보아도 똑같이 try catch에서 넘어가질 못하네요 유니티 버전 2021.1.0b1에서 안되서 2019.4.17f1까지 낮춰봤는데도 안됩니다. 무언가를 빠트린거 같은데 찾기가 힘드네요 혹시 조언좀 해주실 수 있을까요
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
C++ IOCP서버와 Unity Client 연동 관련
안녕하세요. 제가 C++을 이용한 IOCP서버와 Unity C# Client 연동해서 게임을 제작해야하는 상황에 있습니다. 사실 C++로 구현된 서버인줄 알고 구매했는데 C# 서버에 대한 강의인거 같더라구요.. C++서버와 C#을 사용하는 Unity와의 연동 그리고 Unity 자체에 대한 이해도 부족 이것이 저의 가장 큰 걱정거리인데요. 이 강의를 들어면 Unity 서버에 대한 이해도가 생겨서 C++로 독자 서버를 구축하는데 있어서 괜찮을까요??.. 그리고 여쭤보고 싶은것이 있습니다 ㅠㅠ 서버도 배운지 얼마 안되고 더더욱 Unity는 잘 몰르는데 프로젝트는 진행해야하고 처음 서버 설계 과정부터 궁금한 점이 너무 많았고 검색을 해도 잘 나오지 않아서 어려움이 많았고 항상 궁금해했는데 도움을 주시면 정말 감사하겠습니다.. 1. C++을 이용한 IOCP 서버와 Unity C# Client 연동을 위해서 어떠한 것을 고려하고 작업을 해야하는지가 궁금합니다. Byte Stream 외에도 고려해야할 부분이 뭐가 있을까요? 2. Visual Studio와 Unity 연동 이라는 것이 Visual Studio에서 서버를 키고 Unity Client를 키면 접속이 되게 하면 끝인건가요? 처음 기본 환결설정에 대해서도 궁금합니다. 3. Unity는 사실상 싱글 스레드만을 사용할 수 있는 것으로 알고 있습니다. 멀티 스레드가 지원된다고는 하나 유니티 객체에 접근하는 순간 에러가 난다고 알고 있습니다 (주워 들은 내용인데 맞는지는 모르겠습니다) 그런데 멀티스레드 사용이 필요하게 될 경우 유니티에서는 단순한 연산 작업외에는 멀티스레드를 사용하면 안되는 것인가요? 코루틴 이라는 기능이 멀티쓰레드와 비슷하다고 알고 있는데 멀티스레드 기능을 코루틴이 대체해서 사용하면 되는건가요? 4. IOCP서버를 이용하는데 싱글스레드?? 제가 C++ IOCP서버를 구현해야 하는데 이 이유에 대해 타당하게 설명을 해야하는데 저부터가 의문이 듭니다. IOCP를 사용하긴 할건데 Unity에서 멀티쓰레드를 사용하지 못한다면 IOCP로 하는것이 의미가 있을까에 대한 의문입니다. 3번 질문과 연관이 되는 질문이긴 한데요.. 간략하게 제가 만들어야 하는 게임을 설명드리자면 RPG와 FPS 장르가 합쳐진 RPS 게임으로 다중접속이 필요합니다. FPS게임이기는 하나 반응에 민감한 전통 FPS 방식은 아니라 매 프레임마다 패킷을 전송은 하지 않아도 됩니다(TCP를 사용할 것이라는 뜻이기도 합니다) 어느정도 많은 인원의 동시접속을 받아야 하기 때문에 IOCP를 사용하긴 할 것인데 이 부분에 대해서 궁금합니다. 5. 1000명이 접속하더라도 로비에 모여서 4명의 플레이어가 파티를 맺고 4명의 플레이어가 오픈월드 및 던전에 들어가게 됩니다. 즉, 유저 입장에서 보기에는 4명의 파티만을 위한 1개의 오픈월드가 펼쳐지는 것이고, 서버 입장에서는 그러한 오픈월드가 250개가(250x4 = 1000명) 펼쳐지게 되는 것입니다. (Ex.배틀 그라운드) 이러한 게임을 만들고자 할 때 게임 서버를 처음에 어떤식으로 설계해야할지 잘 모르겠고 막막합니다.. 서버와 DB를 연동하는 방법은 간략하게 배워서 DB를 사용해야한다는 점은 알겠는데 그 외의 부분에 있어서 어떤식으로 구현을 해야할지 궁금합니다. 처음부터 너무 많은 질문을 적었는데 죄송합니다. 궁금한게 너무 많았는데 질문이라도 할 수 있는 상황이 생겨서 너무 길게 적게 되었네요. 질문에 대한 도움을 주시면 정말로 감사하겠습니다..!
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강의 듣던 중 궁금한 점이 있습니다.
지금까지 강의를 듣던 중에 가비지컬렉터 부분이 궁금합니다. C#은 가비지컬렉터가 작동하는데, 가비지컬렉터로 인해 반응성이 좋지 않을 수 있다고 들었습니다. 그래서 가비지 컬렉터가 최대한 작동하지 않도록 해야 한다고 생각했습니다. 따로 관리를 하는 게 맞나요?
-
해결됨[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
12:54분 관련해서 질문드립니다.
C# 문법에 관련된 질문이긴 한데, new GameObject { name = "@Managers"}; 의 의미를 모르겠습니다. 분명 매개변수가 하나인 생성자인 것 같긴 한데, GameObject 클래스의 생성자는 public GameObject(string name); 되어있습니다. 그럼 제 생각에는 new GameObject("@Managers"); 이렇게 만들어야 하지 않나 하고 생각하고 있습니다. new GameObject { name = "@Managers"} 와 new GameObject ("@Managers")와 차이가 있습니까?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
강사님 포폴에 대하여 질문이 있습니다.
안녕하세요. 일전에 취업준비때문에 질문을 드렸던 수강생입니다. 다름이 아니라 제가 전에 학원을 다닌다고 말씀을 드렸는데요. 학원에서는 포폴을 우선적으로 유니티 즉, 디비나 서버 연동 없이 유니티를 우선적으로 해야한다고 그러더라고요.( Text 를 콘솔로 보여주는 것은 쉽지만, text를 렌더링해서 움직이는것 자체가 어렵다) 는 말씀을 하셔서 이 작업만 해도 오래 걸린다고 그러시더라고요.. 그래서 걱정이 많습니다. 제가 타분야 개발직군을 공부하다가 넘어왔는데 타 개발분야는 포폴을 기본적으로 프론트엔드, 백엔드, DB 이 세가지를 이용해 만들었는데.. ex) CRUD 게시판 그런데 정말 유니티만 가지고 취업에 성공할 수 있을 지가 의문입니다. 그리고 강사님의 내년정도 쯤에 나오는 취업을 위한 언리얼 엔진을 듣고 싶지만 저에게 시간이 많지 않습니다... 내년 3월 목표로 취업준비중입니다.( 취준생 생활이 어느덧 1년 11개월 째네요.) 그래서 정말 진지하게 궁금합니다. 강사님 요약을 하자면 1. 유니티만을 이용해 취업이 가능한지? (서버x 디비x) 2. 만약 1번이 불가능 하다면 어떤걸 준비해야 할지? (참고로 강사님의 강의 1, 2, 3 파트를 사서 현재 듣고 있고, 따로 C++ 공부중입니다. 아마 취업을 준비하게 된다면 유니티엔진을 중점으로 포폴을 만들 것 같습니다.) 끝으로 바쁘실텐데.. 너무 많은 질문과 제 허접한 글을 읽어주셔서 감사합니다...
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
Util에 짠 코드가 잘이해 안됩니다.
Transform transform = go.transform.GetChild(0); 여기에서 게임오브젝트의 직속자식을 가지고 오는데 transform을 사용 한다는게 잘이해가 가질 않습니다... tansform은 위치와 관련된 컴포넌트 아닌가요?
-
미해결[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개밖에 없다고 뜹니다. 왜이럴까요?