[UE5] Assassin22 - Projectile

윤정민·2023년 7월 12일
0

[Unreal Project]Assassin

목록 보기
23/26

1. 개요

지금까지 만든 전투 시스템을 보면 칼과 단검(암살) 두 가지가 있다. 민들고있는 게임이 암살에 집중된 게임이니, 암살을 위한 무기를 추가하기로 했다. 참고하고 있는 Assassin's creed를 보면 포물선을 그리며 날아가는 투사체와 일자로 날아가는 투사체가 있다. 모두를 구현해보자.

2. 아이디어

2.1. 설계

먼저 두 종류의 발사체를 만들어야한다. 원래 actor를 생성해 hit될 때 공격을 실행하는 방식과 히트스캔 방식을 사용하려 하였다. 하지만 그렇게 설계하다보니 부모 클래스의 크기가 작아지고(포폴용이라 상속관계를 보여주고 싶었음) 히트스캔방식일때 객체가 직접 날아가는게 아니다보니 FPS느낌이 강해져 모두 객체를 생성하는 방식으로 만들어주었다.

  • Projectile Component: 객체를 날리기 위한 역할(is-a)
  • Projectile: hit시 해당 아이템의 효과를 실행하는 역할(is-a)
  • Range Component: Projectile Component들을 관리(has-a)

3. 구현

3.1. 줌

  • Camera의 위치를 보간하여 옮겨줌
  • Camera의 FOV를 보간 증가시킴

3.2. 직선으로 날아가는 발사체

  • 에임을 위한 widget
    • UMG로 그려 IsZoom = true일 때 visible상태로 보여줌
    • LineTrace를 사용해 발사경로에 적이 있다면 에임 포인트를 빨간색으로 바꿔줌
  • 발사체 날리기
    • 발사체를 생성해 에임 포인트로 이동시킴
    • 적과 충돌시 적의 Takedamage함수를 호출하여 공격
      • 맞은 Skeletal Mesh의 이름을 가져와 Head라면 헤드샷으로 판정하여 데미지 100을 적용

3.3. 포물선을 그리며 날아가는 발사체

  • 포물선 그리기
    • PredictProjectilePath사용해 포물선 Spline의 Point를 구할 수 있음
    • 구한 Point를 이용해 SplineMeshComponent를 그려줌
    • 마지막 Point에 데칼을 이용해 Smoke가 생성될 위치를 보여줌
      • 모든 Point에 반복
    • 카메라의 Rotator에 따라 다르게 그려줘야되니 Tick으로 그리고 지우고를 반복
  • 발사체 날리기
    • SuggestProjectileVelocity_CustomArc함수를 사용하면 시작지점과 끝지점, 발사각도를 설정해 발사를 위한 속도를 구할 수 있음
    • 구한 속도를 발사체에 적용해 날리면 됨
    • 충돌시 해당 위치에 smoke vfx를 생성

3.4. RangeComponent의 컴포넌트 관리

  • 위에서 만든 두 컴포넌트를 가지고 있고 CurrentProjectileComponent를 통해 현재 캐릭터가 발사할 발사체 컴포넌트를 선택가능
    • CurrentProjectileComponent를 Observer패턴으로 만들어 값이 변경될 때 마다 해당 내용을 Broadcast
      • HUD의 아이콘이 변경되도록 바인딩
profile
그냥 하자

0개의 댓글