Unreal Engine/게임클래스 - 언리얼엔진 기초

[50강] Wizard Skill(Warp)

whereareyoung 2024. 9. 23. 00:26

이번시간에는 Warp 이어 진행을 할건데 마우스 위치에다 커서를 출력을 하고 만약에 위치를 클릭 했을때 이동할수있는 곳이라면 그곳으로 워프를 하는 것을 처리하도록 하겠다. 

 

Warp 처리 

1. BP_Wizard > 이벤트 그래프 > BP_Wizard Skill Warp 형 변수 "Warp" 생성

 

2. Begin Play 이벤트 다음과 같이 복사 붙여넣기, "Spawh&Attach Warp" Rename 및 다음과 같이 세팅 

 

 

3. BP_Wizard > 이벤트 그래프 > "Spawh&Attach Warp" 다음과 같이 세팅

 

4. BP_WizardSkill_Warp > 뷰포트 > Decal > 다음과 같이 위치값, 사이즈 값 주기

 

BP_WizardSkill_Warp > 이벤트 그래프 다음과 같이 세팅해 위치 맞춰주기 

 

이렇게 세팅 후 플레이하면, 캐릭터 밑에 데칼이 다음과 같이 발라진다. 

마법진 등도 이것과 같은 원리로 발라진다. 단지, 이것을 그릴때 캐릭터의 위치에 주는 것이 아니라 마우스의 위치에 주어야 한다. 따라서 다음 부분을 제거 해 준다. Tick 이벤트를 새로 짤 것이다. 

 

* 구현 설명을 하자면 ... 

먼저, 마우스의 위치를 구해와야 한다.

화면상의 2D위치를 3D위치로 바꾸어 그 커서가 지나가는 시점을 구해오는 건데, 함수보다는 매크로가 구현에 적합하다. 

- 함수 : 출력 핀은 리턴으로 하나만 연결할 수 있음, 리턴할때 길 하나만 

- 매크로 : 출력 핀을 여러개를 만들어 상황에 따라 분기시킬 수 있음, 리턴이든 출력이든 길 여러개 이용 가능 

 

 

5. "GetCursorLocation" 매크로를 생성, 다음과 같이 세팅

* 플레이어 컨트롤러의 "Get Hit Result Under Cursor by Objects" 함수를 통해 마우스의 위치를 가져옴

- Cursor : 마우스 커서 위치 리턴 (마우스 지점으로 하기때문에 커서 보이냐 안 보이냐 상관 없음)

Get Hit Result Under Cursor by Channel 

Get Hit Result Under Cursor by Objects

- Finger : 스마트폰 터치 한 위치 리턴 

Get Hit Result Under Finger by Channel 

Get Hit Result Under Finger by Objects

* 배열만들기 > WorldStatic : Static 인 물체에서 전부 커서 위치를 찾는다  

* True : 닿았다, False : 닿지 않았다 / True 일 때는 보이게, False 일때는 보이지 않게 처리 할 예정

 

6. BP_WizardSkill_Warp > 이벤트 그래프 > True 면 보이게 처리 

False 면 보이지 않게 처리 

 

Wall 이라는 이름을 가진 애들만 Cursor 를 표시하고, 그렇지 않으면 표시하지 않게 처리 

태그를 이용하는게 제일 깔끔, 하지만 배열으로 처리되면 좀 복잡해 지니 지금은 이름으로 처리한 것임 

 

* 태그이용할 경우 예시 : 

 

7. Spell 구현 

1) BP_WizardSkill_Warp > 이벤트그래프 > Vector 변수 "Location" 생성

 

2) BP_WizardSkill_Warp > 이벤트그래프 다음과 같이 세팅 

 

조건 "Wall" 추가하여 수정

 

분기하여 다음 부분 추가, 위치 정보 저장해 두기 

가장 먼저 해야할게 Cursor 가 갈수있는 곳에 있느냐를 구한다. 그리고 True 라면 Can Move 는 못움직이게 하고 Character 형 변환하여 위와 같이 정상적인 절차를 밟는다. 

 

이제 눌렀을 때 위치를 구하고, Montage 애니메이션이 끝났을 때 이동 구현을 하면 된다. False 라면 애니메이션 동작도 나오면 안되는데, Montage 에 의해 콜되니까 Warp 만 가면됨 False 라면 몽타주를 못가서 Call 이 안됨! 

 

8. End Spell 에서 다음과 같이 세팅해 워프 구현 

붉은 박스 부분을 Player 로 하여도 괜찮은데, 위 처럼 처리하는 것이 정석이다. 

- Sweep : 이동하면서 닿는 아이들을 다 검출할것인가 - 주르륵 다 타격할때 씀 

- Teleport : 물리가 켜져있을때 동작하는거 - 물리가 Skeleton mesh 이런거 할때 보면 Physics 켜져 있을때 사용, 지금은 물리가 켜져 있지는 않지만 어쨌든 Teleport 하는 것이니 토글 활성화  

 

위와 같이 처리하였을 경우, 워프 구현 정상 작동하나 화면 커서가 갈수있는 지역을 한번 클릭하면 다시 워프가 되지 않는 버그가 있다.

이점에 의해서는 다음시간에 이어 계속 디밸롭 할 예정이다!