묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨새싹부터 시작하는 Unity 게임 개발
캐릭터 이동 구현 rotation 값 변경
강의 자체에서는 Scale 값을 음수로 변경해서 캐릭터의 방향을 전환했는데 혼자서 rotation 값으로 방향 전환을 해보려다 실패해서 질문 남깁니다.position : 오브젝트의 현재 위치eulerAngles : 오브젝트의 회전 각도localScale : 오브젝트의 크기이 내용을 기반으로if(Input.GetKey(KeyCode.RightArrow)) { transform.Translate(speed * Time.deltaTime, 0, 0); transform.eulerAngles= new Vector3(0f, 0f, 0f); } else if (Input.GetKey(KeyCode.LeftArrow)) { transform.Translate(-speed * Time.deltaTime, 0, 0); transform.eulerAngles= new Vector3(0f, 180f, 0f); } 코드를 이렇게 작성했는데 캐릭터 자체의 방향 전환만 되고방향키대로 움직이지 않습니다.Rotation 값으로 캐릭터의 방향 전환을 하려면 어떻게 코드를 수정해야 할까요?
-
해결됨두고두고 써먹는 유니티 VR
안녕하세요 VR기기 게임에 대해서 질문할게요!
안녕하세요 VR기기 게임에 대해서 질문할게 있는데요 강의를 듣고 VR기기 오큘러스 퀘스트2 로 빌드하여게임를 만들고 있는데 다른 VR기기에도 연동이 될까요??아니면 다른 VR기기용으로 또 만들어야하나요??XR interaction toolkit으로 만들었다면 steam, vr관련 앱에게임 출시가 불가한가요?
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
수업자료질문
수업자료에서 파일을 다운받았는데 studyfile.gz를 다운받으니 유니티 프로젝트가 아니고 이상한 폴더가 가득있어요. ㅠㅠ . 참 열심히 듣겠습니다~
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
헉!!! ㅠㅠㅠ 몰랐어요 구현하고 싶은거있었는데
안녕하세요 구현하고 싶은 스킬있는데 스킬 보다는 약간 시스템이긴합니다 헤헤 늦었겠죠 ??다음에는 꼼꼼하게 봐야 겠어요 ㅠㅠ 좋은강의 감사합니다
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
typeof 와 GetType
DataTransformer.cs 에서ParseExcelDataToList 함수 안에 typeof와 GetType을 혼용해서 사용하시는 것을 보고 궁금해서 찾아보다가 질문드립니다. typeof의 경우에 컴파일 타임에 형식의 메타 데이터를 참고해서 Type 형식을 뱉어주고GetType의 경우에 인스턴스의 형식을 런타임에 가져오는 경우 사용하는 걸로 알고 있는데요.위 함수에서 typeof(LoaderData)를 통해 Type을 가져오더라구요. 이 경우에 제네릭 타입 매개변수는 컴파일 시점에 정확한 형식을 모르기 때문에 GetType을 사용하는 것이 적절하지 않을까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
버튼 클릭시 점수가 올라가지 않습니다.
using System; using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; public class UI_Button : UI_Base { //[SerializeField] //TextMeshProUGUI _text; enum Buttons { PointButton } enum Texts { PointText, ScoreText, } enum GameObjects { TestObject, } enum Images { ItemIcon, } private void Start() { Bind<Button>(typeof(Buttons)); Bind<TextMeshProUGUI>(typeof(Texts)); Bind<GameObject>(typeof(GameObjects)); Bind<Image>(typeof(Images)); //Get<TextMeshProUGUI>((int)Texts.ScoreText).text = "Bind Test"; GetButton((int)Buttons.PointButton).gameObject.AddUIEvent(OnButtonClicked); GameObject go = GetImage((int)Images.ItemIcon).gameObject; AddUIEvent(go, (PointerEventData data) => { go.transform.position = data.position; },Define.UIEvnet.Drag); } int _score = 0; public void OnButtonClicked(PointerEventData data) { _score++; //_text.text = $"점수 : {_score}"; Get<TextMeshProUGUI>((int)Texts.ScoreText).text = $"점수 : {_score}"; } }using System; using System.Collections; using System.Collections.Generic; using TMPro; using UnityEditor.SceneManagement; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UI; public class UI_Base : MonoBehaviour { Dictionary<Type, UnityEngine.Object[]> _objects = new Dictionary<Type, UnityEngine.Object[]>(); protected void Bind<T>(Type type) where T : UnityEngine.Object { string[] names = Enum.GetNames(type); UnityEngine.Object[] objects = new UnityEngine.Object[names.Length]; _objects.Add(typeof(T), objects); for (int i = 0; i < names.Length; i++) { if (typeof(T) == typeof(GameObject)) objects[i] = Util.FindChild(gameObject, names[i], true); else objects[i] = Util.FindChild<T>(gameObject, names[i], true); if (objects[i] == null) Debug.Log($"Failed to bind({names[i]})"); } } protected T Get<T>(int idx) where T : UnityEngine.Object { UnityEngine.Object[] objects = null; if (_objects.TryGetValue(typeof(T), out objects) == false) return null; return objects[idx] as T; } protected TextMeshProUGUI GetText(int idx) { return Get<TextMeshProUGUI>(idx); } protected Button GetButton(int idx) { return Get<Button>(idx); } protected Image GetImage(int idx) { return Get<Image>(idx); } public static void AddUIEvent(GameObject go, Action<PointerEventData>action,Define.UIEvnet type = Define.UIEvnet.Click) { UI_EventHandler evt = Util.GetOrAddComponent<UI_EventHandler>(go); switch(type) { case Define.UIEvnet.Click: evt.OnClickHandler -= action; evt.OnClickHandler += action; break; case Define.UIEvnet.Drag: evt.OnDragHandler -= action; evt.OnDragHandler += action; break; } //evt.OnDragHandler += ((PointerEventData data) => { evt.gameObject.transform.position = data.position; }); } }using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.UIElements; public class UI_EventHandler : MonoBehaviour, IPointerClickHander ,IDragHandler { public Action<PointerEventData> OnClickHandler = null; public Action<PointerEventData> OnDragHandler = null; public void OnPointerClick(PointerEventData eventData) { if (OnClickHandler != null) OnClickHandler.Invoke(eventData); } public void OnDrag(PointerEventData eventData) { if (OnDragHandler != null) OnDragHandler.Invoke(eventData); } }드래그작동은 잘 되는데, 버튼 클릭하면 점수가 올라가지 않습니다. UI_Button스크립트에 52번째줄, public void OnButtonClicked 부분에 중단점을 찍어 보기도 했고, UI_Base 스크립트의 switch문에 있는 Click과 Drag부분에도 해봤는데 어느부분이 문제가 있는지 찾지를 못했습니다. 제가 디버깅을 잘 못해서 이런건지..ㅠㅠ 다른 분들 질문과, 코드 정리 올려주신거 비교해봐도 틀린 부분이 없는거 같은데 무슨 문제인지 잘 모르겠습니다 ㅠㅠ
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
섹션2 - Tilemap 강의에서 BaseMap 프리팹에 Front_01 용도가 궁금합니다.
섹션2 - Tilemap 강의에서 BaseMap 프리팹에 Front_01은 어떤 이유로 필요한건지 알 수 있을까요?Front_01 온/오프를 해봐도 큰 변화는 보이지 않아서관리의 목적이나 개발의 용이성등의 이유가 있을 것 같은데궁금합니다.
-
미해결[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템
Skill의 Custom Action 중 Action의 유니티 버그 레포트
안녕하세요 강의 잘 보고 있습니다.다름 아니라 Skill에 CustomAction의 Action 탭에서 Value값들을 바꿀려하면 유니티 버그 레포트가 나타나면서 유니티가 꺼지는 현상이 지속되고 있습니다.EX) Owner Or User를 Target으로 바꿀시 크래시...다른 Cast나 Charge, Preceding 쪽에선 문제가 발견되지 않습니다.스크립트상으론 강사님의 스크립트 그대로 가져와도 똑같은 문제가 발생하는 것 같은데 아님 혹시 제가 놓친 부분이 있나 싶어서 문의드립니다.
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
Level Data 이후 영상 540p 송출
이번에 올라온 'Level Data ~기타 레벨 디자인 및 오류 수정' 강의 영상 대부분이 540p의 저해상도로 송출되는데 확인 부탁드립니다.
-
미해결[Unity] 함께 만들어가는 방치형 게임 개발
Level Data 영상 무한 로딩
안녕하세요 레벨데이타 영상이 무한 로딩 걸립니다 확인 부탁드립니다
-
미해결유니티 머신러닝 에이전트 완전정복 (기초편)
DQN 실행 오류
아래와 같이 에러가 발생하는데 원인을 못찾겠습니다. 도움 좀 부탁드립니다. github에 있는 DQN.py를 실행하였습니다. 10 Episode / Step: 152 / Score: -0.34 / Loss: nan / Epsilon: 1.000020 Episode / Step: 332 / Score: -0.57 / Loss: nan / Epsilon: 1.000030 Episode / Step: 455 / Score: -0.51 / Loss: nan / Epsilon: 1.000040 Episode / Step: 754 / Score: 0.01 / Loss: nan / Epsilon: 1.000050 Episode / Step: 1010 / Score: 0.15 / Loss: nan / Epsilon: 1.000060 Episode / Step: 1169 / Score: 0.25 / Loss: nan / Epsilon: 1.000070 Episode / Step: 1376 / Score: 0.20 / Loss: nan / Epsilon: 1.000080 Episode / Step: 1616 / Score: -0.33 / Loss: nan / Epsilon: 1.000090 Episode / Step: 1863 / Score: -0.04 / Loss: nan / Epsilon: 1.0000100 Episode / Step: 2091 / Score: -0.02 / Loss: nan / Epsilon: 1.0000... Save Model to ./saved_models/GridWorld/DQN/20240821214516/ckpt ...110 Episode / Step: 2316 / Score: -0.12 / Loss: nan / Epsilon: 1.0000120 Episode / Step: 2568 / Score: -0.34 / Loss: nan / Epsilon: 1.0000130 Episode / Step: 2755 / Score: -0.78 / Loss: nan / Epsilon: 1.0000140 Episode / Step: 2910 / Score: 0.06 / Loss: nan / Epsilon: 1.0000150 Episode / Step: 3190 / Score: -0.27 / Loss: nan / Epsilon: 1.0000160 Episode / Step: 3484 / Score: -0.48 / Loss: nan / Epsilon: 1.0000170 Episode / Step: 3752 / Score: -0.56 / Loss: nan / Epsilon: 1.0000180 Episode / Step: 3920 / Score: -0.76 / Loss: nan / Epsilon: 1.0000190 Episode / Step: 4142 / Score: 0.19 / Loss: nan / Epsilon: 1.0000200 Episode / Step: 4467 / Score: -0.42 / Loss: nan / Epsilon: 1.0000... Save Model to ./saved_models/GridWorld/DQN/20240821214516/ckpt ...210 Episode / Step: 4771 / Score: -0.30 / Loss: nan / Epsilon: 1.0000Traceback (most recent call last): File "/Users/neweins/Projects/project_unity/ml-agents/build/GridWorld/ref.py", line 224, in <module> loss = agent.train_model() File "/Users/neweins/Projects/project_unity/ml-agents/build/GridWorld/ref.py", line 141, in train_model q = (self.network(state) * one_hot_action).sum(1, keepdims=True) File "/opt/homebrew/Caskroom/miniforge/base/envs/mlagents/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1553, in wrappedcall_impl return self._call_impl(*args, **kwargs) File "/opt/homebrew/Caskroom/miniforge/base/envs/mlagents/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1562, in callimpl return forward_call(*args, **kwargs) File "/Users/neweins/Projects/project_unity/ml-agents/build/GridWorld/ref.py", line 83, in forward x = F.relu(self.conv1(x)) File "/opt/homebrew/Caskroom/miniforge/base/envs/mlagents/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1553, in wrappedcall_impl return self._call_impl(*args, **kwargs) File "/opt/homebrew/Caskroom/miniforge/base/envs/mlagents/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1562, in callimpl return forward_call(*args, **kwargs) File "/opt/homebrew/Caskroom/miniforge/base/envs/mlagents/lib/python3.10/site-packages/torch/nn/modules/conv.py", line 458, in forward return self._conv_forward(input, self.weight, self.bias) File "/opt/homebrew/Caskroom/miniforge/base/envs/mlagents/lib/python3.10/site-packages/torch/nn/modules/conv.py", line 454, in convforward return F.conv2d(input, weight, bias, self.stride,RuntimeError: Given groups=1, weight of size [32, 6, 8, 8], expected input[32, 168, 3, 64] to have 6 channels, but got 168 channels instead
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
안녕하세요 질문있습니다
안녕하세요 로딩도 만드신다고 햇는데 혹시 로비창도 강의 있나요??
-
해결됨[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
Session Send 멀티스레드 관련
안녕하세요 Session쪽 Send 만들어 보고 있습니다.구현하면서 궁금한게 Send에서 lock을 잡고 RegisterSend쪽에서는 lock을 잡지 않는 상황인데RegisterSend에서 하나의 스레드가 들어와서 while문을 돌면서 sendQueue를 Dequeue하고 있는데 이 과정에서 다른 스레드가 Send에서 sendQueue Enqueue를 할 수 있지 않나 생각이 듭니다. 그래서 RegisterSend에서 적어도 while문에는 lock을 걸어줘야 공유자원 _sendQueue에 대해서 안전하게 처리 될 수 있지 않나라고 생각 하는데 만약 안전하다면 왜 안전한지에 대해서 듣고 싶습니다.감사합니다!
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
강의 영상 화질과 관련해서 문의 드립니다.
안녕하세요.강의 영상 화질과 관련해서 문의 드립니다.강의 영상 중에섹션2 클라이언트 시스템 구현근접 공격영상부터 FHD에서도 강의 영상이 조금 흐리게 보이는 현상이 있습니다.(Render Texture 강의는 괜찮습니다!)근접 공격 이전 강의인 방치형 레벨업 버튼 강의와 바로 비교가 됩니다.확인 부탁 드립니다.감사합니다!
-
해결됨[Unity] 함께 만들어가는 방치형 게임 개발
ui 아이콘과 엑셀 데이터 가 누락된거같습니다
안녕하세요, 강의 내용에 대해 몇 가지 여쭤보고 싶은 점이 있습니다.먼저, 강의 자료 중 하트 아이콘과 플러스 아이콘 , 엑셀데이터 등 몇 개가 보이지 않는 것 같아요. 혹시 제가 놓친 부분이 있는지, 아니면 자료를 다시 한번 확인해 주실 수 있을까요?그리고 강의 중 유튜브 영상이 재생되어 오디오가 중복되는 경우가 있었어요. 집중해서 들을 수 있도록 이 부분을 조정해 주시면 정말 감사하겠습니다.
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진
리플렉션을 써야하는 이ㅠ
리플렉션을 써야하는 이유를 잘 모르겠습니다.리플렉션은 가능하면 지양하는게 좋다고 알고 있습니다. 런타임일반화하는 특성상 성능이 떨어질 수 밖에 없다고 알고 있습니다.그래서 아래과 같이 작성해 보았는데, 이건 어떠신가요?가독성 때문에 이렇게 작성하신것 같다는 생각도 들긴하는데 아직 충분히 의문이 해소되질 않네요
-
해결됨[켠김에 출시까지] 유니티 캐주얼 모바일 MMORPG (M2)
SocketAsyncEventArgs Pooling
안녕하세요 강의 참고하면서 서버 만들어 보고 있는데 https://learn.microsoft.com/ko-kr/dotnet/api/system.net.sockets.socketasynceventargs?view=net-8.0#remarks해당 문서에서 pooling이 있더라구요 생각해보니 동접이 꽤 많다라고 가정하면(약 3000?) 이 SocketAsyncEventArgs 생성 소멸이 많이 일어난다고 생각했습니다.그래서 pooling을 한번 만들어보고 있는데 만드는 중에 Dispose를 언제 해줘야 할지 감이 잘 안옵니다.현재는 Client가 Disconnect될 때 Push하게 되는데 Push에서 poolCount가 3000이 넘으면 이걸 AllClear라는걸로 pool에 있는 SocketAsyncEventArgs를 다 Dispose해주는 상황인데 이렇게하면 3000이 넘기 전까지는 메모리에 계속 남아 있으니 먼가 찜찜합니다.이런 문제가 있는데 좋은 해결책이 있을까요?감사합니다!
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
패킷 형식 질문입니다.
WebPacket코드를 살펴보면Server의 WebPacket은 프로퍼티를 통해 변수를 작성하였고Client의 WebPacket은 일반 변수를 사용하였는데둘다 프로퍼티 또는 일반 변수로 통일하지 않은 이유를 알 수 있을까요?
-
미해결[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
JobQueue의 Push함수 관련 질문 있습니다.
안녕하세요. 강의 정말 잘 보고 있습니다. JobQueue의 Push 함수를 호출하는 스레드가 Action까지 처리하게 되는데, 이는 Push를 호출하는 시점부터 해당 Queue에 모든 Job이 비워질 때까지 Caller가 Blocked 됩니다. 이를 JobQueue의 Pop과 Action.Invoke를 담당하는 스레드를 하나 만들고, 백그라운드에서 폴링하는 방식으로 만들려 합니다. 즉, Push를 호출한 스레드를 사용할 지, 미리 스레드를 만들어두고 폴링하는 방식으로 사용할 지의 차이인 것 같습니다. 두 방식 중 어느 방식이 나을지 알고 싶습니다. 감사합니다.
-
미해결유니티 머신러닝 에이전트 완전정복 (기초편)
ML-Agents 살펴보기 11페이지 질문입니다.
inference Device 타입이 default, GPU, Burst, CPU 4가지로 말씀주셨습니다. 제가 공부하는 PC환경은 mac인데 default, computer shader, burst, pixel shader로 타입이 보입니다. 왜 차이가 나는지와각 타입의 의미를 알 수 있을까요?