·Dodging 상태 시 피격 회피
먼저 Dodging 상태일 때 맞지 않도록 하기위해서 ActorBeginOverlap 이벤트 호출 시, 먼저 피격된 Actor의 State가 Dodging인지를 검사하여 아닐때만 ApplyDamage가 발생하도록 수정하였다.
BP_Weapon을 상속하지 않았다면(원거리 무기 등) Time Dilation 발생시키 않기
BP_Weapon은 근접무기만 다룰 것이라 이야기한 바 있다. 따라서 BP_Weapon을 상속하지 않을 원거리 무기로 타격 시
Time Dilation이 발생하지 않도록 하기위해 BP_Character AynDamage에 있던 Custom Time Dilation을 BP_Weapon으로
옮겨왔다.
NAND / NOR
Not And 이며, 결과에 대한 NOT을 뜻한다. Not (A and B)
Not OR 이며, 마찬가지로 결과에 대한 NOT이다. Not (A orB)
카메라 충돌 수정(카메라와 Enemy의 충돌)
카메라와 Enemy가 충돌 시 카메라가 플레이어게 확대되서 뒤에서 접근하는 Enemy를 볼 수 없는 문제가 발생한다.
BP_Player에 있는 SpringArm의 DoCollisionTest를 해제하면 물체에 대해 충돌이 사라져 벽을 뚫는 문제가 있다.
따라서 BP_Character의 Capsule과 Mesh 컴포넌트에서 콜리전 프리셋을 변경해줄 것이다.
콜리전 반응에서 Camera를 무시로 설정해주면 Character와 Camera의 충돌이 서로 무시되는 것을 볼 수 있다.
스킬 구현하기
BP_Skill(블루프린트 클래스 - Actor)를 하나 생성했다.
내부에서 bActivated 변수(Boolean)을 생성하고, 이벤트그래프에서 커스텀 이벤트 노드를 추가하여 Activate 부를 시
bActivated를 True / Deactivate 부를 시 bActivated를 False로 연결해주었다.
마지막으로 BP_Skill 클래스는 Generate Abstract Class(추상화 클래스 활성화)를 하였다.
프로젝트 세팅에서 입력 / 액션매핑에서 스킬 키 Z, X, C를 추가해줬다.
키입력 추가 후, BP_CharacterController에서 각각 입력 액션을 구현해준다.
BP_CharacterInterface에도 SkillA B C의 함수 3개를 추가하여 연결해주었다.
이제 BP_Character에서 Skill에 관한 로직을 구현하면 된다.
SkillClasses(BP_Skill 오브젝트 레퍼런스 배열) / Skills(BP_Skill 클래스 레퍼런트 배열) / SkillNow(BP_Skill 단일 변수)
3가지 변수를 생성해준다.
텔레포트 구현하기
BP_Skill을 상속받는 자손 블루프린트 BP_Telport를 생성한다.
BP_Telport 내부에서 Decal 컴포넌트를 추가해준다.
Decal 컴포넌트의 Decal Material에 M_Cursor_Decal을 넣고, 데칼 크기는 스케일 락을 걸고 x를 32.0으로 수정해주었다.
렌더링의 Visible을 스킬 활성화 될때만 보이도록 하기위해 초기값은 꺼두도록 했다.
스킬 활성화 시 계속해서 마우스 위치에 따라 위치를 갱신받아야하기 때문에 Tick 이벤트를 활용해볼 것이다.
추가된 Tick 함수 우클릭 - 부모함수로의 호출 추가를 통해 부모 Tick을 연결했다.
그리고 해당 스킬의 Activate 여부를 확인하기위해 bActivated Brach 검사를 연결해주었다.
Get Hit Result Under Cursor for Objects
BP_Telport에 GetDestinationData 함수를 추가하여 Decal이 마우스 커서 위치에 따라서 움직일 수 있게 구현해줄 것이다.
Get Instigator Controller를 통해 스킬 사용자를 받아온다. 그리고 PlayerController로 형변환을 시켜주는데, 이는 Enemy일 시 따로 조종하는 대상이 없기 때문이다.
그리고 Get Hit Result Under Cursor for Objects를 추가해주는데, 이는 Cursor 밑에 있는 오브젝트들의 히트 결과를 받와주는 역할을 한다.
ObjectTypes에서 Make Array(배열만들기)를 뽑고, WorldStatic으로 설정해줬다.(지형을 대상으로 하기 때문)
Trace Complex는 Trace 정확도를 높혀주는 기능인데 여기서는 꺼주도록 한다.
Hit Result에서 Break Hit Result를 빼내어 Blocking Hit / Location / Impact Normal 3가지를 반환 노드에 추가해줬다.
'언리얼엔진' 카테고리의 다른 글
33. 텔레포트 이동 / 무기 공격 이펙트(Trail / Effect) (0) | 2023.06.20 |
---|---|
32. 캐릭터 스킬 로직 / 텔레포트 / 스킬 애니메이션 (0) | 2023.06.20 |
30. MatLayerBlend_Emissive / Delay 종류 / Time Dilation (0) | 2023.06.15 |
29. 맵(Map) / Create Dynamic Material Instance (0) | 2023.06.14 |
28. 세트 컨테이너 / 시퀀스 노드 / 공격 시 충돌 수정 (0) | 2023.06.13 |