슈팅게임의 맵을 조성하고 플레이어 이동까지 구현해 보았다.
아래의 글에서 확인 가능함
2025.02.12 - [Unreal] - 『인생 언리얼 5 프로젝트 교과서』 2.2 프로토타입 버전 제작하기 복습용 feat. 벡터의 정규화
『인생 언리얼 5 프로젝트 교과서』 2.2 프로토타입 버전 제작하기 복습용 feat. 벡터의 정규화
지금 5트째다. 책대로 따라하다 4트만에 성공했고 지금은 적군마다 다르게 점수 줄려고 하다가 버그 생겨서 5트째인거임 1. 환경 구성일단 스타터팩 들고 프로젝트 제작한 후 Maps 파일에 empty lev
tami-u.tistory.com
오늘은 무엇을 할 것이냐.. 총알 생성과 적을 만들어 볼 것이다.
1. 총알 발사하기
키를 입력 시 실시간으로 월드에 총알이 생성되는 액터의 동적생성을 배워볼 것이다.

먼저 Actor 타입의 클래스 블루프린트를 만들어 Cube를 생성한 뒤 총알 스케일을 지정해 준다.

매 프레임마다 앞을 향해 나가기 때문에 Event Tick 노드 사용 매 프레임이기 때문에 Delta값 곱해주는 건 저번 플레이어 이동과도 동일하다. 여기서 다른 점은 Get Actor Forward Vector이다.
총을 어느 방향에서 쏴도 앞으로만 전진해야 하는 상대 좌표가 필요하다는 것이다.
그림판으로 그려보겠다.

(1,0,0) 월드좌표로 총을 쏘면 이렇게 총알이 내가 원하는 방향으로 날아가지 않고 당황하게 될 것이다.
총알자체에 상대적인 좌표를 부여함으로써 본인기준 x축으로 날아가겠습니다.라는 방향성을 심어주는 게
Get Actor Forward Vector이다.

총알을 이기주의자로 만들어 준다고 생각한다.

뷰포트에 드래그 앤 드롭해서 절대좌표 확인해 로테이션 값을 y축으로 90도 돌려준다 총알이 위로 향하게 만들기 위해
그리고 게임을 실행해 보면 앞으로 z 축으로 쭉 올라가는 것을 확인할 수 있다.
그럼 다시 불릿을 아웃라이너에서 삭제하고
키 바인딩을 해보자

Input Action 만들어 주고요 bool값으로 지정해 줍니다. 단순 true false로 받는 이유 is 심플
난 버튼 딸깍 하나에 총알 발사할 거니깐^^
누름 = 빵!
안 누름 = 안빵
이제 물리적인 키보드 입력과 연결해 보자 IMC_PlayInput 열어준다.

마우스 좌 버튼과 합체 완

Add를 눌러 Arrow를 생성하자 눈에 보이지 않는 특정 위치를 지정할 때 사용하는 컴포넌트라고 한다.
y축 로테이션 90주고 총알의 정면이 위쪽이 되도록 만든다. location z 축으로 100만큼 띄우고

플레이 이동 바인딩처럼 IA_Fire이 한번 누르면 발동되게끔 stared 실행핀을 끌고 와 SpawnActor BP Bullet으로
좌클릭 한 번에 총알 생성합니다.라고 지정해 준다.
생성위치는 아까 만들었던 Arrow의 값을 가져오는데 지금 Fire Position이라 이름 지어둬서 포지션 그대로 연결할 수 있을 것 같죠? 아니더라고요
Fire Position의 컴포넌트 모든 속성들 중 Transform만 가져오겠습니다 과정을 거쳐야 함
왜 좀 알아서 안 해줄까


아 그리고 총알은 항상 충돌 여부없이 발사하고 싶으니 옵션은 Always Spawn, Ignore Collisions로 체크해 주자
잘 돌아가니 안심~
2. 적 제작하기

총알이 아래에서 위로 올라가듯 적은 위에서 아래로 내려온다 생각해 보자
BP_Enemy(Actor타입) 생성해서 view port에서 cube를 생성해 준다. 이동은 총알과 같은 노드 절대좌표값을 가지기 위한 Get Actor Forward Vector 방향과 속도 변경이 용이하기 위해 변수 MoveSpeed 생성 값은 800으로 설정 적의 위치값을 가져와 반환해 주자 delta값 가져오는 거 잊지 말자!
이제 적군의 공장 엑터를 제작해 보자
블루프린트 엑터타입으로 BP_EnemyFactory 생성해 준다.

총알발사와 동일하게 Arrow 추가해 주고 이번엔 위에서 아래로 내려와야 하니 y축 -90 만큼 로테이트
카메라 위치가 지금 x축 -2000에 있으니깐 적군의 머리를 보려면 z 축으로 180도 돌려야 한다.

지정된 시간에 맞춰 Enemy가 만들어져야 하니 Delay time과 current Time을 변수추가 해준다.

몇 초마다 적이 생성될 것인지 각 인스턴스마다 개별조정하고 싶으니 Delay Time은 Instance Editable을 활성화해 준다.

1. 매 프레임시간 + 현재시간(0) set 현재시간
2. 만약(if) 현재시간이 >= 인스턴스 생성하고 싶은 시간 라면
3. 액터 생성한다.( 액터생성은 arrow(Spawn Point) 컴포넌트들 중 Transform의 값만 들고 와)
4. 현재시간을 다시 0으로 초기화한다.

BP_EnemyFactory를 뷰포트에 드래그 앤 드롭
로케이션은 z 축 1000 고정 복사해서 y축만 다르게 5개 정도 설치해 준다.
아까 Instance Editable 활성화 한 Delay Time을 각 인스턴스마다 다르게 조정해 준다면 끝
결과물을 확인해 보자
이동 ok, 총알발사 ok, 적군 내려옴 ok
오늘은 여기까지 복습완
사담
지금 내 친구들은 대전에서 칼국수 먹는데 난 지금 학원에서 언리얼 하잖슴~~
나도 오늘 저녁 춘식이랑 냠냠하기로 했으니 부럽지않다구
언리얼 짱이 되겠어요.

'Unreal' 카테고리의 다른 글
2D 퀵드로우 게임 제작 필수기능 정리 1 (1) | 2025.02.20 |
---|---|
『인생 언리얼 5 프로젝트 교과서』복습 이동방향 추첨 / 충돌처리 /파티클 생성 (0) | 2025.02.18 |
『인생 언리얼 5 프로젝트 교과서』 2.2 프로토타입 버전 제작하기 복습용 feat. 벡터의 정규화 (1) | 2025.02.12 |
[언리얼 02.06] 피직스 시뮬레이션 / 유데미 스터디 시작 / 클래스 101, 콜로소, 유데미 비교 (2) | 2025.02.07 |
[언리얼 02.03]블루프린트 이벤트 그래프, 노드, 노드 생성, 노드 제거 (0) | 2025.02.03 |