키를 누르면 총알이 발사되어 구조물을 부술 수 있는 간단한 게임을 만들어 보고자 한다. 키를 누르면 총알이 발사되도록 하고 싶다.
블루프린트 클래스를 만들어 구 모양의 Static mesh component를 추가하고 크기와 매스를 적절히 조절한 후 금속 머티리얼을 적용한다.
또한 'Simulate Physics' 프로퍼티를 체크하여 충격을 가할 수 있도록 한다.
스페이스 바를 누르면 발사되게 하고 싶기 때문에 Space bar 이벤트 노드를 만들었고, 이후 'Spawn Actor from Class' 노드를 연결한 후 클래스에 만든 총알 클래스를 할당했다.
우선은 특정 좌표에 생성되도록 해 보자.
'Spawn Transform' 핀을 우클릭하여 location, rotation, scale로 Split 시킬 수 있다. location에 적당한 위치를 할당하고 실행해 보자
스페이스 바를 누를 때마다 특정 위치에 액터가 생성되는 것을 확인할 수 있다.
'Add Impulse' 노드를 통해 특정 액터에 특정 방향으로 힘을 가할 수 있다.
이것을 이용해 액터가 생성되자마자 특정 방향으로 힘을 가하면 마치 캐논에서 포탄이 발사되는 것 같은 효과를 낼 수 있다.
F=ma 물리 법칙을 생각해보면 질량에 꽤 큰 가속도를 곱한 값을 적용해야 하므로, 생각보다 큰 수를 입력해야 한다.
일단은 X 방향으로 발사가 되도록 해 보자.
'Vel Change' 옵션을 활성화하게 되면 임펄스를 가할 물체의 질량을 고려하지 않고, 특정 수치의 가속도를 적용할 수 있다. 다시 말하면 자동으로 물체의 질량만큼을 곱해준다고 보면 될 것 같다.
발사가 된다.
'Get player Pawn' 노드를 이용해 먼저 플레이어 폰의 레퍼런스를 얻고, 이어 Rotation과 Location을 얻을 수 있다. 여기서 중요한 것은 캐릭터 메쉬 자체의 Rotation이 아니라 카메라의 방향을 얻어야 하므로 'Get Control Rotation' 노드를 사용한다는 점.
이제 플레이어의 위치에서 플레이어와 같은 Rotation 값을 가진 액터가 스폰된다.
플레이어와 같은 Rotation 값을 얻었으면 이제 그 중에서 정면으로 발사해야 하므로 'Get Forward Vector' 함수를 이용해 전방 벡터를 구한다. 이 때 리턴되는 벡터는 길이가 1인 단위벡터이므로 10,000을 곱하여 충분한 가속도를 가질 수 있게 하고, 이 값을 'Add Impulse' 노드와 연결한다.
바라보는 방향으로 발사가 잘 되는 것을 확인할 수 있다.
저도 언리얼엔진 똑같은 동영상 강의로 공부중이고 공부내용 블로그에 정리해서 올리는 중인데 혹시 게시글에 움짤 형식으로 파일 올리는 방법 알 수 있을까요?