inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

묻고 답해요

173만명의 커뮤니티!! 함께 토론해봐요.

apk 로 빌드해서 폰에 넣으면 실행이 안되네요.

미해결

[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작

아직 완성본이 아니어서 그런것 같습니다만, 안드로이드로 빌드했을 때, 타이틀 화면에서 멈추고, 실행이 안됩니다. 참고 Addressable Labels 는 모두 설정되어 있으며, Build & Load Paths 는 Local 로 되어 있습니다. Addressable content successfully built (duration : 0:00:04.284)

  • C#
  • unity
  • object-pooling
dungdaejang 댓글 1 좋아요 0 조회수 416

xml 로드 문제

해결됨

[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작

안녕하세요. 코딩을 시작한 지 얼마 안 되어 공부 겸 실제 게임 발매를 경험하기 위해 강의를 수강한 학생입니다. 잘 따라가던 도중에 '젬 떨구기' 강의 부분에서 xml 파일이 로드되지 않는 문제가 발생하였는데요. 이를 수정하기 위해 구글링부터 시작해서 챗GPT4에 물어보는 등 여러 시도를 해보았으나, 도저히 저 혼자 힘으로는 해결이 어려워 고심 끝에 질문 글을 남기게 되었습니다. Addressables Groups에는 강사님이 하신 것과 동일하게 프리팹, xml, png 파일 등을 등록하고 Label을 PreLoad로 설정한 상태이고, 코드는 제가 쓴 코드가 혹시 문제가 있나 싶어 강의 자료로 첨부해 두신 코드로 덮어씌워봤는데도 아래와 같이 xml 파일 로드 시 null이 반환되는 상태입니다. 현재 진행 중인 프로젝트가 문제가 있을까 싶어 새 프로젝트를 만든 후 폴더 경로부터 시작해서 모든 과정들을 다시 진행해 보았으나 동일한 에러가 발생하더군요. 되도록이면 제 스스로 이 문제를 해결해 보려고 했지만 유니티란 툴도 처음이고, 코드를 배운 것도 이번이 처음인지라 들이는 시간에 비해 도저히 진척이 없어서 염치 불구하고 이렇게 글 남깁니다. 바쁘시겠지만 확인 부탁 드리겠습니다. 좋은 강의 만들어 주셔서 감사합니다. NullReferenceException: Object reference not set to an instance of an object DataManager.LoadXml[Loader,Key,Item] (System.String name) (at Assets/@Scripts/Managers/Core/DataManager.cs:43) DataManager.Init () (at Assets/@Scripts/Managers/Core/DataManager.cs:21) GameScene.StartLoaded () (at Assets/@Scripts/Scenes/GameScene.cs:22) GameScene.<Start>b__0_0 (System.String key, System.Int32 count, System.Int32 totalCount) (at Assets/@Scripts/Scenes/GameScene.cs:13) ResourceManager+<>c__DisplayClass5_2`1[T].<LoadAllAsync>b__1 (T obj) (at Assets/@Scripts/Managers/Core/ResourceManager.cs:86) ResourceManager+<>c__DisplayClass4_0`1[T].<LoadAsync>b__0 (UnityEngine.ResourceManagement.AsyncOperations.AsyncOperationHandle`1[TObject] op) (at Assets/@Scripts/Managers/Core/ResourceManager.cs:69) DelegateList`1[T].Invoke (T res) (at ./Library/PackageCache/com.unity.addressables@1.21.12/Runtime/ResourceManager/Util/DelegateList.cs:75) UnityEngine.Debug:LogException(Exception) DelegateList`1:Invoke(AsyncOperationHandle`1) (at ./Library/PackageCache/com.unity.addressables@1.21.12/Runtime/ResourceManager/Util/DelegateList.cs:79) UnityEngine.ResourceManagement.Util.DelayedActionManager:LateUpdate() (at ./Library/PackageCache/com.unity.addressables@1.21.12/Runtime/ResourceManager/Util/DelayedActionManager.cs:162)

  • C#
  • unity
  • object-pooling
GoodBBaK 댓글 1 좋아요 1 조회수 788

지금 4분~8분 내용 보는 중입니다.

미해결

C# 프로그래밍 기초

머리에 너무 잘 안들어오고, 학습자료에도 없던데 혹시 이 부분만 정리해주신 자료가 따로 있을까요?

  • C#
dev zipida 댓글 2 좋아요 0 조회수 572

테스트 메모리 릭킹 관련 질문

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

아래와 같은 테스트를 진행했고 이는 강의코드에도 유사하게 발생할 것으로 보입니다. 서버 컨텐츠단에서 패킷 모아 보내기 기능까지 구현 500개의 더미 클라이언트가 S_Chat 을 송신 서버는 비주얼 스튜디오에서 디버그모드로 구동 더미클라이언트는 exe모드로 실행과 종료를 반복 이때 클라이언트의 connect, disconnect가 잦아지면서 서버의 메모리 점유율이 내려가지 않는 현상이 궁금해서 그러는 것이지, 고쳐달라고 떼쓰는게 아닙니다. 이런 현상은 강의 코드에서도 발생할 것으로 보이는데요. 혹시 알고 계신 이유가있다면 그것만 말씀해주시면 됩니다.

  • C#
  • unity
  • 네트워크
김철수 댓글 1 좋아요 0 조회수 465

테스트 중 메모리 릭킹 현상 질문

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

테스트를 하다 릭킹(leaking) 현상이 생기는게 궁금해서 여쭙습니다. 테스트 과정 서버 컨텐츠단에서 0.15~0.25초 단위로 패킷을 모아보내는 기능까지 구현 더미 클라이언트에서 500명이 C_Chat 패킷을 보내도록 구현 서버만 Visual Studio의 디버그 모드로 실행 (메모리 진단을 위해) 클라이언트는 빌드된 exe파일로 접속 클라이언트만 반복적으로 종료하고 다시 실행 이때 서버쪽 메모리 점유율이 올라가기만 합니다. Disconnect() 가 분명히 불리고 소캣을 Clean(), Shutdown()을 하는데 (심지어 Dispose()도 넣음 다 돌아가는거 확인) 서버 메모리 점유율이 260메가 막 그러네요, 아무리 오래 두고 봐도 CG가 정리할 생각을 안해요 ㅠㅠ 다 깔끔하게 정리할 욕심은 없습니다. 다만 릭킹은 안좋아보여서요. 이거 이유가 있을까요? 참고로 리스너쪽 대기 큐 150 이상으로 설정해야 테스트가 잘됐습니다, (강의시 backlog 인자)

  • C#
  • unity
  • 네트워크
댓글 1 좋아요 1 조회수 382

Projectile이 _lifeTime뒤에 사라지지 않는데 어떻게 처리하면 좋을까요...?

미해결

[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작

게임을 실행했을 때, ProjectileController의 _lifeTime(10초) 뒤에 투사체가 없어지지 않아서 SkillController에서 Despawn 하는 부분에 breakpoint를 잡고 실행해봤습니다. 확인해보니 ObjectManager에서 type 이 아래 사진처럼 SkillController로 잡히더라구요. 그래서 else if (typeof(T).IsSubclassOf(typeof(SkillController))) { ... } 조건문에 들어가지 않고 Despawn 함수가 끝나는거 같은데 어떻게 수정하면 좋을까요...? 처음엔 SkillController에서 CoDestroy함수를 아래와 같이 바꿔볼까 했는데 IEnumerator CoDestroy(float delaySeconds) { yield return new WaitForSeconds(delaySeconds); if (this.IsValid()) { Managers.Object.Despawn(this as ProjectileController); } } 나중에 n초 뒤에 사라지는 장판형 스킬을 관리하는 다른 Controller를 만들어야 한다고 한다면 위와 같은 코드처럼 강제로 캐스팅 하면 안될거같고, ObjectManager의 Despawn 함수에 else if (type == typeof(ProjectileController)) { Projectiles.Remove(obj as ProjectileController); Managers.Resource.Destroy(obj.gameObject); } 위와 같은 코드를 추가한다고 해도 어짜피 type == SkillController 라서 저 조건에도 맞지 않더라구요ㅠㅠ 어떻게 고칠지 감이 안잡혀서 질문 드립니다!

  • C#
  • unity
  • object-pooling
박준영 댓글 1 좋아요 0 조회수 568

EC2 서버 패킷 이슈

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)

안녕하세요 루키스님! 저는 강의에서와 달리 움직임 방식을 int 단위가 아닌 float 단위로 움직일 때마다 C_Move 패킷을 보내게 설계했습니다(아마 이러면 패킷을 쏘는 양이 더 많을 것 같아요!) 해당 로직을 로컬 서버에서 작동을 시키고 클라이언트를 저의 로컬 ip에 접속하게 하면 패킷이 밀림 없이 잘 동작하지만 ec2에 서버를 올리고 클라를 ec2 IP에 접속 시키고 동작시키면 패킷이 밀려서 그런진 몰라도 플레이어가 이동하다가 트레이서 현상이 발생합니다. 총알을 쏘면 트레이서를 하지는 않지만 버벅거리면서 나가구요. 기본적으로 Move 로직이 강의와 마찬가지로 클라에서 움직이고 서버에 위치를 통보하는 방식입니다. 이 방식이 패킷이 밀림으로써 클라는 나가 있지만 서버에서의 반영으로 인해 위치가 다시 트레이서 되는 건가 보다 싶어서 움직임 로직을 바꿨습니다. 클라에서 움직인다고 인풋을 주면 패킷을 서버로 보내고 서버에서 움직임을 바꾼 후에 클라에 반영이 되게 바꿔봤습니다! 하지만 이 방식도 로컬에선 잘 동작하지만 ec2 서버에서는 버벅거리더라구요... ec2 인스턴스의 유형을 높은 걸로 해도 똑같고 최적화를 많이 했다고 생각했는데도 계속 버벅거리네요... 혹시 방법이 있을까요... 차이는 로컬 서버냐 ec2 서버냐의 차이인거 같은데, 애초에 물리적인 거리가 있기 때문에 이런걸까요...

  • C#
  • unity
자르트 댓글 1 좋아요 0 조회수 368

Rookiss 님 수업 커리큘럼에 관한 질문이 있습니다!

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] 번외편: ASP.NET Core 심화편

안녕하세요 Rookiss님! 저도 Rookiss님처럼 보안을 공부하다 현재는 모의해킹 업무를 하고있고 게임개발은 너무 어려운거 아닌가 하는 걱정만 하다가 이것저것 코딩하다보니 이제는 겁먹을 필요가 없다고 생각해서 게임개발을 시작해보려고 합니다! 지금 고민중인 부분은 강의 커리를 어떻게 탈지에 대한 고민인데요. [게임 프로그래머 입문 올인원] 강의를 수강할지 MMORPG 게임 개발(유니티 + C#) 로드맵을 수강할지 고민중 입니다 ㅠㅠ 어떤걸 수강하는게 좋을 지 추천 해주실 수 있을까요?

  • unity
  • C#
  • c++
쥐뇨닝 댓글 1 좋아요 0 조회수 568

캐릭터가 여러명이라면...

해결됨

[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작

루키스님 유니티 3강을 완료하고 게임을 만들어 보려고 하다가 막막하던 참에 신규 강의가 나와서 기쁜맘으로 학습중입니다! 이번 강의에서 강조하신 객체들끼리 참조하는 부분이 너무 어려워요. 유저가 관리하는 캐릭터가 여러명일때는 어케 구조를 만들어야 하는지 감이 안잡힙니다. 예를 들어 탕탕 특공대 "용병단" 이라서 유저가 여러 캐릭터를 조작한다면 어떤 캐릭터를 유저가 사용할지 모르니 드래그 앤 드롭 방식도 맞지 않는것 같고 Find를 사용하는 방식도 캐릭터가 많이 질수록 비효율적인것 같고 이럴땐 어떻게 구조를 만들어야하나요? 데이터 매니저 클래스에 리스트나 딕셔너리를 만들어서 객체들을 통째로 들고있다가 필요할때마다 불러서 참조하는게 맞는 접근방식일까요?

  • C#
  • unity
  • object-pooling
vpncities 댓글 1 좋아요 0 조회수 865

Utils에 있는 GetOrAddComponent 질문이 있습니다.

미해결

[라이브 멘토링] 유니티 뱀파이어 서바이벌 장르 모작

강의 34분 10초에서 PlayerController를 가져올 때 GameObject go = Managers.Resource.Instantiate("Slime_01.prefab"); go.name = "Player"; PlayerController controller = go.GetOrAddComponent<PlayerController>(); 그냥 자연스럽게 go 뒤에 GetOrAddComponent 함수를 사용하시던데 이렇게 되는 이유가 뭔가요...? PlayerController controller = Utils.GetOrAddComponent<PlayerController>(go); 저는 위에 코드처럼 호출해서 사용해야 한다고 생각했습니다.

  • C#
  • unity
  • object-pooling
박준영 댓글 1 좋아요 1 조회수 611

text가 아닌 TextMeshPro를 사용해도 괜찮나요?

미해결

레트로의 유니티 C# 게임 프로그래밍 에센스

2021.3.20f1 버전 사용중입니다. 기존 Text가 UI의 Legacy 폴더 안에 있고 원래 Text가 있던 자리에 TextMeshPro가 있네요. 인터넷을 좀 찾아봐도 TextMeshPro를 권장하는 사람들이 많더라구요 시간이 지나면서 새로운 버전이 나온것 같던데 사용법이 비슷하면 TextMeshPro를 사용하는게 더 좋겠죠?

  • C#
  • unity
김창범 댓글 2 좋아요 0 조회수 1783

센드 리시브 버퍼를 살리고 싶어서 몇가지 물어봅니다.

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)

강사님 께서는: SendBufferHelper(버퍼)가 세션 외부에 있는 상황은 바람직 하지만 플레이어 세션중(PacketSession)하나가 send() 처리를 못하고 이런 일회용 버퍼를 계속 물고 있을 수 있다. (ex 사용자가 엘리베이터를 타서 통신이 안되는 경우) 그럼 참조정리를 못하니 GC가 수거를 안해간다. 이 버퍼 릭킹 문제를 처리하기 위해 레퍼런스 카운트를 적용할수도 있다 라고 말씀하셨는데. C#에서 이를 구현하는데 난관이 있어서요(그점도 이미 말씀하셨었죠), 아래와 같습니다. 레퍼런스 카운트 사용 방식 (예상) 만약 100명의 사용자에게 브로드 캐스팅 할경우 이 버퍼에 대한 레퍼런스 카운트를 100으로 세팅한다. 각 세션에서(100개) 각각 send에 성공해서 버퍼에 대한 참조가 끝날 때마다 1씩 감소시킨다. 이 카운트 감소 처리를 할때 쓰레드 동기화에 신경써야 한다. 문제 1 ) 이런 동기화 처리도 성능에 영향을 준다. 레퍼런스 카운트 처리 때문에 샌드함수는 결국 지연되는 것. 문제 2) 매번 다 쓰인 버퍼의 레퍼런스 카운트가 0이 되었다 한들, 그것을 GC가 "항상" "확실히" 수거해가는지 테스트할 방법을 모른다. 문제 3) 레퍼런스 카운트가 0이 안되고 1이 유지되어서 어딘가에서 send가 막혀있는걸 확인 했을때 그 세션을 Disconnect()한다고 해도 GC가 이 버퍼를 "항상", "확실히"수거해 갈지 알 수 없다 (테스트 방법의 부재) 그래서 아래와 같은 질문을 드립니다. !! 질문 0 !!) 강사님께서 메모리 릭에 대한 우려가 있다고 말씀하셨는데, 그게 순전히 우려인지, 혹시 테스트를 해보신건지 궁금합니다. 다시 말해서 C#에서 샌드 리시브 버퍼를 그냥 쓰기로 강행하면 나중에 낭패 볼까요? 질문 1 ) 위의 2,3번 문제를 체크할 수 있는 방법이 있을까요? 질문 2 ) 요즘 C#서버가 많이 보입니다. 모두 이런 문제를 고려했을텐데요, 그냥 매 순간 지금처럼 조각조각 패킷을 만들어 보내는게 대세인가요? 아니면 다른 방법이 있나요? 질문 3) 위의 1번 문제의 성능 감소가 클까요? 질문 4) 혹시 버퍼 크기를 4096 * 100 이 아니라 250, 300 등 작게 잡으면 이문제를 무시해도 될까요? P.S 이 강의 시리즈가 매우 큰 도움이 되고 있습니다. 감사합니다.

  • C#
  • unity
김철수 댓글 1 좋아요 0 조회수 502

배열의 저장 장소

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part1: C# 기초 프로그래밍 입문

안녕하세요 배열 초기화 방법 중 int[] scores = new int[]{ 1, 2, 3, 4, 5} 이런 방법이 있고 점점 생략을 해서 int[] scores = {1, 2, 3, 4, 5} 이런 방법이 있다고 하셨는데 밑에 방법은 일반적으론 stack에 저장되는것처럼 보이는데 new int[]를 생략을 한거니 heap에 저장되는게 맞을까요?

  • C#
김동찬 댓글 1 좋아요 0 조회수 321

경합조건과 임계영역의 차이

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

안녕하세요. Interlocked 과목 중 경합 조건Race Condition에 대한 수업 잘 들었습니다. 과거 네트워크와 운영체제 시간에 배웠던 임계 영역과 경합 조건에 대한 개념이 헷갈려서 질문 드리고 싶습니다. 말씀해주셨던 다수의 쓰레드들이 하나의 데이터 혹은 그러한 영역에 접근하고자 할 때 생기는 문제를 저는 경합 조건이라고 이해했는데요. 이 개념이 혹시 임계 영역을 제가 잘 못 이해하고 있는지, 혹은 경합 조건에 대해 제대로 이해하고 있는지 궁금합니다. 또 선생님께서 생각하시는 임계영역과 경합조건의 차이는 어떠한 것인지도 궁금합니다.

  • C#
  • unity
  • 네트워크
깨끗한 꽁치 댓글 1 좋아요 1 조회수 557

펙토리 함수가 꼭 필요한건가요? 그냥 세션으로 받으면 안되요?

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

public void Connect(IPEndPoint endPoint, Session session) // 사용하는 부분 //connector.Connect(serverEndPoint, () => { return new GameSession(); }); GameSession gameSession = new GameSession(); connector.Connect(serverEndPoint, gameSession); Func 형 말고 그냥 Session을 참조로 받아서 하면 안되나요? 코드가 돌긴 하던데..

  • C#
  • unity
  • 네트워크
김철수 댓글 2 좋아요 0 조회수 603

원모양 크기가 너무 작은 것 같습니다

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘

어떤 설정을 해야 될까요?

  • C#
TK L 댓글 2 좋아요 0 조회수 482

인벤토리 실습 #2 질문 AddUIEvent활용

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part3: 유니티 엔진

인벤토리 실습을 보다 가 이해가 안가는 부분이 생겨서 질문을 남깁니다. 보시면(안보일 수도 있겠지만), Get<GameObject>((int)GameObjects.ItemIcon).AddUIEvent((PonterEventData) => {Debug.Log)})를 했는데.. 여기서 Action 대리자로 람다식이 들어 가서 실행 이 되는건 알겠는데, ㅇ파라미터에 게임오브젝트는 안들어갔는데 이게 왜 바인드가 되는거죠?

  • C#
  • unity
박중희 댓글 1 좋아요 0 조회수 393

위치 동기화 기능구현 질문이 있습니다

해결됨

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)

