2024. 8. 9. 02:07ㆍUnreal Engine
총알 만들기
총알 공장을 만들기 위해 Actor 블루 프린트를 생성하여 "BP_Bullet" 으로 이름을 설정했다.
블루프린트를 더블클릭하여 들어가서 Sphere 메쉬를 추가하고, Sphere Collision을 추가하여 Sphere Collision은 마우스로 드래그해서 Root Component로 만들었다.
SphereCollision의 [Collision Presets]는 [BlockAll]로 설정
그 밑에 Sphere 메쉬에게는 [NoCollision]으로 설정하여 같은 블루프린트 내에서 충돌이 일어나지 않게 한다.
SphereCollision의 [Sphere Radius]를 13으로 설정해서 콜라이더가 메쉬를 감싸도록 설정했다.
크기 조절을 위해서 BodyMesh의 Scale은 0.25로 맞추었다.
ProjectileMovement 검색하여 추가
Initial Speed, Max Speed를 500, Should Bounce를 체크하면 공이 튀는 효과를 볼 수 있다.
하지만 이렇게 하면 총알 느낌이 나지 않기 때문에 5000으로 높이고 Bounciness를 0.6에서 0.3으로 줄였다.
총알 발사
총알 발사하는 Input도 Jump 처럼 단발성 입력이기 때문에 IA_TPSJump를 복제하여 IA_TPSFire를 만들었다.
IMC_TPS에 IA_TPSFire를 등록하고 좌클릭을 Mapping 했다.
BP_Player로 와서, IA_TPSFire를 검색해서 노드 추가, Spawn Actor from Class 검색해서 노드 추가한 후 [Started] 노드를 연결한다. BP_Bullet class를 생성하도록 설정했다.
총구의 위치를 설정하기 위해서 Scene을 검색하여 Mesh의 하위에 놓고 "FirePosition"으로 이름을 변경했다.
FirePosition의 Transform을 설정했다.
FirePosition을 가져와서 World Transform으로 위치 값을 전달하면 총알이 잘 생성된다.
발사된 총알 없애기
BP_Bullet에서 [Details]에 life를 검색하면 [Initial Life Span]이 있다. 2.0으로 설정하면 2초 후 사라진다.
다른 방법으로는, Delay와 Destroy 노드를 통해서 2초 후에 사라지게 할 수도 있다.
또 다른 방법으로는, Timer와 Custom Function을 사용하여 아래와 같은 설정을 할 수도 있다.
총 붙이기
[Add] - [Add Feature or Content Pack...]으로 First Person 프로젝트를 가져온다.
SK_FPGun을 끌어다가 Mesh의 하위에 배치한다.
총의 Transform을 설정하고, FirePosition은 총의 하위로 옮긴다.
총의 Skeletal Mesh Asset을 더블클릭해서 들어가보면 Rig 되어있는 것을 볼 수 있다.
Grip_Bone에 우클릭해서 [Add Socket]하고, 이름을 "FirePosition"으로 바꾸었다.
그리고 위치를 총구 앞에 배치했다.
다시 블루프린트로 돌아와서, FirePosition을 선택했을 때, [Parent Socket]을 FirePosition으로 설정하면 Transform을 전부 0으로 놓으면 방금 설정했던 자리로 옮겨진다.
Socket 설정이 잘 되어있다면, 총을 끌어오고 [Get Socket Transform] 노드를 통해서 총알 생성 위치를 지정할 수 있다. 이제 Components 상의 FirePosition은 필요없어졌다.
총알이 잘 나온다.
스나이퍼 총으로 교체 함수
자료실에서 스나이퍼 총 압축파일을 받아 압축을 푼다.
폴더 째 드래그 앤 드랍으로 프로젝트로 가져왔다.
sniper2 메테리얼에 텍스쳐를 적용한다.
BP_Player에 sniper 총 메쉬를 Mesh 하위에 넣는다.
스나이퍼 총 Transform 설정
IA_TPSFire를 복제하여 IA_GranadeGun, IA_SniperGun을 만들었다. 키보드 1번은 GrenadeGun, 2번을 누르면 SniperGun이 나오도록 설정한다.
IMC_TPS에서 키보드 1, 2 키를 설정한다.
처음 보여지는 총은 Grenade 총으로 설정할 것이다.
BP_Player로 와서, UsingGrenadeGun? 이름의 Boolean을 하나 추가하고 Visibility를 설정했다.
아직 실행하면 두 총이 모두 나온다.
총 바꾸는 노드들을 모두 잡아서 우클릭, [Collapse to Function]으로 하나의 함수로 만들었다.
만든 함수 안으로 들어가서, 오른쪽에 Inputs에 UseGrenade? Boolean을 하나 만들고 같은 체크박스를 받는 노드를 연결한다. NOT은 ! 검색으로 연결했다.
함수로 만들어서 블루프린트가 간단해졌다.
BeginPlay 맨 뒤에 만든 함수를 연결하면 초기 설정으로 GrenadeGun 또는 SniperGun을 선택할 수 있다.
'Unreal Engine' 카테고리의 다른 글
[Unreal] 21일차 - 크로스헤어 UI 제작, 캐릭터 애니메이션(Retargeting, FSM) (0) | 2024.08.14 |
---|---|
[Unreal] 20일차 - Sniper 레이저 총알 발사, 폭발 효과, 크로스헤어 UI, 총알에 물리 부여 (1) | 2024.08.13 |
[Unreal] 18일차 - Game Mode Class 만들기, 3인칭 카메라 생성과 회전, IMC 생성 및 적용, 플레이어 이동과 점프 (0) | 2024.08.08 |
[Unreal] 17일차 - 폭발 이펙트 추가, 적 생성, 프로젝트 빌드, TPS 프로젝트 생성 (0) | 2024.08.07 |
[Unreal] 16일차 - C++ 적 생성, 콜라이더 설정, 적 이동, 적이 타겟으로 회전, 충돌 처리 (0) | 2024.08.03 |