목표 : 내가 보고 있는 곳에서 발사체가 발사됨.
게임 플레이 중에 F8을 누르고 조금 뒤로 이동하면 원래 내가 있던 곳에 검은색 구체가 생긴 것을 확인할 수 있음. 그리고 게임 플레이 중인데도 오브젝트를 클릭하여 선택할 수 있음.
내가 있던 곳에 생긴 검은색 구체 오브젝트를 폰(Pawn) 이라고 하는데,
이는 "게임을 플레이하는 말" 을 의미함.
그리고 폰은 게임 월드에서 플레이어의 물리적 묘사를 나타냄.
그러나 게임 플레이를 종료하면 씬에서나 아웃라이너에서나 폰이라는 오브젝트를 찾을 수 없음.
언리얼은 기본적으로 사용자를 위해 씬에 Player Start 라는 오브젝트의 위치에 폰을 스폰하고 배치함.
폰의 스폰 지점을 변경하고 싶다면 해당 Player Start 오브젝트의 위치를 변경해주면 됨. 회전과 스케일 조정도 마찬가지.
블루프린트로 돌아가 폰을 찾으려고 함.
그러나 이전에 했던 큐브 레퍼런스 노드를 블루프린트에 생성하는 것처럼 하는 것은 불가능함. 왜냐하면 폰은 플레이를 시작해야 스폰되기 때문에 오브젝트가 없고 레퍼런스가 없는 상태이므로 참조할 수 없음.
이벤트 그래프에서 빈 곳 우클릭 -> get player pawn 노드 생성
해당 노드에는 실행핀이 없고 입력 데이터 핀과 출력 데이터 핀만 있음.
입력 핀을 보면 정수형을 입력으로 받으며, 아래의 코멘트로는 플레이어 컨트롤러 목록의 인덱스이며, 로컬 플레이로 시작하고 사용 가능한 원격 플레이어로 넘어간다는 설명이 표시됨.
이 설명은 멀티플레이어 게임를 위한 설명이며, 싱글 플레이어 게임에선 인덱스 0 이 첫 번째이자 유일한 플레이어임.
출력 데이터 핀은 폰 오브젝트 레퍼런스를 반환함.
즉, 0번 인덱스 플레이어의 폰 오브젝트 레퍼런스를 반환하는 노드.
Get Actor Location 노드와 연결하면 폰 오브젝트의 위치를 알 수 있음.
Get Actor Location 노드는 벡터 타입을 반환함. 즉, 발사체의 위치를 지정하는데 딱 맞게 사용될 수 있는 데이터 타입임.
발사체가 나의 위치에서 앞의 방향으로 발사되게 하고 싶음.
Get Actor Location 노드의 데이터 출력 핀을 SpawnActor 노드의 Spawn Transform Location 입력핀과 연결함.
그러면 발사체의 스폰 위치가 나(폰)의 위치에서 스폰됨.
그리고 씬의 기즈모를 보면 X축 방향이 화면의 뒤쪽을 가리키는 것을 확인할 수 있음. 따라서 앞쪽으로 발사체를 발사하고 싶으므로 impulse의 x값을 음수로 할당해야 함.
발사체가 너무 가벼워서 이를 조정하려고 함. 블루프린트 클래스의 속성을 변경하고 싶으면 Content Browser에서 해당 클래스를 더블 클릭하면 블루프린트 에디터가 생성됨. 여기서 뷰포트 -> Details 에서 Mass 무겁게 변경.
카메라를 회전시키는 방법을 알아보고 발사체에 적용하기
발사체가 완전한 구형이면 얼마나 회전했는지 파악하기 힘드므로 모양을 변경
BP_Projectile 클래스의 블루프린트 에디터 -> 스태틱 메시 컴포넌트 속성 -> transform의 scale에서 x값 2로 변경
이후 get player pawn 노드의 데이터 출력 핀에서 Get Actor Rotation 노드 생성 후 위치와 마찬가지로 SpawnActor 노드의 Rotation 입력 핀에 연결.
둘다 데이터 타입이 Rotator로 동일함.
그러나 이렇게만 설정하면 화면이 움직이는 방향으로 발사체가 회전되지 않음.
카메라, 즉 플레이 시 나(Pawn)의 Control 시점애 따른 회전 방향을 얻기 위한 노드를 생성해야함. 이것이 바로 Get Control Rotation.
Get Actor Rotation 대신 Get Control Rotation 노드를 생성하고 Get Player Pawn과 연결함. 이때, Get Control Ratation의 입력 데이터 타입은 Pawn 오브젝트 레퍼런스임. 폰 전용 노드!
이렇게 하고 게임 플레이 시 내가 바라보는 방향을 바꾸면 해당 방향으로 발사체가 회전하는 것을 확인할 수 있음.