선생님 안녕하세요 서버강의를 듣고 이를 응용하여 3축 좌표계에서 플레이어가 접속하면 프리팹을 생성하고, 트랜스폼 정보와 애니메이션 정보를 동기화하는 서버를 구현하였습니다. 플레이어가 접속하면 생성되는 프리팹은 언리얼의 HasAuthority와 같이 로컬 클라이언트의 소유가 되어 클라이언트만 자신의 위치를 브로드캐스트하면 다른 플레어들은 위치를 수신하여 손쉽게 구현이 가능했습니다! 하지만 월드에 미리 배치되어있는 무버블 오브젝트들은 어떻게 동기화를 해야하는지 궁금합니다. 누구의 소유도 아닌 공공(?)의 오브젝트들은 누가 동기화 패킷을 보내줘야하는지 어렵습니다 ㅜㅜ 조금 더 설명을 하면, 특정 조건에 함수가 호출되어 움직이는 기능을 수행하는경우는 RPC로 원격지 클라이언트에서 함수를 호출할 수 있게 구현하였습니다. 하지만 미리 씬에 배치되어있는 Sphere 오브젝트를 플레이어가 움직이면서 밀어RigidBody 연산으로 자연스러운 움직임을 어떻게 동기화해야하는지 잘 모르겠습니다.

  • C#
  • unity
  • 서버
Bonnate 댓글 2 좋아요 1 조회수 984

Disconnect 순서 문제질문드리고싶습니다!

미해결

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

가끔 결과가 위처럼 나오는데 이 문제는 서버단에서 RegisterRecv를 해주는 도중에 클라에서 send를 다해주고 Disconnect 해버려서 발생하는 문제인가요?? 위에 Seesion.cs : lin116은 OnRecvCompleted함수에서 OnRecv를 해주고 다시 RegisterRecv()<< 이 함수를 호출하는 줄입니다.

  • C#
  • unity
  • 네트워크
dlwpdus99 댓글 1 좋아요 0 조회수 443

인기 태그

인프런 TOP Writers

주간 인기글