인프런 커뮤니티 질문&답변

MOOOON님의 프로필 이미지
MOOOON

작성한 질문수

[유니티 레벨 업!] 모듈식으로 개발하는 스킬 시스템

적 스킬 관련 질문

해결된 질문

작성

·

159

0

진행중인 프로젝트에 강의의 시스템을 수정하며 이용하고 있는 중에 고민거리가 생겨 질문 드립니다.

 

기존 Projectile에서 Setup해줄 때 Skill 정보를 받아와서 명중시 해당 Skill의 Effect를 작동시켜 데미지 이펙트를 통해 데미지를 주는 방식이잖아요?

 

근데 원거리 적의 공격을 구현하는 중에 적의 공격도 스킬 방식으로 처리하는 것이 맞을까에 대한 고민이 생겼습니다. 기존 투사체 코드를 이용하려면 스킬을 만들어서 처리하는 것이 맞는데, 적 하나하나마다 스킬을 다 만들어주면 관리하기가 너무 힘들 것 같다는 생각이 들어서 현재는 일단 EnemyProjectile 코드를 따로 파서 카테고리가 다른 엔티티에 명중하면 적(공격자)의 AttackDamage 스탯만큼 데미지를 주는 방식으로 임시로 구현을 해두었습니다.

 

물론 데미지 이펙트 이외에도 CC기와 같은 다양한 이펙트를 주고 싶으면 기존 스킬 방식으로 처리하는 것이 나아보이긴 하는데요, 이런 경우 강사님은 어떤 식으로 구현하고 계신지 궁금해서 여쭤보고 싶습니다.

답변 1

1

Developer G님의 프로필 이미지
Developer G
지식공유자

수강해주셔서 감사합니다.

롤이나 수강생분도 아실만한 유명한 MMORPG 게임들을 보면 기본적으로 '기본 공격'도 모두 Skill이며, 제대로 만들 경우 Player와 AI 구분 없이 Skill을 똑같이 사용할 수 있어야합니다. 강의 말미에서 AI가 Skill을 사용하는 모습을 보여드린 것도 그런 이유입니다.

적 하나하나마다 다 따로 Skill을 만들어주실 필요는 없구요, Projectile을 쏘는 공용 Skill을 하나 만들어주시면 됩니다.

Effect
image
위처럼 DealDamageAction에 Damage Stat을 넣고 Factor를 1로 설정하면 순수하게 Damage Stat 수치만큼 Damage를 주는 Effect가 되겠죠?(말씀하신 AttackDamage 스탯만큼 데미지를 주는 방식)

Skill
image
다음, 해당 Effect를 사용하는 Projectile Skill을 만드셔서 이 Skill을 투사체를 발사하는 Entity들의 기본 공격 Skill로 설정해주시면 됩니다. 그럼 Entity들이 모두 같은 이 Skill을 사용하지만, 자신의 Damage Stat에 맞춰 Damage가 들어가게 될겁니다.

image
강의에서 보셨던 Skill의 Projectile Action인데요, 지금 같은 경우는 Prefab을 고정해놔서 Entity마다 다른 Prefab을 사용할 수가 없죠? 속도도 마찬가지구요. 이 경우엔 약간만 수정해주시면 됩니다.

다음은 예시 Code입니다.

SpawnProjectileAction.cs
image
Entity가 착용한 무기를 가져와서 무기의 정보를 기반으로 Projectile을 생성하는 예시 Code입니다.
Projectile Prefab이 무기가 아니라 Entity 자체에 있다면 Entity에서 찾아오면 될거구요(owner.ProjectilePrefab), ProjectileSpeed 같은 경우에 Entity의 Stat으로 처리하실거라면 Entity의 Stat Value 값을 가져오면 됩니다.(onwer.Stats.GetStat("PROJECTILE_SPEED").Value)
이러면 이제 같은 Skill이지만 Entity 별로 다양한 형태와 속도를 가진 Projectile을 Spawn하게 됩니다.

다만, 기본 공격을 꼭 Skill로 구현해야한다는 법은 없구요, 수강생분처럼 기본 공격을 그냥 따로 구현해도 상관은 없습니다. 기본 공격과 Skill을 분리한다는 느낌으로요. 잘 만들어진 액션 게임처럼 기본 공격에 많은 변형이 있고 , 특수한 Command가 있고하면 Skill로 만드는 것보다는 따로 만드는게 훨씬 편하고 깔끔할테니까요. Skill System에 너무 얽매이지마시고 뭐가 더 적합한가, 유리한가를 판단하셔서 개발을 진행하시면 될 것 같습니다.

구현에 대해 더 궁금한 것이 있으시면 언제든지 질문주세요.
감사합니다.

MOOOON님의 프로필 이미지
MOOOON

작성한 질문수

질문하기