강의도중 질문이 있습니다
미해결
유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
선생님께서는 struct구조로 생성자를 많이 쓰시던데, class로 생성자를 만드는것과 struct로 생성자를 만드는 것이 어떤 차이가 있는지 궁금합니다. 성능상에 차이만 있는건지 제가 알기로는 class로 생성자를 만들면 초기값을 넣을 수 있다고 알고 있습니다. 차이는 그정도일까요??
- c#
- C#
- unity
176만명의 커뮤니티!! 함께 토론해봐요.
미해결
유니티(Unity)로 시작하는 게임개발: Part 3. 슈팅게임 개발
선생님께서는 struct구조로 생성자를 많이 쓰시던데, class로 생성자를 만드는것과 struct로 생성자를 만드는 것이 어떤 차이가 있는지 궁금합니다. 성능상에 차이만 있는건지 제가 알기로는 class로 생성자를 만들면 초기값을 넣을 수 있다고 알고 있습니다. 차이는 그정도일까요??
미해결
유니티 머신러닝 에이전트 완전정복 (기초편)
안녕하세요, 알고리즘 관련해서 질문드리고 싶어 글 남깁니다. 해당 드론 예제를 DDPG가 아닌 PPO로 학습할 경우 대체로 성능이 낮아질까요? 내장된 알고리즘이 아닌 DDPG를 선택해 사용하신 이유가 궁금합니다. 또한 드론과 goal 사이에 여러 장애물이 무작위로 배치될 경우에도 해당 알고리즘으로 학습이 무리없이 진행될지 질문드리고 싶습니다. 강화학습에 입문하면서 도움 많이 받고 있습니다. 감사합니다!
미해결
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
public List<IPacket> PopAll() { List<IPacket> list = new List<IPacket>(); lock(_lock) { ...어떤 처리.. } } 이 함수가 멀티 스레드로 실행 된다고 했을대 list 이 변수는 안에가 list 형태인데 linkedlist 같은것도 스레드 세이프 한건가요? 여러개의 스레드가 linkedlist 를 생성만 한다고 했을때(위의 예시처럼 원소 추가나 조작 없이) 동시에 new 연산이 내부에서 실행 된다 여러개 스레드에서 동시에 힙에 new 연산이 실행될것 같은데(예를 들어 c++ vector<> 같은..) 멀티스레드로 new 연산시 같은 주소에 생성될 일이 발생할 수도 있지 않을까 해서요 질문을 요약하자면 -지역변수에서 힙쪽의 new 를 생성하는게 있다면 그것은 스레드 세이프한가? 라는것이 질문입니다 답변 부탁드려요!
미해결
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
메시지: CS0205 추상 기본 멤버를 호출할 수 없습니다 https://learn.microsoft.com/ko-kr/dotnet/csharp/misc/cs0205 원인 추정: 2023. 01. 05 이후 abstract 메서드 본문을 호출하는 시도를 문법적으로 중단 (abstract 는 메서드 껍데기만 동일하게 가져가는 것을 의도로 할 때만 사용 가능하게끔 하고, base 를 호출하며 사용할 때는 virtual 를 쓰도록 강제로 권장 안 좋은 대안: Start() 실행 순서 관리를 설정에서 직접 관리. '편집 -> 프로젝트 설정 -> 스크립트 실행 순서로 이동하여 스크립트의 실행 순서를 설정' 대체 시도: UI_Base 의 Init() 를 abstract 대신 virtual 로 변경 질문 요지: virtual 로 변경해도 문제가 없을까요?
미해결
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요. 싱글 코어와 멀티 코어에 대해 궁금한 점에 대해 질문드립니다. 1.만약 제가 작성한 프로그램에서 멀티 쓰레드를 사용하더라도 사용하는 컴퓨터의 CPU가 싱글 코어 일 경우쓰레드를 사용할 때 컨텍스트 스위칭이 일어나기 떄문에 멀티 쓰레드를 사용하는 건 의미가 없는 게 맞을까요? 2.반대로 멀티 코어인 컴퓨터에 단일 스레드 환경의 프로그램을 만들었을 경우 여러 코어를 사용하는 게 아닌 하나의 코어만 사용하게 되어 CPU의 성능을 제대로 활용 못하는 게 맞을까요? 실제 운영체제 환경에서는 제가 만든 프로그램 외 에도 백그라운드로 실행되는 프로그램들이 있어서 코어 하나만 사용하진 않겠지만 개념적으로 봤을 때 멀티 코어일 때 단일 쓰레드 환경의 프로그램이면 CPU 성능을 제대로 활용 못 하는 게 맞는 건지 궁금합니다.
미해결
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
ReadOnlySpan<byte> s = new ReadOnlySpan<byte>(segment.Array, segment.Offset, segment.Count); 이 질이 오류가 난다고 강의에는 나오는데 유니티 2021.3.4 버전을 쓰고 있는데 오류가 나지않는건 유니티에서 사용하고 있는 C# 버전때문인가요? ReadOnlySpan 은 C# 버전 몇부터 유니티에서 지원하는건지 설명이 잘 안나오는것 같은데 어디서 알수 있을까요?
미해결
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강의에선 GenPackets.cs의 Span계열에 오류가 뜨는데 저는 Span계열에 오류가 뜨지 않습니다. 그럴경우 그냥 진행해도 될까요???
해결됨
유니티 머신러닝 에이전트 완전정복 (기초편)
안녕하세요, 저는 강화 학습 관련 관심이 생겨 여러 강화 학습 관련 프로젝트를 진행하고 있는 대학교 4학년 학생입니다. 인프런 강의를 기반으로 하여 프로젝트 진행에 도움을 많이 받고 있어 너무 감사합니다. 다름이 아니라 ml-agents 관련 질문이 있어 글을 쓰게 되었습니다. 강화 학습에서 reward shaping하는 기준 혹은 참고 논문이 있는 건지 궁금합니다. Training을 진행할 때 여러 번 경험한 내용으로 시간이 지나는데도 학습이 진행이 안된 경험이 있습니다. 이럴 때마다 작업 관리자로 CPU나 CUDA의 이용률을 보면 0프로 정도로 거의 움직이지 않는데 이를 병목 현상으로 예상하고 있습니다. 이를 해결하기 위해 아나콘다 프롬폼트에 키보드 interrupt를 하게 되면 멈췄던 학습이 실행 되어 여러 번 interrupt를 걸어 해결했습니다. 여러 다른 컴퓨터를 사용할 때마다 일어나는 공통적인 현상이라 혹시 제가 학습을 잘못 하고 있는 건지 아니면 이러한 현상에 대한 해결 방안이 따로 있는 건지 궁금합니다. 강화 학습 Training 방법을 찾아보면 제가 보기로는 두 가지 방법이 있었습니다. Unity 환경에서 하나의 프리팹 위에서 episode가 끝날 때마다 Agent나 environment의 구성을 랜덤으로 하여 진행하는 방식과 다른 environment를 여러개의 프리팹으로 하여 학습을 진행하는 방법이 있었습니다. 두 방법에 큰 차이가 있는 건지 궁금합니다. 항상 이해하기 쉽게 강화 학습 관련 강의를 해주셔서 다시 한번 감사드립니다.
미해결
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
상황.1 listen register 는 10, backlog 는 100 으로 해놨고 connector 에서 Connect 할대도 100 으로 해놨습니다 SendBuffer 의 크기는 public static int ChunkSize { get; set; } = 65535 * 100; 이고 RecvBuffer _recvBuffer = new RecvBuffer(65535); 인데 어떤 부분이 문제일까요?.. 원본 jobTimer 코드 까지 실행하면 강의와 결과는 거의 같게 나옵니다만.. 상황 2 위 상황에서 서버 클라가 보내고 받는 데이터가 Hello Server! Hello Server! I am 1 가 되고 서버 클라 간의 패킷 또한 정상적으로 받아지는건 확인했습니다 그런데 리슨서버에서 register = 1, backlog = 1 로 해놓고 더미 클라이언트 쪽에선 Connector 로 2개의 클라가 접속하게 했을때 결과가 아래 처럼 나오고 있습니다, connector.Connect(endPoint, () => { return SessionManager.Instance.Generate(); } , 2 ); 코드를 수기로 처서 그런것 같기도 한데 어떤 부분에 문제를 의심해 볼 수 있을까요?
미해결
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
강의 타임라인 중 13:55 부터 Awake를 설명하는 부분에서 " 꺼놓은 상태에서 적용되는 애가 더 있어요" "게임 신 현재 들고 있는 컴포넌트를 끈 상태에서도 잘 작동하길 원한다면 Awake로 만드는 것도 하나의 방법이 되겠구요" 라고 언급하고 있습니다. 그런데, Unity Documentation에 따르면 active(켜놓은 상태) 할 때 Awake가 작동된다고 나와있습니다. 실제로 제가 @Scene을 끄고 Awake가 동작하는 지 디버깅을 했을 때 Awake가 호출되지 않았으며 EventSystem Null Reference Error가 로그로 찍혔습니다. 강의에서는 @Scene을 킨 상태에서(체크 박스를 체크한 상태) 테스트를 하고 있기도 합니다. Awake는 active한 상태 + 컴포넌트가 disabled 된 경우일 때 Start와 달리 호출된다고 정정해야 할 것으로 보입니다. https://docs.unity3d.com/ScriptReference/MonoBehaviour.Awake.html
미해결
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
11:51 분 심리스관련해서 아이디어가 생각나서 혹시.. 아이디어.1 (가정 : 몬스터라면 애초에 서버에서만 클라로 뿌려주면 되긴 하겠지만, 클라에서 몬스터 정보를 준다 가정할때..) 몬스터, 스킬, 유저, 모든 사물에 잡큐를 하나씩 배치를 해주어서 심리스를 해결한다고 했는데 즉 이 말은 동기화 되야 하는 데이터가 있을때 심리스라서 맵 단위로 잡큐가 존재 할수 없으니 예를 들자면 플레이어가 있고 플레이어 근방에, A 라는 몬스터가 있는데 이 몬스터의 동작을 그 주변에 있는 몬스터들도 알아야 하는 정보라 할때 몬스터의 정보(어떤 변경사항이 있고 다른 유저가 알아야 하는정보)를 서버에 보내고 플레이어 근방에 있는(대략 일정 변경의 반지름 또는 시야에 들어오는 공간분할 처리내에 있는 유저) 정도의 유저들(동기화 대상들)에게만 해당 몬스터 정보를 뿌려주어 해서 몬스터,사물 기반으로 데이터를 전송하는 방식일까요? 아이디어.2 (서버에서 처리 되는 기준) 서버기준으로 , 사물, 몬스터 등에 개별 잡큐가 존재 1. 몬스터가 왔다갔다 하는 동작이 몬스터 개별 잡큐에 넣기만 하고 실행 하진 않는다 2. 플레이어가 몬스터나 사물등 일정 거리 안의 시야뷰에 보인다면 해당 오브젝트 동기화 대상들간의 잡들을 실행 하면서 동기화 처리를 한다 용어는 들어 보긴 했는데 설명을 듣다가 갑자기 생각이 떠올라서 적어 봅니다
미해결
[유니티 레벨 업!] 모듈식으로 개발하는 퀘스트&업적 시스템
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 좋은 강의 감사합니다. 퀘스트를 제가 생각한 방식에 맞게 만들다보니 궁금한 점이 생겨서 질문드립니다. 만약에 예를 들어 몬스터 5마리를 잡고 해당 몬스터가 드랍하는 아이템을 얻어야한다. 라는 퀘스트가 있다면 해당 몬스터에 두개의 QuestReport를 달아줘야 하는건가요?
해결됨
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
유니티 강의에서 씬 매니저 부분을 듣다가 질문이 생겨서 드립니다 게임 오브젝트 @Scene에 들어있는 스크립트는 GameScene 이고, GameScene은 BaseScene 을 상속받고 있고, BaseScene 은 이러한데, 이 상태에서 유니티를 실행하면 이렇게 표시 됩니다. GameScene 은 BaseScene 을 상속받고 있기는 하지만, BaseScene은 게임 오브젝트내(Hierachy) 에 존재하지 않은데, BaseScene 에서 Start 함수는 실행되지 않으면서, Awake 함수는 어떻게 실행되는건지 설명해주시면 감사하겠습니다
미해결
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
강의 내용 똑같이 따라했고, 다른 질문들 참고해서 디버깅 모드, 다 추가한 상태입니다. visual studio에서 unity에 연결이라고도 되어있는데 디버깅이 안 이루어지고 그냥 끝나요ㅜㅜ. 2019 버전으로 내리는 수밖에 없을까요?
미해결
[실전 게임 코드 리뷰] 유니티 클리커 게임
유니티에서 Resources Folder를 사용하지 말라는 내용을 어디선가 들은 것 같은데. Resources Folder가 유니티에 상시 메모리를 잡아먹는 걸로 알고 있습니다. 그래서 대부분 게임을 만들 때 Inspector에 할당을 시키거나 에셋 번들을 활용하는 걸로 알고 있습니다. 스크립트를 봤을 때 일부 UI를 Resource.Load로 활용하고 있는데 이러한 이유가 있을까요? 물론 프로젝트가 작으면 사용해도 별문제는 없는 걸로 알고 있습니다만 대규모로 했을 경우 해결 방안이 있을까요? 감사합니다!
미해결
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
강사님 안녕하세요! 다름이 아니라 주석들이 많아서인지 강의에 나온것처럼 자동화로 GenPackets.cs를 만들면 코드 정렬이 깔끔하게 되지 않아서요.. 이 경우는 제가 막판에 다시 정리해주면 상관없는건지, 아니면 무조건적으로 자동화로 생성되었을 때부터 깔끔하게 정렬되게 해야하는건지 궁금합니다!
미해결
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
안녕하세요 유니티 에셋이나 기타 강의 자료를 다운 받아서 학습해보고 싶은데 강의 자료가 어디에 정리가 되어 있는지를 알수가 없습니다. Rookiss 님 강의 자료가 어딨는지 링크 좀 부탁드립니다. 감사합니다.
해결됨
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
안녕하세요! 로드맵 강의를 수강하고 현재 게임을 직접 만들고 있습니다. 캐릭터를 선택창이나 로그인화면 아이템샵 메인로비 등이 있는 로비 화면을 현재 만들고 있는데요 현재는 기능별로 Scene을 새로 계속 생성하여 만들고 있습니다. 근데 UI 데모파일들을 몇개 보면 모두 한 씬에 레이아웃들을 만들어놓고 SetActive 함수로 UI를 제어하는 경우가 많았습니다. 그래서 Scene을 계속 만드는 방식과 하나의 Scene에 레이아웃을 각각 만들어놓고 SetActive함수로 제어하는 방식 두 방식중에 어느 것이 더 효율적인가요? 각각에 장단점이 있을까요? 실제로 현업에서는 어떤 방식을 주로 쓰는지도 궁금합니다! 바쁘시겠지만 답변 부탁드리겠습니다.
해결됨
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
안녕하세요. 양질의 수업 잘 듣고 있습니다! string host = Dns.GetHostName(); IPHostEntry ipHost = Dns.GetHostEntry(host); IPAddress ipAddr = ipHost.AddressList[0]; IPEndPoint endPoint = new IPEndPoint(ipAddr, 7777); Unity 클라이언트의 위 코드를 IPAddress ipAddr = IPAddress.Parse("45.157.574.15"); IPEndPoint endPoint = new IPEndPoint(ipAddr, 7777); 이렇게 제 외부 IP 주소를 넣고 서버를 켠 후 클라이언트를 다른 컴퓨터에서 실행시켜 봤는데 연결이 안되더라고요... (포트 포워딩도 했고 예제 샘플로도 시도해봤습니다.) 구글링을 해봐도 IP주소를 저렇게 지정하면 된다고만 나와있어서 어떤 식으로 더 찾아봐야할지 감이 안잡히네요... 코드 자체에는 문제가 없고 공유기 설정과 같은 외부 문제 코드 자체가 문제 강사님이 보시기에는 어느 부분이 문제일 거 같은지 단서라도 주시면 더 열심히 찾아보겠습니다. 더 찾아보다가 너무 오래걸려서 작은 힌트라도 얻고자 질문드립니다..
미해결
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
안녕하세요. 지금까지 강의를 통해 배운 내용을 바탕으로 간단한 게임을 제작하고 있는 학생입니다. 어떤 파트에 질문을 달아야 할까 고민하다 마무리 부분에 올립니다. GameManagerEx에 SkillLevelUp이라는 Action을 만들어놓고 UI_SkillPopup을 열면 아래의 코드를 통해 LevelUp 함수를 취소/등록합니다. 그런데 ClosePopupUI를 통해 UI_SkillPopup을 닫고 해당 팝업을 다시 켜게 되면 기존에 등록해놓았던 LevelUp 함수가 취소되지 않아 버그가 발생합니다. 제 생각으로는 처음 등록한 LevelUp 함수와 두번째로 등록한 함수의 이름은 같지만 다른 함수로 인식하여 중복으로 등록이 되는 것 같았습니다. 일단은 아래의 코드와 같이 Init 에서는 LevelUp 함수를 추가만 하고 UI_SkillPopup을 닫을 때 LevelUp 함수를 제거하는 방식을 사용하여 해결을 하긴 했습니다만 썩 우아한 방법이 아닌 것 같아 질문드리게 되었습니다. 먼저 제가 인식한 버그가 Action이 중복으로 등록되는 문제가 맞는지, 만약 그렇다고 한다면 이와 같은 상황에서는 Init에서 Managers.Game .SkillLevelUp에 LevelUp 함수를 취소/등록하는 과정을 통해 초기화를 할 수 없는지 궁금합니다. 부족한 질문 봐주셔서 감사합니다.