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

jkp8277님의 프로필 이미지
jkp8277

작성한 질문수

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

Skill (9) - Animation 설정 및 예제 Skill 제작

스킬 구현 질문

작성

·

103

0

잘 듣고 있습니다 강사님.

 

롤로 치면 그레이브즈 Q 를 구현하고 싶은데 Action을 Spawn Skill Object Action으로 하고 비슷한 파티클을 써서 해보니

제 위치에서 나가는게 아니라 클릭한 기준으로 직선으로 나가더라구요

여러가지 방법을 시도 해보고 있는데 어떻게 해야할지 조언 부탁 드립니다!

답변 2

1

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

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

만들고자하는 스킬의 Reference가 있을 땐 그 Reference를 Frame 단위로 면밀히 관찰하시는게 좋구요, 그레이브즈 Q의 경우 Skill 사용 모습을 보면

1. 탄환이 날아감(=Projectile)

스크린샷 2024-09-04 004451.png


2. 탄환이 사라짐

스크린샷 2024-09-04 004539.png


3. 탄환이 사라졌던 위치에서 범위 공격을 가하는 탄환이 새로 나타남(=SkillObject)

스크린샷 2024-09-04 004625.png


4. SkillObject가 사라지면서 반대 방향으로 날아가는 Projectile을 쏴 닿는 모든 적에게 Damage를 줌

스크린샷 2024-09-04 005446.png


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

jkp8277님의 프로필 이미지
jkp8277
질문자

구체적인 답변 정말 감사합니다.

실례를 무릅쓰고 하나 더 궁금한 것이 있어서 여쭙니다.

image.png

저 파란 부분은 SkillObject라 이해했는데 저 부분은 원형보단 사각형에 가까워 보입니다.

SearchArea.cs에선 Physics.OverlapSphere를 사용하여 인식하기 때문에 좀 더 정확도가 떨어진다 생각했습니다.

따라서 사각형에 맞게 Physics.OverlapBox를 사용한 모듈을 만들려 합니다.

강사님이 만들어주신 스크립트로도 구동이 가능한가 해서 질문을 드렸습니다. 된다면 어떻게 해야 할지 조언 부탁 드립니다!

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

해당 부분은 말씀하신대로 OverlapBox를 사용한 Module을 만들어야합니다.
내용 자체는 SearchArea에서 OverlapShere가 OverlapBox로 바뀌고(Box Angle은 Requester Angle 사용), 마지막에 Angle 검사를 안한다는 것 정도 빼곤 동일할거 같구요, SearchAreaBySphere, SearchAreaByBox식으로 Script를 만들어주시면 될 것 같습니다.

jkp8277님의 프로필 이미지
jkp8277

작성한 질문수

질문하기