총알 발사

DevBison·2025년 8월 19일

언리얼 C++ 프로젝트: 캐릭터 점프 높이 & 발사체 구현 정리


캐릭터의 기본 점프 높이를 변경하는 방법은 간단합니다. CharacterMovementComponent 안의 JumpZVelocity 값을 수정해주면 됩니다.


발사체 (Projectile Movement) 사용하기

이번에는 총알을 발사하는 액터를 만들어봅니다. 언리얼에서 UProjectileMovementComponent를 사용하면 탄환, 화살 같은 발사체를 쉽게 구현할 수 있습니다.


1. 발사체 액터 생성

  • PlatformBullet이라는 이름으로 Actor를 하나 생성합니다.

  • StaticMesh를 구체(Sphere)로 만들고, 피벗을 센터로 설정합니다.


2. 컴포넌트 멤버 변수 선언

헤더에서 구체 Mesh와 충돌체 Body를 멤버 변수로 추가합니다.

이때 #include "Engine.h"가 필요합니다.

추가로 ProjectileMovementComponent 멤버 변수를 선언합니다.


3. 델리게이트 사용 이유

ProjectileMovement에는 충돌 시 호출되는 델리게이트가 있습니다.

FOnProjectileStopDelegate 타입이며, const FHitResult&를 인자로 받아 충돌 결과를 처리할 수 있습니다.
→ 즉, 총알이 어디에 부딪혔는지 확인하고 이벤트를 연결하는 용도입니다.


4. 매쉬와 충돌체 설정

  • 아까 만든 구체 Mesh 경로를 지정합니다.

  • 콜리전 반지름도 설정합니다.


5. 충돌 처리 방식

언리얼 충돌 시스템에는 3가지 상태가 있습니다.

  • Ignore : 충돌 무시
  • Overlap : 겹쳐짐 허용 (겹치더라도 통과 가능)
  • Block : 충돌 시 겹치지 않고 막힘


기본값은 OverlapAllDynamic 입니다.

프로젝트 세팅 > Collision에서 전체 채널을 확인할 수 있습니다.

BlockAll로 바꾸면 모든 액터와 충돌합니다.


6. Projectile Movement 설정

  • 충돌 시 Hit 이벤트가 발생합니다.

  • Bounce 옵션을 켜면 벽에 부딪힐 때 튕깁니다.

  • 탄성(Bounciness) 값을 조절해서 반사 속도를 조정할 수 있습니다. (1이면 속도 손실 없음)

  • 충돌 후 액터 제거도 가능합니다.


7. 총알 발사 구현

  • 캐릭터 앞쪽으로 총알이 나오도록 PlatformCharacter.cpp에서 PlatformBullet을 스폰합니다.

  • 스폰 방식에는 여러 가지 옵션이 있습니다:

    • AlwaysSpawn: 충돌 무시, 무조건 생성
    • AdjustIfPossibleButAlwaysSpawn: 부딪히면 위치 조정, 그래도 생성
    • AdjustIfPossibleButDontSpawnIfColliding: 조정 가능 시 생성, 안되면 생성 X
    • DontSpawnIfColliding: 충돌 시 무조건 생성 안함

  • PlatformBullet.cpp에서는 mBody의 Collision을 다시 정의해줍니다.

8. 실행 결과

이제 캐릭터가 공격 키를 누르면 앞쪽으로 총알이 발사되고, 벽에 부딪히면 튕기거나 제거되는 모습을 볼 수 있습니다.


정리

  • 캐릭터 점프 높이는 JumpZVelocity로 조절
  • 발사체는 UProjectileMovementComponent로 구현
  • 충돌 방식은 Ignore / Overlap / Block
  • Bounce, Bounciness 등으로 발사체 물리 설정 가능
  • 델리게이트를 이용해 충돌 이벤트 처리
  • 스폰 옵션으로 충돌 상황 제어 가능

profile
응애 개발자

0개의 댓글