이번 포스트에서는 스킬로 생성된 크리스탈이 적을 추적하여 폭발하도록 만들겠습니다.
또 이를 위해 기존의 코드 구조를 변경하도록 하겠습니다.
기존의 적을 추적하는 기능은 이전에 만든 분신술 스킬에서 사용중이었습니다.
적을 추적하는 기능을 크리스탈 스킬에 또 추가하는 것은 비효율적이므로
스킬들의 조상 클래스인 SkillTemplate에서 적을 추적하는 기능을 추가하여
필요한 스킬들이 해당 기능을 오버라이드하여 사용하도록 하겠습니다.
1) SkillTemplate
위와 같이 일정거리 안에 있는 적을 탐지하여
해당 적이 가까이 있다면 적의 Transform을 리턴하는 함수를 추가하였습니다.
2) SkillCloning
public class SkillCloning : SkillTemplate
{
.
.
.
public void DoCreateClone(Transform clonePosition, bool canAttack, Vector3 offset)
{
.
.
.
newClone.GetComponent<SkillCloningController>().DoSetupClone(clonePosition, _cloneDuration, canAttack, offset, FindClosestEnemy(newClone.transform));
}
}
분신술 스킬 그 자체인 SkillCloning에서는 분신을 생성하는 DoCreateClone 함수에서
분신을 설정하는 DoSetupClone메서드에 가장 가까이 있는 적의 Transform을 넘겨주도록 수정하였습니다.
3). SkillCloningController
분신술 스킬의 조정과 설정을 담당하는 클래스 SkillCloningController의
메서드 DoSetupClone에서는 _closestEnemy를 인자로 받은 Transform으로 설정하고
이전에 _closetEnemy를 설정하던 메서드 DoFaceClosestTarget에서는 해당 로직을 삭제하였습니다.
4) SkillCrystal
크리스탈 스킬 그 자체인 클래스 SkillCrystal에서는 크리스탈을 생성하기 전 설정하는
SetupCrystal 메서드에 크리스탈과 가장 인접한 적의 Transform을 넘겨주도록 수정하였습니다.
크리스탈이 이미 존재하는 분기에서는 크리스탈이 이동가능할 경우 위치를 바꾸지 못하도록 막겠습니다.
5) SkillCloningController
크리스탈 스킬의 동작과 설정을 담당하는 클래스 SkillCrystalController를 위와 같이 수정하였습니다.
우선, SkillCrystal로부터 넘겨받은 가장 인접한 적의 Transform을 변수 _closestEnemy에 저장합니다.
또, Update 함수에서는
크리스탈이 이동할 수 있는 경우, 가장 가까운 적에게 이동하고
어느 정도 거리가 좁혀진다면 폭발하여 적에게 피해를 줍니다.
최종 실행 결과는 다음과 같습니다.
'유니티 > 게임 프로젝트' 카테고리의 다른 글
2D RPG - (17 - 4) 크리스탈 스킬 구현_04 (0) | 2025.02.19 |
---|---|
2D RPG - (17 - 번외) 크리스탈 스킬 수정 (0) | 2025.02.19 |
2D RPG - (17 - 2) 크리스탈 스킬 구현_02 (0) | 2025.02.18 |
2D RPG - (17 - 1) 크리스탈 스킬 구현_01 (0) | 2025.02.17 |
2D RPG - (16 - 5) 블랙홀 스킬 구현_05 (0) | 2025.02.12 |