소개
안녕하세요, 게임을 사랑하고 개발을 사랑하는 게임 프로그래머 Developer G입니다.
저는 어떻게하면 깔끔하고 체계적인 코드를 작성할 수 있을지 항상 고민하는데요,
제 고민의 결과물들을 여러분들에게 아낌없이 가르쳐드리겠습니다!
강의
전체2수강평
게시글
질문&답변
2024.10.03
Getcomponent 호출 빈도에 관하여 질문이 있습니다.
수강해주셔서 감사합니다. GetComponent 함수를 for문 호출로 한번에 10만번씩 사용하는게 아니라면 함수 하나 때문에 프레임 드랍이 생길 걱정은 안하셔도 됩니다. 최적화라는건 AI, 아트, 물리, 코드, 사운드 모든 것들이 복합적으로 작용해서 이루어지는 것이지 단순히 코드를 잘 짜거나 못 짰다고 어떻게 되는 것은 아닙니다. 감사합니다.
- 0
- 1
- 11
질문&답변
2024.10.01
TargetSearcher없이 어떻게 해야하는지 질문이 있습니다.
프로그래밍은 시험 문제가 아니기 때문에 기능 구현에 맞고 틀리고는 없으므로 제가 맞다 틀리다 함부로 말씀 드릴 수 없습니다. 특히나 상대방이 왜 이렇게 설계 했는지 설계의 의도를 자세히 모르는 상태에서는 더더욱 그렇구요. 굳이 얘기드리자면 구현한 코드가 생각하신 결과를 낸다면 맞는거고 아니라면 틀렸다고 볼 수 있겠죠. 강의에서도 말씀드렸듯 이 강의의 스킬 시스템 역시 하나의 가이드일뿐 정답이 아니며, 수강생분들이 어떻게 강의의 시스템을 수정하시든 본인이 의도한대로 동작한다면 그게 맞는 겁니다. TargetSearcher를 뺀다는건 강의에서 학습한 스킬 시스템 구조 자체를 바꾸는 것이기 때문에 구조를 바꾼 독자적인 시스템에 추가적인 기능을 어떻게 만드냐고 물어보시면 대답드리기가 좀 곤란합니다. 저에게 만드신 독자적인 시스템을 이해하고 해당 기능까지 추가해달라는 얘기와 마찬가지니까요. TargetSearcher를 제거하시겠다면 원래 TargetSearcher가 하던 기능들을 어떻게 구현할 것인가를 먼저 생각해야하구요, 일단 제거해버리고 그 다음은 어떻게 해야하지 고민하는 것은 매우 안좋은 코딩 습관입니다. 하드 코딩을 하게 만드니까요. 현재 상태에서 어떻게 기능을 구현해야할지 모르시겠다면 TargetSearcher를 제거하기 보다는 무기에 // WeaponCollider.cs List objects = new(); List Objects => objects; void OnCollisionEnter(Collision col) => objects.Add(col.transform.gameObject); void OnCollisionExit(Collision col) => objects.Remove(col.transform.gameObject); 이런 Script를 달아두고, TargetSearchAction으로 // SearchWeaponTargetAction.cs TargetSearchResult Search(...) => new (requesterEntity.Weapon.GetComponent ().Objects.ToArray()); 이런 식으로 WeaponCollider가 보관하고 있는 Object들을 return하는 Action을 만드는 것도 한 방법입니다. 한 가지 조언을 더 드리자면, 만들려고 하는 시스템이 만들기 버겁거나 복잡하다면 무작정 만들기 보다는 이전에 말씀드렸듯 관련 튜토리얼을 보거나 다른 에셋을 분석 하는 과정이 필요합니다. 저도 지금도 뭔가를 만들 때 무작정 만들고 보는 경우는 거의 없구요, 거의 항상 다른 게임, 다른 시스템, 다른 에셋, 오픈 소스들을 분석하고 진행합니다. 현업에서 활동하시는 다른 개발자분들도 다 마찬가지구요. 몇 줄 코딩하고 막히고, 몇 줄 코딩하고 문제 생기고를 개발 내내 반복하실게 아니라면 좀 천천히 돌아가시는걸 추천드리겠습니다.
- 0
- 2
- 18
질문&답변
2024.10.01
전투시스템과 결합하려고 합니다.
수강해주셔서 감사합니다. 비효율적인지는 실제 코드를 보지 않는 이상 알 수 없는지라 지금 말씀드릴 수 있는건 아니구요, 조언 드릴 수 있는 부분은 일단 만드시고 문제가 생기면 그때 생각하시라는겁니다. 개발 경험이 적으면 아무리 고민해도 만들어낼 수 있는 결과물에 한계가 존재합니다. 그렇기 때문에 더 나은게 있지 않을까 끝 없이 고민하기 보다는 어느 정도 구상이 되면 만들고, 결과물에서 문제점을 파악하고, 개선하고, 다시 문제점을 파악하고, 개선하고 이 루틴을 반복하며 경험을 쌓는게 중요합니다. 말씀해주신 내용은 전투 시스템의 개발을 시작하는 초기 단계의 아이디어로써 나쁘지 않다고 보구요, 에셋스토어에서 잘 팔리는 전투 시스템 에셋을 구매해서 로직을 분석하거나 유튜브에서 관련 강좌를 보는 것도 고민 해결에 큰 도움이 되실겁니다. 요즘은 좀 덜하지만 저도 옛날엔 오픈소스나 에셋들을 엄청 많이 분석했었습니다. 감사합니다.
- 0
- 2
- 24
질문&답변
2024.09.28
uphandcast만 트리거를 쓰는건지 궁금합니다.
수강해주셔서 감사합니다. (사진) upHandCast가 Trigger Type인건 해당 Animation을 쓰는 Skill에서 Trigger Type으로 설정해서 그렇구요, 혹시 왜 다른 Animation들은 Bool형으로 만들고 upHandCast만 Trigger 형태로 만들었는지 물어보시는거라면 예제를 보여드리기 위한 것일 뿐 다른 이유는 없습니다. Code를 보면 Trigger Type일 경우 Entity가 DefaultState로 전이되기 때문에 DefaultState의 규칙을 따르므로 행동에 아무런 제약이 없습니다. 감사합니다.
- 0
- 2
- 24
질문&답변
2024.09.17
다른형식의 근접공격에 대해 질문할것이 있습니다.
수강해주셔서 감사합니다. 몬스터 헌터나 다크 소울의 근접 액션은 정교하게 만들어져있기 때문에 제가 확답 드리긴 어렵구요, 간단하게는 무기에 Collider를 넣고 TargetSearcher가 무기 Collider에 닿은 Target들을 가져오게 만들면 되지만, 몬스터 헌터나 다크 소울처럼 정교하게 만들어진 전투는 단순한 Skill System만으로는 무리고 함께 전투를 제어할 Combat System이 만들어져 있어야합니다. 물론 Skill System만으로도 만들려면 만들 순 있겠지만 좀 하드 코딩이 되겠죠. 감사합니다.
- 0
- 2
- 54