묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
Json 파싱 형식
제이슨을 파싱하는 과정중에서 int, class 형식으로 가져오고 있는데 string, class 형식으로도 가져오게 할 수 있나요?? [Serializable] public class ValueDataLoader : ILoader<int, ValueData> { public List<ValueData> datas = new List<ValueData>(); public Dictionary<int, ValueData> MakeDict() { Dictionary<int, ValueData> dict = new Dictionary<int, ValueData>(); foreach (ValueData Data in datas) dict.Add(Data.ID, Data); return dict; } }
-
해결됨[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
spine을 animator로 교체
안녕하세요 3주 차 코드로 공부하고 있는 중 spine 을 animator controller로 교체하려고 하는데요. Creature.cs 의public virtual void SetInfo(int templateID) { . . SkeletonAnim.skeletonDataAsset = Managers.Resource.Load<SkeletonDataAsset>(CreatureData.SkeletonDataID); SkeletonAnim.Initialize(true); // Register AnimEvent if (SkeletonAnim.AnimationState != null) { SkeletonAnim.AnimationState.Event -= OnAnimEventHandler; SkeletonAnim.AnimationState.Event += OnAnimEventHandler; }부분에서 SkeletonAnim.skeletonDataAsset = Managers.Resource.Load<SkeletonDataAsset>(CreatureData.SkeletonDataID); 는캐릭터 간 다른 애니메이션을 사용하기 위해 json에서 읽어온 animator 파일을 지정하는 걸로 이해하고Animator Controller로 교체했는데요.BaseObject.cs public Animator SkeletonAnim { get; private set; }Creature.cspublic virtual void SetInfo(int templateID) { . . SkeletonAnim.runtimeAnimatorController = Managers.Resource.Load<RuntimeAnimatorController>(CreatureData.SkeletonDataID); // Animator Controller로 교체 // Register AnimEvent if (SkeletonAnim.AnimationState != null) { SkeletonAnim.AnimationState.Event -= OnAnimEventHandler; SkeletonAnim.AnimationState.Event += OnAnimEventHandler; } SkeletonAnim.AnimationState.Event -= OnAnimEventHandler;SkeletonAnim.AnimationState.Event += OnAnimEventHandler;이 부분은 왜 사용하는지 어떻게 수정해야 되는지 모르겠습니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
콜백 방식에 비해 이벤트 방식의 단점?이 와닿지 않습니다
콜백 방식에 비해 이벤트 방식의 단점?이 와닿지 않아서 질문 남깁니다. 아마 제가 대규모 유저를 받는 환경의 코드를 아직 보지 못해서 그런 것 같아서 와닿지 않은것 같습니다. 설명해주신 내용은 클라 소켓 하나당 이벤트 하나를 대응시켜야 하는데 64개까지 제한이고, 여러명을 받는 서버의 코드는 코드가 간단하지 않다는 점을 단점으로 꼽으셨는데 와닿지 않습니다.정말 이벤트를 64개 넘게 관찰해야 하는 상황이 있나요?
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
멘토링 신청 질문
이번에 운영하신다는 오마카세 언리얼5 강의는,기존에 온라인 강의로 오픈하신 언리얼5 강의 3개랑 무슨 차이 인가요?어떤 강의가 더 깊게 알려주는 지 궁금합니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
event관련 질문입니다.
저렇게 SetEvent를 주석을 달고 했을때 무한 대기상태로 들어가는건 이해가 됬습니다. 저상태에선 브레이크 포인트를 잡는다던가, 디버그 행동을 할 수가 없나요?? 저는 현재 WaitForSingleobject가 쓰레드 함수가 끝날때까지 대기 하는것으로 이해하고 있습니다. 쓰레드 함수가 정상적으로 끝나는게 아닌, 외부 함수에 의해서 강제강료 했을때 무한대기 하는 상태가 발생하는데, SetEvent를 호출하지않고 강제종료되는 경우를 고려할수있을까요?
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
AttackBuff.ClearEffect() 메서드 문의
버프류 스킬 AttackBuff.ClearEffect() 메서드 관련 궁금한 점이 있습니다. public override bool ClearEffect(EEffectClearType clearType) { if(base.ClearEffect(clearType) == true) RemoveModifier(Owner.Atk, this); return true; } 여기서 base.ClearFffect() 는ObjectManager.Despawn()을 호출하고, 이건 또ResourceManager.Destroy()를 호출함으로써AttackBuff가 붙어있는 EffectBase 프리팹을 날려버리면서 true를 반환하는걸로 이해하는데요,이 경우 AttackBuff 인스턴스가 날라가게 되는데 그 다음줄 RemoveModifier가 실행되고, 또 자기 자신을 인자로 넘겨줄 수가 있나요?RemoveModifier(Owner.Atk, this);
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
apk 빌드하면 먹통되요
핸드폰에서 한번 해볼까 하고 안드로이드 apk 빌드해서 LDplayer 나 핸드폰 s22 울트라 정도에서 해보려했는데 안되네요 혹시 다른 버전은 다 되고 있나요?일단 터치 안되서 모바일 터치로 변경 했구요그러니 잘되네요 Game Sceen으로 넘어가는 부분도물론 찾아 봐야 겠지만 어떤 문제인지 폰에서는넘어가지지 않구요. 다른분들은 다 잘 되시나요?시뮬레이터에서는 아무 이상없이 잘됩니다.핸드폰 및 LDPlayer 가면 그러네요...Window 빌드 해서 해보니 안되네요...시뮬레이터 빼고 다안될듯 혹시 알아내신분있으면 공유 부탁드려요~~애러가 상당히 많이 나는데...뭐가 문제지 흠.. 강의 소스 그대로 사용했어요
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
구현에 수학이 필요한 경우
실무에서도 개발자들이 전부 수학을 잘하진 않을텐데,구현에 수학이 필요한 경우 어떻게 구현하나요?지금까찌 수학 식이 들어간 코드가 꽤 나왔었는데구조나 설계?가 중요하지 그 부분은 별로 중요하지 않다고 하셨는데, 롤 케릭터 스킬들을 어떻게 구현할 지 생각해보라고 해셔서생각하다가 멀티플레이 기준으로 구현한다고 했을 때 다이애나,카밀,아트록스 등등 수학적으로 구현?해야될 것 같은 스킬들이 꽤 많은 것 같은데 게임 개발자들은 수학도 다 잘하는 건지 궁금하네요,,,
-
해결됨[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
하반기 MMO 서버 프로젝트
안녕하세요 강의 잘보고있습니다.올해 상반기 하반기 나눠 프로젝트를 진행한다고 종종 언급하시는데하반기 MMO 서버 프로젝트도 Unity를 활용한 프로젝트 일까요?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
google Protobuf 관련 메모리 릭
CrtDumpMemoryLeaks(); 함수 호출을 통해 메모리 릭을 검사했는데 강사님의 코드에서는 다 잘 지우는 것 같아서 강사님 코드에서의 릭은 아닌것 같습니다.. 강사님 코드에서 객체 생성을 다 막고 디버깅해도 똑같은 메모리 릭이 남았습니다.. google protobuf 에서의 릭인 것 같은데.. pb.h pb.cc 는 건들지 못하니 고칠 방법도 없고 해서 이렇게 질문 올립니다. 저 메모리 릭을 해결하는 방법이 있을 까요..?
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
지속적인 오류 베이스맵 로드오류
Failed to load prefab : BaseMapUnityEngine.Debug:LogError (object)ResourceManager:Instantiate (string,UnityEngine.Transform,bool) (at Assets/@Scripts/Managers/Core/ResourceManager.cs:28)GameScene:Init () (at Assets/@Scripts/Scenes/GameScene.cs:16)InitBase:Awake () (at Assets/@Scripts/Utils/InitBase.cs:20) NullReferenceException: Object reference not set to an instance of an objectGameScene.Init () (at Assets/@Scripts/Scenes/GameScene.cs:17)InitBase.Awake () (at Assets/@Scripts/Utils/InitBase.cs:20)지속적인 오류가나는데 원인을 못찾겠습니다
-
해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
Win32API 클라이언트 연동
강의에서는 서버에서 정해진 데이터(id, hp, 공격력)를클라쪽으로 broadCast 하고,클라에서는 Recv만 하고 있는데, 클라쪽에서도 Send하고서버에서 Recv하는 echo방식으로는어떻게 수정해봐야할까요..? ㅠ 목적은 Win32APi로 만든 클라이언트 2~3개정도 켜서 PacketHandler까지 구현된 Server와 붙혀서 이동동기화 부터 시도하고 있습니다그래서 클라이언트 1개에서 만약 이동했다면 그 행동이서버랑 다른 클라이언트에도 똑같이 보이게하고 싶습니다ClientPacketHandler에 ServerPacketHandler의 Make_S_TEST 함수를 복붙하고GameServer의 방법과 같이 BroadCast를 해야할지 아니면 Send함수를 따로 구현해야 할지 방향을 못잡겠습니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
RegisterRecv() 함수에서
WSABUF wsaBuf; ::WSARecv(_socket, &wsabuf, ...);위 코드에서 WSABUF 타입 객체를 스택에 생성에서 WSARecv() 함수에 넘기면 이 함수가 바로 완료되지 않고, 나중에 완료 통지로 받는다면 스택에 생성된 WSABUF는 그전에 해제되서 잘못된 메모리에 쓰게 되는 게 아닌가요?또 이런 api들을 호출할 때 넘길 파라미터를 스택에 생성할 지 new 로 힙에 생성할 지 기준은 어떻게 정하시는지 궁금합니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버
클라이언트에 ServerCore를 복사 시, #include 안될 때
포트폴리오 작업하고 있는데, 클라이언트를 PacketHandler까지 작업 완료된 서버랑 연동해보려고 합니다~ ClientServiceRef service = MakeShared<ClientService>(NetAddress(L"127.0.0.1", 7777),MakeShared<IocpCore>(),MakeShared<ServerSession>, // TODO : SessionManager 등1); 클라이언트쪽에서 위와 같은 코드로 서버와 연결하기 위해 ServerCore 라이브러리를 통쨰로 클라이언트쪽으로 가져와야 하는데... 비쥬얼 스튜디오 2022에서파일 --> 추가 --> 기존 프로젝트 메뉴 이 기능으로 ServerCore 프로젝트를클라이언트 솔루션에 복사 하고,파일탐색기에서도 ServerCore 폴더를 클라이언트쪽에 통쨰로 옮겼는데도#include가 안되고 있는데, 방법을 알 수 있을까요?? 클라이언트 솔루션에 ServerCore 프로젝트 추가완료 GameProjcet .cpp소스에서 ServerCore 쪽 파일들 인클루드 시도했으나 에러발생
-
해결됨[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
유니티에서 internal 클래스가 사용되는 예
강의를 들으며 코드를 훑어보던중에 PoolManager.cs에서 Pool 클래스가 internal 접근제한자로 작성되어있는 부분이 궁금하여 질문 드립니다. 현재 코드에서는 어셈블리가 나눠진게Assembly-CSharp, Assembly-CSharp-Editor 인데Pool 클래스가 internal로 작성되는 이유가 있는가요? Editor 어셈블리에서 사용되지 않도록 하는것 인가요? 그리고 유니티에서 internal 접근 제한자가 사용되는 경우가 어떤 경우가 있나요? 간혹 게임 에셋이나 코드드를 보며 공부할때 특정 클래스들이 internal로 되어있는 경우를 보는데이유가 뭔지 궁금점이 생겨 질문 드립니다.
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
ShowBaseUI, ShowSceneUI 차이
UIManager에서 ShowPopupUI는 말 그대로 팝업ShowSceneUI는 게임에서 고정되는 UIShowBaseUI는 뭔지 모르겠습니다.
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
UI_Base 질문
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);elseobjects[i] = Util.FindChild<T>(gameObject, names[i], true);if (objects[i] == null)Debug.Log($"Failed to bind({names[i]})");}} 에서 순서가 for (int i = 0; i < names.Length; i++){if (typeof(T) == typeof(GameObject))objects[i] = Util.FindChild(gameObject, names[i], true);elseobjects[i] = Util.FindChild<T>(gameObject, names[i], true);if (objects[i] == null)Debug.Log($"Failed to bind({names[i]})");}로 object에 value를 findchild로 먼저 다 넣어주고그 뒤에 objects.add로 dic형태 _objects에다 채워주어야 하지않나요? 상관없나요?
-
해결됨[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
Renderer2D의 SortMode가 Default 인경우
안녕하세요 Rookiss님 3주차 강의 #Data02 를 듣는 중에 궁금한 사항이 생겨 질문드립니다.Renderer2D의 Sort Mode 설정을 CustomAxis로 변경후 Sort Axis 설정을 0, 1, 0 으로 하게 되면오브젝트가 그려지는 기준에 Y좌표가 높은(큰) 오브젝트가 먼저 그려지는것을 이해 하였습니다.(Y좌표가 작은 오브젝트가 맨 마지막(제일 위에) 그려짐) 궁금한점은 CustomAxis 로 변경전 Default인 설정에서는 반대로 Y좌표가 낮은(작은)오브젝트가 먼저 그려지게 되는 것인가요? 아니라면 Default 일때는 어떤 기준으로 그려지는 순서가 정해지게 되는것 인가요? 그리고 궁금한것이 여기서 @BaseMap 의 터레인 타일맵 오브젝트들은 Y좌표가 항상 0인데이것은 왜 항상 맨 처음 그려지는지 궁금합니다. 아니면 아직 정확하게 이해하지는 못하였지만 Order in Layer를 먼저 기준으로 해서 정렬 된후 그 다음 순서로 Y축을 기준으로 정렬하는것 인가요?.. 모르는 부분이 많아 혼자 찾아보려니 이해력이 부족해서 이해하지 못한 부분이 많아 이렇게 질문드립니다..
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
CheckHeroCampDistanceAndForcePath() 함수에서
forcePath를 큐에 넣는데Dequeue(); 한 번은 왜 해주는 건가요?
-
미해결[켠김에 출시까지] 유니티 방치형 키우기 게임 (M1 + T2)
RigidBody.simulated 가 false로 되어있으면 투사체가 안 맞는거 같습니다
학습자료 보고 따라 만들고 있는데 투사체가 안 맞는거 같아서(OnTriggerEnter2D 함수로 진입을 안함)이것저것 시도해보다 보니 RigidBody.simulated를 켜면 투사체가 맞는 것을 확인했습니다.근데 학습자료에는 Hero와 Monster Init 할 때, 그리드 방식으로 사용하기 위해 의도적으로 RigidBody.simulated를 끄는 것 같은데, simulated를 끈 상태에서 trigger를 작동시키는 다른 방법이 있는지 궁금합니다. 제가 뭘 놓치고 있는거 같은데 잘 모르겠어요.