ToyProject/RedCaped
[언리얼엔진 5] 11. Lightning Pet
단순한 공격 구현은 이정도로 마치고 파티클을 이용해 화려한 공격을 구현해보겠다. 번개를 떨어뜨리는 공격을 만들기 위해 펫 클래스를 만들었다. 일단 적을 감지해야 하니 Component Overlap Actor함수로 적을 탐지하고 공격가능 대상수 만큼 Do N노드를 사용하였다. 일단 단일대상에게 데미지를 가하고 싶기 떄문에 파티클에 따로 콜리전을 두지 않았다. 가만히 있으면 단조로우니 몇초마다 플레이어를 따라가게 만들었다. 구현방법은 단순하나 여러 스프라이트를 추출하고 애니메이션 소스로 만드는 과정이 생각보다 오래걸려서 문제이다. 물론 익숙해지고 있기에 점점 빨라졌지만 엄청 많은 펫을 구현하려면 오래걸릴 것같다. 개강하기전 끝내보려했는데 장기프로젝트로 진행될거 같다...
[언리얼엔진 5] 10. Maximum number of attack + Error Handling
플레이어와 펫의 공격기능은 얼추 완성이 되가고 있다. 그런데 수 많은 아주 많은 적이 몰려와도 화살 몇방이면 모두 죽어버리는 것이다. 여기서 최대 공격가능 대상 수를 만들어 구현해야겠다는 생각을 한다. 구현방법은 매우 쉬웠다. Do N노드는 실행이 파라미터N만큼만 진행되게 하는 기능을 가진다. 그렇기에 공격에 닿은 적이 담긴 배열을 N번만 데미지를 주면 되는 것이다. (가장 가까운 적을 공격하는 기능은 이후에) 하지만 여기서 큰 문제가 생겨버렸다. 무슨 이유인지 Num of Bow Attack을 2로 설정해도 하나의 적만을 공격할 수 있는 것이다. 수 많은 실행 끝에 이유를 찾을 수 있었다. 역시 원인은 바로 옆에 있었다. Pet 클래스를 구현하면서 펫이 자유롭게 이동하는데 펫의 넓은 Detected c..
[언리얼엔진 5] 9. Pet Class
혼자 싸우면 외롭다. 그렇기에 플레이어에게 이로운 효과를 주거나 적을 함께 공격하는 펫을 구현하기로 하였다. 이때 펫의 움직임을 많이 고민하였다. 적을 따라가 공격을 할지, 플레이어를 따라가며 공격을 할지 말이다. 우선 적을 따라가 공격을 하게 구현을 해보았다. Set timer by Event 함수로 적을 따라가게 구현하였다. 틱이벤트로 따라가게 만들면 부자연스러운 이동이 계속되기 때문이다. Pet 클래스도 이전과 같이 PaperZD Character 부모클래스로 생성하였고 애니메이션 적용도 이전과 동일하게 진행했다. 처음과 다른 것은 State를 두었다는 것. Find Nearest Actor함수는 Origin에서 가장 가까운 파라미터의 배열속 액터를 리턴한다. 가장 가까운 적을 추적해서 공격해야 하..
[언리얼엔진 5] 8. Particle and Collision Attack
공격을 구현하긴 했으나 다양한 공격을 만들기 위해서는 파티클을 추가해야 했다. 다양한 파티클을 추가하면서 공격범위를 지정하는 것이 어려워지기 시작했다. 다양한 공격범위를 다루기 위해서는 박스 디버깅이 아닌 콜리전을 사용해야 했다. 공격 시 파티클이 생성되고 이 파티클의 콜리전에 들어온 Actor들에게 데미지를 준다면 이후 관리도 편해질 것이다. Spawn Actor from class 함수로 파티클을 생성했다. (파티클 액터를 미리 만들어줌) 이후 파티클 액터의 콜리전을 가져와 Component Overlap Actors로 범위 안에 들어온 액터를 감지한다. 이때 Actors to Ignore에 player를 넣어주어 자신에게 데미지를 주지 않게 한다. 이렇게 데미지 를 주는 시스템도 개선하였다. 이후 ..
[언리얼엔진 5] 7. Current Player State + Error Handling
이전 플레이어 스테이트를 따루 두지 않고 boolean으로 행동을 통제했다. 하지만 이렇게 진행하니 boolean타입을 난발하고 여러 문제가 발생하기 시작했다. 이상태에서 또 다른 행동을 추가한다면 큰 사고다.. 그렇기에 플레이어에게 현재 상태를 나타내는 변수를 생성해 이 변수로 행동을 통제하기로 하였다. Player state는 여러 현재 상태를 나타낼 수 있게 열거형(Enum)으로 생성하여 여러가지 State를 나타내었다. 계속 여러 행동을 추가할텐데 이제는 열거형변수에 추가만 하면 플레이어의 상태를 쉽게 나타낼 수 있게 되었다! 하지만 하나의 문제가 생겼다. 공격키를 연타하면 어느순간 플레이어가 멈추는 현상이 발생했다. 이때 구르기로 상황을 탈출할 수는 있었지만 불편하고 오류임이 확실하기에 원인을 ..
[언리얼엔진 5] 6. FloatingDamage and Critical
공격기능이 추가 되었으니 가한 데미지를 표기해주어야 한다. 화면에 보여주기 위해 Widget Blueprint를 이용한다. 데미지를 받은 액터에서 함수를 호출하고 싶기에 다음과 같이 구성해주었다. 고정된 텍스트만 띄우면 밋밋할 수 있으니 텍스트에도 간단한 애니메이션을 추가해주었다. 위젯을 만드는 겸 크리티컬 시스템도 만들기로 하였다. 플레이어에서 크리티컬 확률과 크리티컬 데미지를 조정할 수 있고 애님노티파이에 추가하였다. 순조로운 개발중 처음으로 문제가 발생하였다. 크리티컬이 발생하면 Damage Type Class로 Critical Type 오브젝트 레퍼런스를 넘겨주었다. 그렇기에 데미지를 받는 액터 Any Damage 이벤트의 Damage type 핀으로 ==을 사용하여 구별하려고 하였다. 하지만 크..
[언리얼엔진 5] 5. Player Attack
플레이어도 공격을 할 수 있어야 한다! 간단하게 공격 모션을 구현해주고 이전과 같이 공격박스를 생성한다. 공격하는 동작과 공격박스를 구현하였으니 이제 적이 공격 받을 때 히드모션과 함께 멈추게 할 것이다. 하지만 매 공격마다 멈추면 재미 없으니 몬스터에게 각각의 저항력을 부여할 것이다. 이 저항력이 높을 수록 밀려나지 않을 확률이 높아진다. 추가로 죽는 모션까지 JumptoNode로 구현해주면 간단한 동작은 전부 끝이난다. 이제 플레이어도 공격할 수 있다!