[리그오브워치개발일지] #9 미니언 투사체 추가 (유도 투사체)
Git
레포지토리 주소 : https://github.com/kjinwoo12/UE5Game_LeagueOfWatch
기준 브랜치 : 9_Projectile
본문
타워와 미니언을 테스트 하던 중에, 투사체가 있는 타워와 다르게 미니언은 투사체가 없어서 테스트 가시성에 좋지 못하다는 느낌을 받았다. 미니언 공격도 투사체로 바꿀 겸, 어차피 나중에 캐릭터를 추가할 때 투사체 공격을 쓰지 않는다는 보장이 없으니, 타워 투사체를 조금 더 재사용 가능하게 만들 필요를 느꼈다.
타워 투사체 분석
타워 투사체가 하는 일을 세분화하자면 세 가지로 나눌 수 있다. 목적지를 향해 이동, 목적지 도착 판별, 목적지 도착 후 동작이 그것이다. 타워 투사체의 경우는 타워에서 발사될 때 BP_TowerAttackArea
에서 얻은 데이터를 바탕으로 타겟이 되는 액터를 향해 이동하게 되며, 충돌 또는 액터의 마지막 위치에서 오차범위 안까지 도착했을 때 액터에게 데미지를 주고 사라진다. 이것을 바탕으로 부모 클래스를 만들어 미니언 투사체와 타워 투사체에 적용해보려고 한다.
투사체 개발
투사체 부모 클래스 BP_Projectile
BP_Projectile
은 목적지가 정해지면 그 목적지를 향해 움직이는 클래스다. 위치가 계속 변화할 수 있으니 BPI_Projectile
을 만들고목적지 벡터값 Goal
을 반환하는 GetGoal
함수를 추가한 후 BP_Projectile
에 인터페이스를 추가해 아래와 같이 구현한다.
유도 투사체
미니언 투사체와 타워 투사체의 코드는 완벽히 동일하다. 공통점은 BP_Projectile
에서 타겟 액터의 위치를 업데이트하는 기능을 추가한 유도 투사체라는 점이다. BP_Projectile
을 상속받는 BP_GuidedProjectile
을 만들어준다. 반드시 GetGoal
함수가 TargetLastLocation
를 반환하도록 해두자. 그렇지 않으면 투사체가 (0,0,0)으로 날아간다.
그 후 미니언 공격 투사체와 타워 공격 투사체는 BP_Projectile
을 상속받은 액터를 넣어주면 된다. 이들에게 별다른 코드를 추가할 필요없이 단순히 메시와 머티리얼을 추가해주는 선에서 마무리한다.