묻고 답해요
144만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
수업내용 관련해서 몇가지 질문이 있습니다
안녕하세요 강의 수강중 질문이 몇가지 생겨서 질문드립니다강의에서 제가 놓친걸수도 있는데 변수명앞에 m_의 의미는 뭔가요?유니티에서 게임 실행시에 PlayerPrefs의 Sound값이 True임에도 불구하고 시작할 때 노래가 안나오는 현상이 계속 발생합니다..!디버깅해보니 AudioManager의 Start가 TitleManager의 Start보다 빨리 시행돼서 LoadUserData를 하기 전에 AudioManager의 해당 코드에서 Mute()를 호출하는거 같습니다 (디버깅 해보면 이 시점엔 userSettingsData.Sound 값이 false 입니다)private void Start() { var userSettingsData = UserDataManager.Instance.GetUserData<UserSettingsData>(); if(userSettingsData != null) { if(!userSettingsData.Sound) { Mute(); } } }전체 코드와도 비교해봤을 때 틀린 부분이 없었고 뭔가 될때도 있고 안될때도 있고 이러다보니 원인을 잘 모르겠습니다..!
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
(해결) 맥북 사용하시는 수강생 분이 계시다면 rider, protobuf 조언을 구합니다.
개발환경은 맥북, rider 사용중 입니다.rider 패키지 구성과 protobuf 구성에서 해결 방법을 찾고 있습니다.rider 패키지 구성 현황[구성완료]ServerGameServerServerCore[미구성]ToolsPacketGenerator : 솔루션은 만들었으나 bin 폴더 구성 못함CommonProtocol해결 방법을 알고계시다면, 레퍼런스 또는 조언 부탁드립니다.감사합니다.@추가 내용protobuf 설치는 homebrew 로 설치하였습니다.protoc --version : libprotoc 27.1protobuf 버전 변경 - 3.27.2
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
네트워크 이해가 안되는부분 몇가지 질문있습니다
TCP 통신 할 때 왜 마지막에 Close를 하는건가여? Close를 안하고 계속 통신을 주고 받으면 안되는건가여?데이터를 보내고 받을 때 버퍼에 담아서 통신 하는 데 예를 들어 게임에서 이동데이터와 공격데이터는 각각 버퍼로 나눠서 보내는 개념인가여? 아니면 하나의 버퍼에 보내는 개념일까여?게임에 서버가 여러개 일수 있다고 얘기를 들었는대 그러면 서버IP도 바꿔서 만드는 개념일까요?
-
해결됨[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
프로젝트 버전 관련 궁금한 점이 있습니다.
안녕하세요.루키스님 강의를 꾸준히 듣고 있는 학생입니다!다름이 아니라 현재 Unity 버전은 2023버전도 있고, Unity6도 있던데 이번에 2022.3.32f1 버전으로 강의를 진행하시는 이유가 있을까요?혹시 다른 버전에 어떤 하자나 개인적으로 생각하시는 불편한 점이 있는지 궁금합니다! (사실 저들간의 큰 차이를 잘 모르겠어요)또 다른 하나는 vs 2022버전을 설치하면 프로젝트 셋팅으로 nullable 셋팅이 되어 있고 여기저기 찾아보면 이 셋팅을 유지하는걸 추천하던데, 이걸 disable 처리하신 이유는 유니티가 아직 nullable 프로젝트 셋팅 처리를 지원하지 않기 때문일까요? 아니면 이것도 개인적으로 생각하시는 어떤 이유가 있으셨는지 궁금합니다!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
마우스 Press상태에서 이동할때
이동 관련 해서 질문이 있습니다 마우스를 Ground에서 누른 상태로 이동하다가 마우스를 때지 않고 Monster쪽으로 마우스를 이동하게 되면 몬스터를 타고 움직이는 현상이 있는데 이부분은 어떻게 해결할수있을지 질문드립니다.
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
튜토리얼 시스템
안녕하세요.우선 좋은 강의 만들어 주셔서 감사드립니다.덕분에 원래 생각만 하고 있었던 인디게임개발을 시도해 볼수 있게 되었습니다.회사를 다니면서 튜토리얼 부분이 엄청 중요하구나 지표를 통해 확인하게 되는 계기가 항상 있어. 내가 인디게임을 만들면 튜토리얼을 신경써야 겠다 생각했습니다.허나 아트 출신이라 올라온 강의를 이해하기에도 급급한 실정이고프로그래머 분들에게 구현이 너무 단순한 부분 일수도 있어 글 올릴까 말까 고민을 좀 했지만저 같은 사람도(거의 없겠지만;;;) 있지 않을까 해서 메세지 올려봅니다.생각해 보면 답은 이미 올려주신 강의에 다 있는 것 같은데 가령 퀘스트, UI, 웹서버를 엮어구현하면 될것 같은데 전체적으로 시스템을 관통하고 있는 부분이 있어 가르쳐주신 깔끔한 프레임 워크를 거의 스파게티로 만들... 물론 이렇게 공부하는게 확실하게 이해가는 것이지만.. 뭔가 등대가 될만한 약간의 힌트를 추후에라도 검토해 주신다면 감사하겠습니다!
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
마우스 커서 깜빡거림 관련 질문이 있습니다.
안녕하십니까 강사님!! 강의 정말 잘 듣고 있습니다.저는 Unity 2022.3 버전을 사용하면서 강의 내용을 실습하고 있습니다. 강사님께서 유니티 메뉴얼을 보는게 좋다고 하셨지만 chatgpt도 많이 활용하며 강의를 듣고 있습니다.이번 시간에 마우스 커서 깜빡거림 부분은 2022.3 버전에서는 일어나지 않았습니다( enum 으로 커서 타입을 지정하고 필요할 떄 커서 타입을 바꾸는 부분을 하기 전에도 깜빡거림이 없습니다. ) chatgpt에 질문을 해보니 최신버전으로 업데이트가 되면서 깜빡거리는 현상 개선핫스팟 처리 개선 Cross-platform 호환성 등의 변경사항이 생겼다고 합니다.궁금한점은 이런 변경사항이 생겼음에도 마우스 커서의 상태를 지정해서 Update 문에서 호출시 Curosr.SetCursor 메소드의 호출을 줄이는게 성능 상의 이점이 크니까 enum으로 상태를 지정하고 구현하는 게 좋나요?? 강의 내용상에는 깜빡거리는 현상을 없애기 위해 구현을 시작해서 궁금증이 생겨 질문합니다...!!
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
주차 소스코드를 다운받고 보면서 수강해야할까요?
안녕하세요 강의를 이제 보기시작했는데 코드를 보통 확인하면서 따라치는식으로 이때까지 강의를 시청해왔습니다.이번강의는 소스코드를 미리 다운받고 봐야하는걸까요 ?코드 확인도 못할정도로 빠르게 넘기셔서 문의드립니다!추가로 제가 평소에 사용하지 않는 기능들을 많이 사용하시는거 같은데 이런건 제가 기능들 찾아서 따로 공부해야할까요 아니면 추후에 설명이 따로 해주시는지 궁금합니다.강의 영상에서는 보충학습이 있다고 했는데 어디서 하는지도 궁금합니다!
-
미해결유니티 머신러닝 에이전트 완전정복 (기초편)
배웠던 내용을 기반으로 match3 인공지능으로 플레이 하는 걸 만들고 있는데.. 질문이 있습니다.
match3 게임을 agent가 플레이 하게 하려는 목적으로 시작 했습니다. 과거 match3 게임 개발해 논게 있어서 AbstractBoard 못쓰고 agent 학습 작업을 하였습니다.mlagent Release 21 버젼을 사용했습니다.먼저 퍼즐판은 8*7이고 블럭은 5색깔을 사용한다고 정의 했습니다.public class Match3MLAgentsBoard : Agent 클레스를 정의 하고유니티 mlagnet match3 샘플을 참고해서 8*7 퍼즐판을 색깔별로 있으면 1 없으면 0을 넣는 소스 입니다.public override void CollectObservations(VectorSensor sensor) { MapBoardData mapBoardData = gameMain.IngameData.CurBoardData; MapData mapData = gameMain.IngameData.MapData; int oneHotSize = 5; for (int y = 0; y < mapData.BoardColumns; y++) { for (int x = 0; x < mapData.BoardRows; x++) { SlotTile slotTile = mapBoardData.GetSlotTile(x, y); var type = slotTile.ColorBlock.BlockColorType; for (var i = 0; i < oneHotSize; i++) { sensor.AddObservation((i == (int)type) ? 1.0f : 0.0f); } } } }유니티 mlagnet match3 샘플을 참고해서 agent가 받는 소스를 만들었습니다.public override void OnActionReceived(ActionBuffers actionBuffers) { int aiIndex = actionBuffers.DiscreteActions[0]; MapBoardData mapBoardData = gameMain.IngameData.CurBoardData; var touchSlotIndex = (SharedInt)gameMain.behavior.GetVariable("touchSlotIndex"); var targetSlotIndex = (SharedInt)gameMain.behavior.GetVariable("targetSlotIndex"); int BoardRows = gameMain.IngameData.MapData.BoardRows; int BoardColumns = gameMain.IngameData.MapData.BoardColumns; int row, col; if (aiIndex < (BoardColumns - 1) * BoardRows) { col = aiIndex % (BoardColumns - 1); row = aiIndex / (BoardColumns - 1); int _Index = GetIndex(col, row); touchSlotIndex.SetValue(_Index); int _tarIndex = GetIndex(col + 1, row); targetSlotIndex.SetValue(_tarIndex); } else { var offset = aiIndex - (BoardColumns - 1) * BoardRows; col = offset % BoardColumns; row = offset / BoardColumns; int _Index = GetIndex(col, row); touchSlotIndex.SetValue(_Index); int _tarIndex = GetIndex(col, row + 1); targetSlotIndex.SetValue(_tarIndex); } Debug.Log("###OnActionReceived - end"); }보상은 매칭되는 블럭이 수 만큼 보상을 주도록 했습니다. 3개 매칭 되면 0.3점 4개가 매칭 되면 0.4점 이런식으로요. match3MLAgentsBoard = gameObject.GetComponent<Match3MLAgentsBoard>(); foreach (DamageObject damageObject in gameMain.IngameData.DamageList) { foreach (var baseObject in damageObject.BaseObjectBlocks) { gameMain.IngameData.mReward += 0.1f; rewardSum += 0.1f; } } match3MLAgentsBoard.AddReward(rewardSum); Behavior Paremeters 세팅 입니다.8*7*5=2808*(7-1) +7*(8-1) =97 해서 나온 값을 넣어 줬습니다.(유니티 셈플 계산법) mlagents-learn "C:\Users\TT\Desktop\ml-agents-release_21\config\ppo\Match3.yaml" --env=C:\MyProject\MatchPuzzle\Client\trunk\MatchPuzzle\run\MatchPuzzle.exe --run-id=InGameMain --force --no-graphics하고 나니 이렇게 나오고 학습이 안되었습니다..그래서 mlagent match3 샘플을 보니.Match3SensorComponentMatch3ActuatorComponent있다는걸 찾았고Match3SensorComponent에 Write(ObservationWriter writer) 부분과 Match3ActuatorComponent의 OnActionReceived(ActionBuffers actions)부분을 흉내 내어 Component을 만들고Match3MLAgentsBoard CollectObservations 함수와 OnActionReceived함수는 주석을 쳤습니다.그리고 실행mlagents-learn "C:\Users\TT\Desktop\ml-agents-release_21\config\ppo\Match3.yaml" --env=C:\MyProject\MatchPuzzle\Client\trunk\MatchPuzzle\run\MatchPuzzle.exe --run-id=PuzzleMatch3Sencor --force --no-graphics 여전히 학습이 안되여서.. 유니티 mlagent가 제공하는 match3 샘플을 돌려 보기로 했습니다. mlagents-learn "C:\Users\TT\Desktop\ml-agents-release_21\config\ppo\Match3.yaml" --env=C:\Users\yree1\Desktop\ml-agents-release_21\Project\Match3Run\UnityEnvironment.exe --run-id=UnityMatch3Data --force --no-graphics 샘플도 딱히 학습이 된다고 보기 어려워서.. 혹시 너무 짧아서 학습이 제대로 안되었다고 생각되어 더 길게 학습을 하였습니다. 여전히 학습이 제대로 안되는거 같아서 mlagnet 셋팅 환경이 문제일지 몰라서 3dball 프로젝트를 돌려 봤습니다.mlagents-learn "C:\Users\TT\Desktop\ml-agents-release_21\config\ppo\3DBall.yaml" --env=C:\Users\yree1\Desktop\ml-agents-release_21\Project\3DBallRun\UnityEnvironment.exe --run-id=3DBallData --force --no-graphics 엄청 학습이 잘됩니다. 3dball만 잘 학습 됩니다..혹시나 싶어서 Release 20에서도 학습을 진행 했지만.. 결과는 똑같이 제대로 학습 되지 않았습니다. 제일 궁금한건 왜 match3 agent가 잘 학습을 못하는지 굼금합니다..제가 만든건 왜 학습이 안되는지..궁금 하지만 더 궁금한건.. 유니티에서 제공하는 match3은 문제가 없을텐데.. 제가 뭔가 명령어 옵션이나.. 등등을 놓친게 있을까요?? 정말 아무것도 손 안되고 Release 21압축 풀고 바로 돌린건데요. 그 외에 몇까지 궁금한게 있습니다.학습을 시키면 어느Step까지 기다리고 학습을 평가 해야 되는지..아까보여 드렸든 match3 보상 값은 올라 갔다 내려갔다 계속 값이 왔다 갔다만 있습니다.. 이걸 계속 기다리다보면 언젠가 학습을 잘하게 되는지..값이 계속 왔다 갔다 거리면 그만 해야 되는지..학습이 실패 했다고 정확하게 아는 방법이 있나요? 유니티 mlagent가 제공하는 match3은 왜 Agent을 상속 받아 CollectObservations,OnActionReceived함수를 정의 안하고.. Match3SensorComponent,Match3ActuatorComponent 만들어서 학습을 진행 했는지 궁금합니다. match3 센서값 엑터값을 위에 적은 방법이 아닌 다른 방식으로 많이 셋팅 해봤습니다. 그러나 제대로 학습 되는 경우가 없었습니다.. 인공지능 ppo 알고리즘이 제대로 된 결과값을 얻을 수 있는 팁이나 약간의 규칙(이렇게 하면 조금 잘된다..) 이런게 있을까요?Match3.yaml 파일만 유일하게 learning_rate_schedule: constant을 쓰고 있습니다. 나머지 파일은 전부 learning_rate_schedule: linear 쓰고 있습니다. constant,linear 차이가 뭔가요?? constant을 linear 로 바꾸고 학습 했지만.. 결과는 여전히 학습 되지 않았습니다.파이썬으로 ppo 구현해서 유니티랑 연동하면 왜 학습을 잘 못하는지.. 어떻게 하면 잘 할수 있는지.. 등등이 도움이 될만한 것들이 있을까요? 기존 유니티가 제공하는 ppo를 쓰지 않고 python으로 제작해서 작업 하면 어떤 이득이 있을까요?match3 게임 말고 다른 게임에 mlagent를 적용하고 싶은데요.. match3 같은 색깔 블럭이면 게속 연결 가능한 게임 입니다. 프렌츠타워 라는게 임이 가장 유명합니다. 사진첨부 합니다.위에 게임처럼 연결 할 수 있는 블럭이 3개 ,4개 5개일수도 8*7이라면 56개 일수도 있는 상황은 Behavior Paremeters 세팅은 어떻게 하나요? 8*7퍼즐판이라면 discrete branches 56이되고 Branch 0~Branch 55까지 다 55값을 넣어서는 학습이 잘 안됩다.. 이걸 어떻게 해야 될지.. 전혀 몰르겠습니다. 긴글 읽어주셔서 감사합니다.. 수업 내용과 직접적인 관련이 없는 내용을 질문해서 죄송합니다. 하지만 여기 말고는 물어볼 곳이 없어서.. 이렇게 글 남기게 되었습니다. 감사합니다.
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
강의시 스크립트 추가될 때마다 해야하는 작업
안녕하세요 루키스님의 이번강의가 처음인 수강생입니다.클라이언트 작업만 하다가 서버 작업은 처음인지라chat gpt 돌려가며 1주차 서버 스크립트에 주석으로 공부한 내용을 달아놨고앞으로 추가되는 스크립트들은 직접 복사해서 붙여넣고 또 주석으로 공부한 내용을 넣어놓을 생각이었는데매번 바뀌는 강의자료에 제가 공부했던 내용을 덧붙일 자신이 없습니다...앞으로도 추가되는 스크립트를 직접 추가하게 될때, 해야 하는 절차를 알 수 있을까요?
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
죄송합니다. 제가 인프런이 처음이라 못찾는것 같은데.. 개발 관련 리소스는 어디서 받을 수 있나요?
안녕하세요.이제 막 강의를 시작한 학생입니다.다름이 아니라 해당 강의에서 쓰이는 리소스를 미리 다운 받아두고 강의를 계속 듣고 싶은데요.리소스는 어디서 받을 수 있는 건가요?
-
해결됨유니티 시스템 프로그래밍 Pt.1 - 상용 게임 구현을 위한 핵심 시스템 올인원 패키지
싱글턴 관련해서 질문있습니다
안녕하세요 싱글턴 관련해서 질문이 있습니다싱글턴 클래스가 결국 어느 위치에서든 참조할 인스턴스를 생성하는건데 static으로 선언한 클래스도 동일한 기능을 하잖아요?static 클래스로 선언안하고 singleton으로 구현하는 자세한 이유가 궁금합니다!관련해서는 사실 찾아보면서 대략적으로 알고는 있는데 뭔가 더 명료한 답변이 필요하고 현업에 관해서도 얘기를 들을 수 있으면 좋을거같아 질문드립니다좋은강의 감사합니다
-
해결됨[유니티 게임 개발] 핵심 기술과 디자인 패턴
override, virtual 변수는 어떻게 하나요?
상속 강의에서 'override - 자식 클래스에서 부모 클래스의 virtual로 정의된 함수 혹은 변수를 변경을 진행하기 위해서 사용'라고 적혀 있던데요. 강의에선 함수만 예로 보여주고 변수는 안보여줘서 찾아보니까 잘 안나오네요.override, virtual 키워드로 검색하면 함수 내용만 나와요. 변수 예도 알려주시면 감사하겠습니다.
-
해결됨새싹부터 시작하는 Unity 게임 개발
제가 놓친 부분이 있는데 혹시 어디서 확인할 수 있나요...?
안녕하세요 강의 잘 듣고 있습니다! 이번에 Animation 편을 보는 와중 코드 한 부분이 추가 된게 보이는 데 제가 어디서 놓쳤는지 확인이 안돼서요ㅠㅠㅠ 혹시 이 코드 수정된 부분을 강의 어느 챕터에서 확인할 수 있을까요...?애니메이션 편 6:59초 점프 키에 대한 코드입니다..GetComponent<SpriteRenderer>().sprite = JumpSprite;이 코드를 어떤 용도로 쓰인지에 대해 놓쳤어요오오ㅠㅠ
-
해결됨두고두고 써먹는 유니티 비동기 프로그래밍
[패키지] Accessibility, com.cysharp.unitask 패키지가 없어요.
(사진)
-
미해결[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
안녕하세요? 서버, 데이터베이스 개념공부에 관한 질문
안녕하세요. 이번에 처음으로 루키스님 강의를 접하게 되었습니다. 사실 서버나 데이터베이스 이런거 연동없이 클라이언트로만 게임을 만들어보는 건 어느정도 해봐서 괜찮을 줄 알고 강의를 구매했습니다.하지만 이 부분에 대한 개념이 없다보니 수업자료의 소스코드를 봐도 뭐가뭔지 하나도 모르겠더군요. 그래서 루키스님이 따로 만드신 유니티 기본 강의를 먼저 듣거나 병행하는 등의 방법으로 해당 강의를 들으려 합니다.PART4부터 PART9까지 수강을 하고 들으면, 이 정도 프레임워크까지는 혼자서 만들 수 있는 수준이 될 수 있을까요?
-
해결됨[유니티 게임 개발] 핵심 기술과 디자인 패턴
CSV 강의 스크립트 파일
스크립트 파일은 어디서 받을 수 있을까요?
-
해결됨[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
막힌 부분이 있어 질문드립니다
인디케이터가 원뿔형으로 하였을 때 중앙이 마우스 커서를 향하게 회전하게 할려면 어떻게 해야 하나요??private void RotateTowardsMouse(){Vector3 mousePosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);mousePosition.z = 0;Vector3 direction = mousePosition - transform.position;float angle = Mathf.Atan2(direction.y, direction.x) * Mathf.Rad2Deg;transform.rotation = Quaternion.Euler(new Vector3(0, 0, angle));}2d 환경에서 인디케이터 코드에 이 코드를 추가하여 update에서 실시간으로 회전하게 만들었는데문제가 90도 일때는 45도 지점이 마우스 커서 방향을 향하게 되는데180도는 0도 지점270도일때는 135지점에 마우스커서가 향하게 할려했는데 315도 지점에 마우스커서가 향하게 됩니다실제로 탐색하는 부분인 searchArea 코드에서는ector2 requesterPosition = requesterObject.transform.position;Vector2 searchDirection = requesterObject.transform.forward;if (isRotateWithMouse){Vector2 mouseWorldPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);searchDirection = (mouseWorldPosition - requesterPosition).normalized;}// 중략//if (Vector2.Angle(searchDirection, direction) < (angle * 0.5f))targets.Add(entity.gameObject);이렇게 수정하였는데 이쪽은 원하는 범위를 제대로 탐색합니다요약하자면은 실제 탐색범위는 원하는 범위를 탐색을 하는데인디케이터의 범위가 실제 탐색범위와 일치하지 않습니다.제가 실력이 아직 부족하여 문제점을 제대로 해결하지 못해 질문드립니다.
-
해결됨[유니티 게임 개발] 핵심 기술과 디자인 패턴
[3분 17초] 2차원 배열 구조 그림 예시
행과 열을 반대로 그리신 것 같아요.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
ReaderWriterLock 구현연습 강의 질문입니다.
강의 23:26초 화면동일 쓰레드가 락을 획득했는지 여부 확인하는 코드에서int lockThreadId = (_flag & Write_mask ) >> 16;if (Thread.CurrentThread.ManagedThreadID == lockThreadId)이 부분이 있는데 쓰레드 아이디는 항상 15비트 이하의 정보로 제한이 되어있는건가요? 15비트 정보를 초과한 숫자가 들어오면 문제가 될듯 보이는데 코드 실행해보면 정상작동되네요.