indiegamemaker
Học viên
419
Đánh giá
31
Điểm khóa học
4.9
안녕하세요, 이재현입니다.
1인 게임 개발자를 꿈꾸며 유니티를 독학으로 시작했고, 2009년부터 2012년 까지 1인 개발로 모바일 게임 10여종을 출시했습니다. 절대강좌! 유니티 출간 및 오프라인 강의를 진행했습니다. 강의를 진행하면서, 잘 아는 것과 잘 가르치는 것은 다르다는 사실을 매번 깨닫고 있습니다. 이러한 경험을 바탕으로, 제가 가진 지식을 여러분들께 더 효과적으로 전달하기 위해 늘 노력하고 있습니다.
이번 강의가 여러분께 좋은 출발점이 되어, 즐거운 게임 개발자의 세계로 나아가는 데 작은 보탬이 되기를 기원합니다. ~
주요 강의 이력
패스트캠퍼스 - 유니티 캠프 1기 ~ 8기
팀 스파트르타 온라인 튜터
T아카데미
NHN 엔터테인먼트
넷마블 게임아카데미
ETRI (한국전자통신연구원)
한콘진, 경콘진, 성남산업진흥원
KAIST, 서강대, 중앙대, 한성대, 단국대 특강
주요 활동
절대강좌! 유니티 집필 (일본, 중국 출판)
유니티 UNITE 2014 세션 특강
유니티 UNITE 2018 핸드온 세션 특강
유니티 인더스트리 2022 핸드온 세션 특강
유니티 코리아 공인 마스터스 2기부터 5기까지 활동
Khóa học
Đánh giá khóa học
djsskach613705
·
Khóa học tuyệt đối! Unity6 - Masterclass phát triển game mạng (Part3) : 2D RPG phát triển với NetcodeKhóa học tuyệt đối! Unity6 - Masterclass phát triển game mạng (Part3) : 2D RPG phát triển với Netcode- Khóa học tuyệt đối! Unity6 - ECS/DOTS Programming Masterclass
- Khóa học tuyệt đối! Unity6 - Xây dựng hệ thống backend sử dụng UGS
123123123123123
·
Khóa học tuyệt đối! Unity6 - Masterclass phát triển game mạng (Part3) : 2D RPG phát triển với NetcodeKhóa học tuyệt đối! Unity6 - Masterclass phát triển game mạng (Part3) : 2D RPG phát triển với Netcodemuttul589114
·
Khóa học tuyệt đối! Unity6 - Masterclass phát triển game mạng (Part3) : 2D RPG phát triển với NetcodeKhóa học tuyệt đối! Unity6 - Masterclass phát triển game mạng (Part3) : 2D RPG phát triển với Netcode
Bài viết
Hỏi & Đáp
완강 후 궁금한 것
안녕하세요. 양승근님, 완강 축하드립니다. 가능은 하지만 Host / Server 모드 일때는 호스트 한대에 모든 연산과 네트워크 처리가 몰립니다. 프래임드랍과 랙이 걸릴것으로 예상됩니다. 따라서 Dedicated Server 가 필요하며 역시 서버 한대 보다는 분산전략을 세워야 합니다. 4명정도 접속해서 하는 코옵 수준의 설계와 100인 접속 배틀로얄급은 처음 설계부터 고민을 많이 해야 합니다. 특정지점에 유저가 몰릴경우 모두 부하가 걸리는 현상이 발생하겠죠. 로비와 릴레이를 사용하셔야 합니다. 호스트방식으로는 100 동접을 구현할 수는 없습니다. 로비,릴레이, 데디 서버(Unity HostServer) 방식으로 우선을 설계를 잡으시고, 처음에는 16명 -> 32명 -> 50명 이런식으로 늘리면서 부하테스트를 하시길 권해드립니다.
- 0
- 1
- 18
Hỏi & Đáp
39강 질문
안녕하세요. 양승근님,질문주신 내용 두 가지 다 정확히 이해하고 계십니다. 제가 설명이 조금 부족했나봅니다.
- 0
- 1
- 15
Hỏi & Đáp
기초적인 질문
안녕하세요. 양승근님,우선 질문을 제대로 이해했는지 모르겠지만, 상태머신 구현할 때나 다른 코드 작성할 때 기본 Monobehavior와 인터페이스를 상속받아서 사용하는 부분에 대한 질문이신것으로 이해했습니다.우선 C#은 다중 상속을 지원하지 않지만 Interface를 통해 구현할 수가 있습니다.public class Enemy : MonoBehaviour, IDamageable, IInteractable { ... }그리고 특정 클래스와 느슨한 결합(디커플링) 구조를 구현할 수 있습니다. SOLID 원칙중 인터페이스 분리원칙과도 부합하는 방식이라고 생각하시면 되시구요. 추후 코드의 확장 및 수정에도 용이한 장점도 있습니다.어떤 부분의 코드에서 의구심이 드셨는지를 몰라서 원론적인 말씀만 드렸습니다.
- 0
- 2
- 30
Hỏi & Đáp
ecs관심이 있었는데 강의 잘 보았습니다.
안녕하세요. Sura J 님,좋은 질문 감사합니다. 1번째 질문에 대한 답변입니다.Unity ECS는 컴파일 타임에 데이터 레이스컨디션을 감지합니다. 즉, Burst 컴파일러와 함께 사용될 때, Unity ECS는 시스템이 접근하는 데이터에 대한 읽기 및 쓰기 권한을 분석하여 데이터 레이스를 방지합니다. 그리고, ITriggerEventsJob 은 각 충돌 이벤트마다 Execute 메서드가 독립적으로 호출됩니다. 즉, 각 충돌 이벤트는 별도의 작업으로 처리되며, 이로 인해 레이스가 발생할 가능성이 줄어듭니다.충돌처리가 미스하는 Enemy가 보인다고 하셨는데, 아마도 동일한 엔티티에 대해 여러 충돌 이벤트가 동시에 발생했을 발생하는 것으로 추측됩니다.(정확하지는 않지만) 따라서 값을 직접 변경하는데신 EntityCommandBuffer 사용하거나 NaviveQueue를 사용하는 것도 고려해볼 수 있습니다.이 부분은 저도 테스트를 해봐야 할 것 같습니다.[ReadOnly] 속성과 Job Dependency로 기본적으로 thread-safe한 구조를 제공하지만, 특정 상황에서는 추가적인 동기화 과정이 필요할 수 있을것 같습니다. 2번째 질문에 대한 답변입니다.우선 만마리 이상의 경우 성능저하에 대한 우려에 대해 질문하셨는데요.첫번재는 엔티티 수가 많을수록 Job 완료 대기 시간이 길어질수 있고, 두번째는 ComponentLookup의 캐시 미스가 증가할 수 있습니다. 코드를 검토해보고 개선할 수 있는 부분이 있는지 확인해 보았습니다. 우선 EnemyMovementSystem, EnemyHpBarSystem의 경우 시스템의 실행 순서를 명확히 명시하는 것이 좋을것 같습니다. // EnemyMovementSystem [UpdateInGroup(typeof(SimulationSystemGroup))] [UpdateAfter(typeof(FixedStepSimulationSystemGroup))] // 충돌 처리 후 실행 partial struct EnemyMovementSystem : ISystem { ... } // EnemyMovementSystem [UpdateInGroup(typeof(SimulationSystemGroup))] [UpdateAfter(typeof(FixedStepSimulationSystemGroup))] // 충돌 처리 후 실행 partial struct EnemyMovementSystem : ISystem { ... }강의에서는 적 캐릭터를 리스폰하지 않았지만 만약 리스폰 기능을 구현한다면 풀링 기법을 사용해 Enemy가 죽었을 때 Entity를 삭제하는 것이 아니라 비활성화하는 방법도 고려해볼 수 있습니다.미쳐 생각하지 못했던 부분에 대해 좋은 질문을 해주셔서 감사합니다. 종합적으로 코드를 다시 한번 검토해보고 최적화할 수 있는 부분이 있는지 살펴보겠습니다. 감사합니다.
- 0
- 2
- 54
Hỏi & Đáp
Default Player Prefab 파괴시 재생성
네, 가능합니다. ~다음과 같이 커스텀 스폰 로직을 구현하실 수 있습니다. 하지만 보통 네트워크 게임에서 주인공 캐릭터를 삭제하지는 않습니다. (네트워크 세션이 종료됩니다.) 따라서, 리스폰 시간동안 캐릭터를 비활성화했다가 다시 활성화시키는 방법을 사용합니다. var player = Instantiate(playerPrefab, spawnPos, Quaternion.identity); player.GetComponent().SpawnAsPlayerObject(clientId, true);
- 0
- 2
- 30
Hỏi & Đáp
캐릭터 네트워크 애니메이션 질문 (29강의)
안녕하세요. 네, Server Authority 에 대해 정확히 이해하셨습니다. 또한, 서버에서 별다를 코드가 없어도 실행 권한을 Server로 실행했을 때 애니메이션을 실행하면 다른 클라이언트에게도 NetworkAnimator에 의해 자동으로 전송이 됩니다. 질문 역시 정확히 이해하고 계십니다. Transform 의 경우 서버 권한일 경우 클라 -> 서버 -> 클라로 데이터가 이동하기 때문에 네트워크 레이턴시가 발생합니다. 이 경우에는 별도로 클라에서 네트워크 레이턴시를 고려해 위치 보정 작업을 해주어야 하는 문제가 있습니다.클라이언트 실행은 클라에서 직접 실행(위치, 애니메이션 등)하는 것을 의미하고, 실행 요청이란 의미는 서버측에 요청을 하는 것을 의미합니다.수강하시다가 또 궁금하신점이 있으시면 편하게 질문해주세요.꼭 완강하시길 응원합니다.
- 0
- 1
- 31
Hỏi & Đáp
Warrior가 Gobin에게 달려가 충돌하면 Gobin이 뒤로 튀겨나가는 현상??
안녕하세요.물리 충돌이 발생하는 Collision 에서는 막을 수 있는 방법은 mass와 drag 값을 순간적(충돌 순간)에 충돌 당하는 쪽에 크게(Infinity) 설정해서 밀리지 않도록 할 수 있습니다. 하지만 이 방법도 완전한 해결책은 아니구요. linarVeclocity 역시 0으로 처리하셔야 하면 효과가 있습니다. 아래 코드는 테스트한 코드는 아닙니다만, 이런식으로 처리하시면 밀리는 현상은 현저히 줄일수 있으실 겁니다.private void OnCollisionEnter2D(Collision2D other) { if (other.collider.CompareTag("Player")) { this.gameObject.GetComponent().mass = float.MaxValue; this.gameObject.GetComponent().linearVelocity = Vector2.zero; } } private void OnCollisionExit2D(Collision2D other) { if (other.collider.CompareTag("Player")) { this.gameObject.GetComponent().mass = 1f; // 원래 질량으로 복원 this.gameObject.GetComponent().linearVelocity = Vector2.zero; } }
- 0
- 2
- 40
Hỏi & Đáp
Warrior의 InputHandler.cs 의 OnEnable(), OnDisable() 메서드 부분에서 공격에 문제가 있는 것 같아요.
까만돌님, 알려주셔서 감사합니다. 제가 놓친 부분 잘 말씀해주셨습니다. 실수를 했네요ㅠㅠ다시한번 감사드려요~
- 1
- 2
- 39
Hỏi & Đáp
Netcode 사용시 운영관점 질문
안녕하세요. DongJu Yoo님,완강후 2회차 실습까지 ... 감사합니다.~추가적으로 실무에서 알아 두시면 도움이 될만한것 중에서 운영 관점에서 몇가지 말씀드리겠습니다.배포 자동화(CI/CD)실시간 멀티플레이 게임은 그 특성상 패치 주기가 짧습니다. 따라서 CI/CD 구축해 자동 빌드 및 배포 환경을 갖추는 것이 중요합니다. 기존의 Github Actions, 젠킨스 같은 경우 유니티의 특성과는 다소 거리가 있기에 유니티에 특화된 Cloud Build기능을 학습하시는 것도 좋습니다.모니터링 및 로깅Netcode 자체만으로는 세션 상태나 네트워크 품질을 추적하기 어렵습니다.패킷 손실, 지연(RTT), 서버 상태를 실시간으로 점검하는 것이 필요합니다. UGS의 Analytis(또는 AWS CloudWatch)의 활용법을 배우시면 좋겠습니다.확장성있는 설계 vs 확고한 설계초기에 룸 기반 구조(Relay)로 시작하고, 유저 수가 늘어나면 전용 서버(Dedicated Server) 구조로 전환한다는 전략을 세울수 있습니다. 하지만 그 구조를 변경하는 것이 쉽지 않습니다. 더군다나 라이브 상태에서는요. 저 개인적으로는 처음부터 Relay방식으로 갈지 아니면 데디 방식으로 할지를 처음 부터 확실하게 결정하고 설계 및 구현하시길 권해드립니다.개발환경 분리물론 깃으로 코드를 관리하시겠지만 운영 전에 반드시 개발 코드를 개발–릴리즈(스테징)–라이브 환경을 철저하게 분리하시고, 트래픽 테스트를 거치는 것을 추천드립니다.그리고 Unity 6 이후에는 UGS와 NGO의 통합성이 좀 더 강화되어 운영 환경 설정이 훨씬 간편하고(?) 단순해졌습니다. 특히 대시보드에서 다양한 모니터링과 기능이 계속 강화되고 있기에 예전보다 편리해졌습니다. 실습 잘 진행하시고 좋은 성과 있으시길 기원합니다.
- 0
- 1
- 45
Hỏi & Đáp
캐릭터 이동 방식을 A* Pathfinding 에셋으로도 한번 부탁드립니다.
안녕하세요. 크리스팍님,말씀하신 부분은 간단하게나마 적용시키는 예제를 추가 콘텐츠로 올려드리겠습니다. 다만, 지금 준비중인 강좌가 마무리된 후에나 가능할것 같습니다. 추후 추가 영상을 올리게 되면 여기 게시글에 다시 한번 더 글을 남겨두겠습니다.완강하시길 기원합니다. ~
- 1
- 1
- 52





