
오늘은 저번에 배웠던 내용에 +@를 배웠다.
총알 발사 및 총 바꾸는 것을 배웠는데,
총알 발사에 필요한 것은 당연하게 총과 총알이 있다.
총은 두가지를 임포트했는데, 스나이퍼 총과 언리얼 기본 에셋 총을 임포트 했다.

스나이퍼 총을 쏘는 방식은 라인 트레이싱을 사용할 것이고,
위에 총은 유탄 발사기 느낌을 내기위해 투사체를 사용할 것이다.
총알은 클래스를 생성하여 블루프린트로 상속받아 수정할 수 있도록 하였다.
총은 캐릭터 아래에 있어야하고, 스왑을 위해 껏다 켜줘야하기 때문에 컴포넌트로 넣어주었다.
선생님께서 중간에 컴포넌트 패턴이 무엇이고 상속과 다른 점은 무엇이냐는 질문을 하였는데,
컴포넌트 패턴은 어떤 기능을 나누어 정리해놓은것이다. 공통적으로 갖고 있는 기능을 빼놓은 것은 같다고 볼 수 있지만, 이 오브젝트는 무엇'이다'와 이 오브젝트는 무엇을 '갖고'있다. 의 차이 인것같다.
나중에 애니메이션과 IK를 사용하기 위해 총은 Skeletal Mesh컴포넌트로 넣어주었다.
Sniper는 아쉽게도 Static Mesh를 썼다.
캐릭터에 컴포넌트를 생성해주고, 그 컴포넌트에 프로젝트 폴더 내에 있는 파일의 Reference를 복사해 경로를 찾아 컴포넌트 Mesh에 설정해주었다. 그리고 그 컴포넌트의 Transform을 가져와 SetRelativeLocation함수로 위치를 조정했다. Relative로 하는 이유는 절대좌표가 아닌 상대좌표이기 때문에 Relative Location으로 넣어주어야한다.
그 다음 총알을 생성하는 코드를 짰다. 총알 클래스를 받아와서 총구에 생성하는 작업을 해준 것인데, 저번에 적은 코드에서도 있던건데 정말 감사하게도 constructorHelper라는 클래스에 Reference로 클래스를 찾아주는 기능이 있다.

이런 식으로 총알의 클래스를 가져와 생성해줄 수 있게 해주었다.
그리고 총구 트랜스폼을 설정해준 것을 GetSocketTransform으로 가져온다.(언리얼은 대체로 Socket을 쓴다.)

그리고 총알을 소환해주는 것은 플레이어가 아닌 World가 해준다.
플레이어 내부에서 생기는 것이 아닌 세계 내부에서 생기는 오브젝트이기 때문에, 세계를 가져와서 Actor를 스폰해준다. 그 액터의 클래스는 bullet이고, 총구에서 소환해준다.
Transform은 모든 데이터, 위치 회전치 크기를 모아놓은 컴포넌트이다.
이렇게 되면 총알을 쏠 수 있게된다.
