소개
안녕하세요, 게임을 사랑하고 개발을 사랑하는 게임 프로그래머 Developer G입니다.
저는 어떻게하면 깔끔하고 체계적인 코드를 작성할 수 있을지 항상 고민하는데요,
제 고민의 결과물들을 여러분들에게 아낌없이 가르쳐드리겠습니다!
강의
전체2수강평
게시글
질문&답변
2024.09.17
다른형식의 근접공격에 대해 질문할것이 있습니다.
수강해주셔서 감사합니다. 몬스터 헌터나 다크 소울의 근접 액션은 정교하게 만들어져있기 때문에 제가 확답 드리긴 어렵구요, 간단하게는 무기에 Collider를 넣고 TargetSearcher가 무기 Collider에 닿은 Target들을 가져오게 만들면 되지만, 몬스터 헌터나 다크 소울처럼 정교하게 만들어진 전투는 단순한 Skill System만으로는 무리고 함께 전투를 제어할 Combat System이 만들어져 있어야합니다. 물론 Skill System만으로도 만들려면 만들 순 있겠지만 좀 하드 코딩이 되겠죠. 감사합니다.
- 0
- 2
- 31
질문&답변
2024.09.13
Input 스킬 구현 질문
수강해주셔서 감사합니다. 해당 기능은 ApplyCount마다 Effect와 TargetSearcher, Animation을 따로 지정할 수 있게 확장해주시면 됩니다. 강의에서 여러 Data들을 Level로 묶었듯이 여러 정보들을 ApplyCount로 묶는겁니다. (사진) 이게 강의에서 만든 단일 설정의 Skill이구요, (사진) 이런 식으로 Action과 관련된 설정을 묶어서 현재 ApplyCount에 해당하는 설정을 가져와서 사용해주면 됩니다. ApplyCount가 많을 시에는 Level처럼 새로운 ApplyCount 설정이 있을 때까지 이전 ApplyCount 설정을 사용하는 형태로 만들어주시면 됩니다. 이미지에는 없지만 PrecedingAction과 Action도 추가해주시면 ApplyCount에 따라서 완전히 다른 형태의 공격이 나가는 Skill도 만들 수 있습니다.(ex.리신 음파-1타 투사체-2타 돌진) 이 이외의 방법으로는 Input마다 Skill들을 아예 따로 만들어서 Link 시켜두고 Skill을 사용할 때마다 Skill이 Link된 다른 Skill로 교체되게 만드는 방법이 있습니다. 방법은 여러가지가 될 수 있기 때문에 조언드린 얘기를 토대로 해당 기능 구현을 시도해보시면 될 것 같습니다. 감사합니다.
- 0
- 3
- 48
질문&답변
2024.09.07
텍스트 변환 Mark에 대하여 질문이 있습니다.
수강해주셔서 감사합니다. stack이 0(=기본 Action)일 때는 '$[effectAction.keyword.effectIndex]' 이 형식의 Mark를 쓰게 되구요, stack이 0 보다 클 때는 '$[effectAction.keyword.stackActionIndex.stack.effectIndex]' 형식의 Mark를 씁니다. Mark를 이런 식으로 정한건 한 눈에 봤을 때 '기본 Action의 Mark다', '~ Stack의 ~ Index의 Action의 Mark다'라는걸 알아보기 위해서입니다. if (stack == 0) 이 부분을 없애고 '$[effectAction.keyword.stackActionIndex.stack.effectIndex]' Mark만 쓰도록 통일해도 되지만, 이럴 경우 기본 Action의 Mark도 '적에게 $[effectAction.defaultDamage.0.0.0] 피해를 줍니다.' 이런 식으로 길게 작성해줘야합니다. 개인적으로 이게 싫어서 구분을 해준 것일 뿐 큰 의미는 없습니다. Mark의 형태와 Mark를 Replace하는 방식은 제 취향에 맞춘 것이기 때문에 강의에서 말씀드렸다싶이 'Mark를 Replace해서 Description을 만드는 방법'만 숙지하신다면 세부적인 부분은 개인 취향에 맞게, 더 낫다고 생각하시면 방향으로 수정하시면되므로 너무 얽매이실 필요는 없습니다. 감사합니다.
- 0
- 1
- 21
질문&답변
2024.09.05
Destroy() 지연 파괴에 관하여
수강해주셔서 감사합니다. 지연 파괴를 해주는 이유는 다른 Script에서 null check를 통과하여 Quest의 Cancel 상태를 확인할 시간을 주기 위해서입니다. 보통은 Cancel을 onQuestCanceled event나 onQuestStateChanged event로 확인하겠지만 그럴 수 없는 경우를 대비한 작업입니다. 강의에서는 이번 Frame에서만 상태를 확인할 수 있게 한 Frame만 쉬어줬는데 짧다고 여겨질 경우 여유를 두고 2~3 Frame 정도를 쉬어줘도 됩니다. 물론 이런 대비가 불필요하다고 여겨지시면 지연 파괴 부분을 없애셔도 아무 문제 없습니다. 감사합니다.
- 0
- 1
- 23
질문&답변
2024.09.04
스킬 구현 질문
수강해주셔서 감사합니다. 만들고자하는 스킬의 Reference가 있을 땐 그 Reference를 Frame 단위로 면밀히 관찰하시는게 좋구요, 그레이브즈 Q의 경우 Skill 사용 모습을 보면 1. 탄환이 날아감(=Projectile) (사진) 2. 탄환이 사라짐 (사진) 3. 탄환이 사라졌던 위치에서 범위 공격을 가하는 탄환이 새로 나타남(=SkillObject) (사진) 4. SkillObject가 사라지면서 반대 방향으로 날아가는 Projectile을 쏴 닿는 모든 적에게 Damage를 줌 (사진) Frame 단위로 봤을 때 처음 발사하는 총알은 닿는 적에게 Damage를 주는 Projectile이고, Projectile이 끝 사거리에 도달하거나 벽에 부딪히면 주변에 Damage를 주는 SkillObject를 Spawn하고, SkillObject가 사라질 때 반대 방향으로 날아가는 Projectile을 쏜다는걸 유추할 수 있습니다. 그레이브즈의 Q Skill은 3개의 Action이 결합된 형태인거죠. Skill Particle도 언뜻보면 하나인 것처럼 보이지만 면밀히보면 동작에 따른 여러가지 Particle들이 마치 하나인 것처럼 자연스럽게 이어진 형태입니다. 이를 구현하기 위해서는 SpawnProjectileAction과 SpawnSkillObjectAction의 내용을 결합할 필요가 있구요(=SpawnProejctileAction에 SpawnSkillObjectAction을 변수로 추가하거나 아예 새로운 Action을 만드는 등), Projectile의 동작을 모듈화해서 사거리 끝에 닿거나 방해 물체에 닿았을 때 SkillObject를 Spawn하게 만들어주면 됩니다. SkillObject에도 Projectile 변수를 추가해서 SkillObject의 동작이 종료되는 시점에 Projectile을 Spawn하게 만들어주면되구요, Projectile의 이동 동작으로 Spawner 반대 방향으로 날아가도록 지정해주면 될겁니다.(=이동 Logic에 대한 모듈화) 강의에서 만든 칼날비 Skill이 칼날이 닿을 때마다가 아닌, 주기적으로 Damage를 주는 눈속임 Skill이였듯 면밀히 보지 않으면 알 수 없는 부분도 있고, 이런 부분 때문에 쉬운 것도 어렵게 만드는 상황이 생길 수 있으니 뭔가를 모방하고자 할 때는 항상 면밀히 관찰하시는걸 잊으시면 안됩니다. 감사합니다.
- 0
- 2
- 63