본문 바로가기
프로그래밍/UE4, 5

[UE5] 발사체 생성하기

by Nessie! 2023. 5. 9.

발사체를 생성하려면 우선 특정 이벤트마다 액터를 생성하는 방법을 알아야한다.

레벨 블루프린트에서 액터를 스폰할 수 있는 함수를 이용해 객체를 생성해보자.

스페이스바 입력이 있을 때 마다 정한 클래스로 액터를 스폰해주게 설정했다.

 

참고로 스폰액터 함수는 원래 아래 이렇게 생겼는데 트랜스폼 핀에 우클릭해 분리할 수 있다. (위에는 분리된 모습임)

아무튼 위에처럼 설정하고 실행시킨 후 스페이스바를 실컷 눌러보면 아래처럼 된다.

통통 튀는것처럼 되는 이유는 X, Y, Z 축이 모두 고정되어있는데, 그 위치에 뭐가 이미 있어서 밀어내느라 위로 튀어오르는 것이다.

 

암튼 이 기능을 이용해서, 스페이스바 입력이 있을 때 마다 튀어 오르는 발사체(객체)를 생성하려면 이전 게시글에서 설정했던 Add Impulse 기능을 이용해 실행핀을 연결하고, 타겟을 연결해주면 된다.

 

적용하면 아래처럼 된다!

 

이제 내 위치에서부터 발사하는 기능을 해보자.

 

우선 언리얼엔진에는 빙의 기능이란게 있다. 플레이 도중 F8을 누르면 빙의된 엑터에서 탈출할 수 있고, 그 상태에서 우클릭 후 움직이면 내가 조작중인 엑터와 별개로 이동이 된다.

그럼 플레이 도중에 내가 조작하는 엑터를 이렇게 클릭할 수 있게 되는데, 기본은 폰 객체로 설정이 되어있다.

 

이 기본폰은 플레이중이 아닐 때 뷰포트에 나타나지 않으며, 아웃라인에서 검색 또한 되지 않는다.

그럼 이 폰 객체는 머징???

 

그건 바로 Player Start라고 보면된다.

요놈!

그럼 이를 이용해 내 위치에서 발사체를 발사해보자.

 

레벨 블루프린트에서 아래와 같이 작업하면 된다.

Get Player Pawn 함수를 통해 객체정보를 가져와서, 해당 객체의 Location을 가져온 뒤, 스폰위치에 지정해준다.

그 다음 임펄스 방향만 바꿔주면 끝!

-가 되는 이유는, Player Start 객체를 보면 알 수 있는데,

 

이 하늘색 화살표가 전방을 가리키는 방향이고, 좌측 하단에 X축과 반대되는 방향이 전방이란 것을 알 수 있다.

따라서 -를 붙여 반대방향으로 발사해주면 끝!

 

위치만 지정해서 카메라가 보는 각도는 적용되지 않는다!

그리고 우측에 있는 의자는 물리학 적용을 안해서 때려봤자 반응이 없다!

 

 

움짤보니 나름 대포알인데..; 너무 가벼워보여서 추후 무게를 1000으로 수정했다.

 

아 혹시 블프 수정하려고 더블클릭해서 켰는데 아래처럼 뜨면 그냥 밑줄부분 누르면 원래 작업하던 화면으로 돌아온다

 

지금 우리가 사용하는 발사체는 그냥 구 모양이라 방향따위 상관없지만 혹시라도 방향 조절이 필요한 발사체의 경우, 카메라 로테이션을 적용하면 된다.

Get Control Rotation 함수를 적용해야 제대로 적용된다.

확인을 위해 구체를 찌그러뜨리고 발사해보니 카메라가 보는 방향으로 돌아가는게 보인다.

 

 

자 그럼 이제 진짜로 내가 바라보는 방향을 향해 발사하는 방법을 알아보자.

바라보는 방향으로 발사를 하려면, Forward Vector를 알아야하는데 너무 고맙게도 이미 함수로 바로 가져다 쓸 수 있다. (트랜스폼에서 회전이 완료된 객체의 전방벡터를 구하는 방법이 있는데, 설명하기엔 너무 기니 생략)

다만 해당 함수의 반환값은 단위벡터이므로 바로 Impulse함수에 넣어쓰기엔 너무 작다.

값을 곱해 키운 후 적용하자. 

리턴핀을 끌어다가 걍 이렇게 곱하기 연산자 넣으면 알아서 멀티플라이함수가 나오니 사용하면 된다.

 

기본적으로 원래 리턴값인 벡터에 맞춰 곱하는 노드가 나오지만, float을 곱하는 것으로 변환해서 쓸 수 있으니, 필요 시 참고하자.

 

결론적으로 아래와 같이 적용하면 내가 바라보는 방향으로 발사할 수 있다!

적용한 후 화면이다

'프로그래밍 > UE4, 5' 카테고리의 다른 글

[UE5] cpp에서 디버깅 하기 (UE_LOG)  (0) 2023.05.12
[UE5] 방만들기  (0) 2023.05.10
[UE5] 클래스 생성하기  (2) 2023.05.09
[UE5] 물리학 적용하기  (0) 2023.05.09
[UE5] C++ 사용하기  (0) 2023.04.25

댓글