본문 바로가기

전체 글

(842)
Unreal Engine 4 C++ The Ultimate Shooter Course Section 3-18 Refactor Beam End Code현재 FireWeapon 함수가 상당히 길어져서 가독성이 안좋아졌다.해당 함수를 리팩토링하여 가독성을 높여보도록 하자. 빔의 마지막 위치를 얻는 데 필요한 내용을 모두 분리시켜보자.우선 인풋으로 필요한건 라인트레이스에 필요한 소켓 위치와 갱신될 빔위치이다.둘다 참조 변수로 선언해주고, 소켓 위치는 고정이기에 const도 추가로 작성해준다. 이제 필요한 내용을 보면 뷰포트사이즈를 얻어서 정중앙 위치를 얻고 이를 월드 값으로 변환하는 과정과,변환 성공 여부를 토대로 라인 트레이스를 하는 과정이다. 끝점에 대한 값은 인풋 참조 변수는 OutBeamLocation을 사용한다.그리고 총구 기준 시작점인 소켓 위치는 마찬가지로 인풋으로 설정했던 MuzzleSocketLocat..
Unreal Engine 4 C++ The Ultimate Shooter Course Section 3-17 Trace from Gun Barrel이제 크로스헤어를 통해 사격하므로 아무 문제없는 것 같지만, 오히려 크로스헤어를 기준으로 삼기에 문제가 발생하는 부분도 존재한다.만약 현재 큐브 앞에 또다른 큐브를 위치시키고 크로스헤어를 앞의 큐브 바로 옆에 위치시켜 사격할 경우 실제론 앞의 큐브에 부딪히지만 멈추지 않고 뒷 큐브까지 사격이 도달하는 모습을 볼 수 있다. 이를 수정하기 위해 라인 트레이스를 하나 더 설정해야 한다.새롭게 크로스헤어를 기준으로 설정했었지만, 기존에 했던 대로 총신을 기준으로 하는 라인 트레이스를 추가적으로 생성해주자. 그리고 임팩트 파티클의 위치 또한 수정해주자.2번의 라인 트레이스를 거친 후에 생성되어야 한다. 이제 컴파일 해보면 제대로 앞의 큐브에 먼저 충돌하는 모습을 볼 수 있다.
Unreal Engine 4 C++ The Ultimate Shooter Course Section 3-16 Directing Rifle Shots크로스헤어가 존재하지만 발사할 때 크로스헤어와는 사실상 무관한 방향으로 발사된다.이번에는 이러한 현상을 수정하도록 해보자. 우선 기존 라인트레이스 내용과 빔 파티클 출력 부분을 주석 처리해야 한다.기존에 소켓 위치를 기준으로 시작점을 세웠지만, 우리는 새롭게 크로스헤어를 시작점으로 삼아야 한다. 먼저 뷰포트 사이즈를 얻고, 이를 토대로 중앙 값(크로스 헤어 위치)을 얻어주자.그리고 약간 위로 올리기 위해 Y 값을 50 감소 시켜주자.이렇게 얻은 화면 상의 좌표를 토대로 월드 공간의 위치와 방향으로 변환시켜주자. 변환이 성공했다면 이후는 전에 했던대로 똑같이 라인트레이스와 빔 파티클을 생성해주면 된다.다만 생성 위치는 이제 시작점이 Crosshair의 월드 위치이고 끝..
Unreal Engine 4 C++ The Ultimate Shooter Course Section 3-15 HUD Class and Crosshairs이제 크로스헤어를 설정해주자.먼저 강의에 사용할 크로스헤어를 마찬가지로 강사 깃허브를 통해 다운로드 받아서 프로젝트에 임포트해주자. 그리고 다운받은 모든 크로스헤어에 대해서 Compression Settings을 UserInterface2D (RGBA)로 바꿔주자.해당 설정은 텍스쳐를 UI로 사용할 때 최적화되어있다. 그리고 블루프린트 HUD 클래스를 생성해주자. 생성한 HUD 클래스를 게임모드에서 할당해주자. 이제 HUD 클래스 내용을 설정해주자.먼저 Event Receive Draw HUD 함수를 통해 HUD를 그리게 된다.그리고 중앙 값 체크를 위한 변수를 생성해주자. 기존 x, y 값을 반으로 나누고 Vector 2D에 맞게 float로 변환하여 Scre..
Unreal Engine 4 C++ The Ultimate Shooter Course Section 3-14 Socket Offset총의 크로스헤어 표시기능을 추가할 예정인데, 이에 앞서서 캐릭터의 위치를 조정해주자.화면 중앙에 크로스헤어가 표시되어야 하므로 캐릭터 위치를 옆으로 살짝 조정해주도록 하자.동시에 OrientMove 항목도 비활성화 해주었다.
Unreal Engine 4 C++ The Ultimate Shooter Course Section 3-13 Beam Particles총기 발사할때 연기 파티클도 추가해주자.우선 강의 자료로 올라온 에셋들을 다운받아서 프로젝트에 옮겨주어야한다.그리고 해당 에셋들은 텍스처가 제대로 적용되어있지 않아 직접 수정해줄 필요가 있다. 아래와 같이 Texture Sample을 Beam Texture를 각 Material (M_Beam, M_Beam_Faded) 화면으로 끌어서 대체해주자. SmokeTrail 및 SmokeTrail_Faded 에 대해서도 비슷한 작업이 필요하다.Required 항목을 누르고 Material을 할당해주자. 이제 할당하기 위한 값을 선언해주자. 그리고 연기트레일의 끝점을 할당해주자.기본적으로는 라인트레이스의 끝점과 동일하지만, 물체에 부딪혔을 때는 해당 시점에서 끝나야 하므로 끝점을 히트 위치..
Unreal Engine 4 C++ The Ultimate Shooter Course Section 3-12 Impact Particles 충돌 지점에도 충돌 이펙트를 표시해주도록 하자.MuzzleFlash 때와 거의 동일하게 해주면 된다. 충돌 임팩트이므로, 충돌된 순간에 생성해주자. 마찬가지로 파티클을 할당해주자. 이제 발사해보면 충돌 지점에 임팩트가 남아있다.대신 현재 캐릭터가 idle시 조금씩 움직여서 발사시 마다 상당히 다른 곳을 맞추고 있다.이를 수정하기 위해 idle을 좀 더 정적인 애니메이션으로 변경해주었다.
Unreal Engine 4 C++ The Ultimate Shooter Course Section 3-11 Line Tracing for Bullet Hits사격을 실제로 맞추기 위한 작업을 해주자.Lince Trace 기능을 통해 충돌 여부를 판단하게 된다.충돌 여부를 쉽게 판별하기 위해 맵에 넓찍한 큐브를 설치해주자. 다음으로 라인트레이스를 설정해주자.필요한 값은 아웃파라미터인 히트 결과, 시작 지점, 끝점, 충돌 채널이다. 첫 번째는 아웃파라미터이므로 FHitResult 변수를 선언하여 그대로 넘겨주면 되고,시작 지점은 기존 소켓의 위치를 사용한다.끝점은 시작지점에 목표 거리 * x 축 방향 만큼 곱한 벡터 값을 할당해주면 된다.여기서는 우선 하드코딩으로 50000의 거리를 지정하였다.마지막으로 채널은 ECC_Visibility로 기본적으로 시각적으로 보이는 것에 대한 충돌 채널이다. 충돌 여부를 간단히..