본문 바로가기

전체 글

(842)
Unreal Engine 4 C++ The Ultimate Shooter Course Section 7-8 Reload MontageReload를 위한 Montage를 작성해주자.기존 90~91 강의를 통해 만든 애니메이션을 사용하지만, 해당 에셋이 내가 사용중인 언리얼 버전과 호환이 불가능하여 따로 만들지 않았었다.이어지는 강의가 존재하므로 Belica 에셋 중 Level Start Montage를 적절히 편집하여 사용하였다. 나머지는 강의 내용을 따라 한다.먼저 혼합 시간을 0으로 설정해주자. 몽타주 섹션도 만들고 기존의 Default는 지워주자. 슬롯도 추가해주자. 이어서 추가한 슬롯을 할당해주자. 이제 애니메이션 블루프린트로 돌아가서 해당 슬롯을 추가해주는 작업을 해주자.먼저 기존 애니메이션을 Cach로 저장해주자. 해당 애니메이션 Cach 한 것을 Reload 슬롯과 연결해주자. 이를 또 Cach로 ..
Unreal Engine 4 C++ The Ultimate Shooter Course Section 7-7 Improving Weapon Fire Code 내용이 늘어난 Weapon Fire 부분의 코드들을 정리해보자.먼저 전투 상태에 대한 enum class와 이에대한 변수 및 초기화를 해주자.  첫 번쨰로 FireButtonPressed() 함수를 리팩토링 해주자.함수 뜻 그대로 발사 버튼을 눌렀으면 발사 버튼 여부를 true로 바꿔주고, 바로 총 발사에 해당하는 FireWeapon() 함수를 호출해야 할 것이다. 그리고 기존 FireWeapon() 함수의 내용을 나눠 함수로 만들어주었다. 이제 FireWeapon() 함수를 위 3가지 함수를 토대로 리팩토링 해주자.먼저 ESC_Unoccupied 상태가 아니라면 바로 종료시켜야할 것이다.그 이후 총알이 있는 지 여부를 체크후, 위 3종 함수를 호출시킨다...
Unreal Engine 4 C++ The Ultimate Shooter Course Section 7-6 Fixing Barrel Socket Location총을 발사해보면 발사 시작 위치가 이상하다는 것을 볼 수 있다.현재 사용 중인 총이 캐릭터에 속한 것이 아니라, 개별로 따로 만든 총을 사용하기에 발생하는 문제이다. 기존에는 GetMesh() 함수를 이용해 소켓에 접근했는데, 이는 ShooterCharacter에 접근하는 함수이다.우리는 새롭게 만들었던 GetItemMesh() 함수를 이용해 소켓에 접근할 필요가 있다.기존의 캐릭터에 붙어 있던 무기가 아니라 새롭게 만든 무기를 사용하므로 해당 무기에 있는 소켓을 써야하는 것이다. 강의를 따라해서 이렇게 했지만, 기존 그대로 GetMesh() 함수를 이용한 코드도 총구 위치에 이상이 없었다.원인을 정확히 못 찾았는데, 이에 대해선 다시 따로 찾아봐야 할..
Unreal Engine 4 C++ The Ultimate Shooter Course Section 7-5 Bind Weapon Ammo in Widget예전에 했던 것 처럼 위젯의 이번엔 현재 총알 개수에 대한 텍스트를 바인딩 해보자.먼저 해당 위젯의 designer 탭에 들어가서 ShooterCharacter 변수를 만들어주자. 그리고 해당 변수를 폰을 얻고 Cast를 통해서 세팅해주자. 이제 ShooterCharacter에 대한 참조를 얻었기에 바인딩을 해주자.기존의 Create Binding과 달리 아래 속성에서 Ammo를 직접 선택이 가능하다. 이제 실행해보면 초기화를 0으로 했기에 총알 개수가 0인 것을 볼 수 있다. 총알 개수는 BP_BaseWeapon 클래스에서 원하는 대로 수정해주자. 마찬가지로 해당 값으로 바뀌어 있다. 바인딩 작업을 했기에, 총을 쏴보면 총알 개수가 줄어드는 것을 볼 수 있다.
Unreal Engine 4 C++ The Ultimate Shooter Course Section 7-4 Weapon Ammo in C++이제 Ammo에 대해 코딩을 해주자.우선 Weapon 클래스에서 변수 및 초기화부터다. private에 선언했으므로 public에서 getter() 함수도 생성해주자. ShooterCharacter 클래스에서 Ammo을 가지고 있는 지에 대한 체크 함수를 생성해주자. 이를 토대로 기존 몇 가지 함수를 체크해주어야한다.주로 총을 발사하는 부분으로, 탄약이 있어야만 총을 발사할 수 있다. 다시 Weapon 클래스로 돌아와서 총알 감소에 대한 함수를 작성해주자. 총알 감소는 FireWeapon() 함수를 통해 총알 발사를 실시할 때마다 호출되어야 할 것이다.
Unreal Engine 4 C++ The Ultimate Shooter Course Section 7-3 Draw Ammo Count to Screen만들어준 위젯을 이제 보이도록 만들어주자.이를 위해 새롭게 플레이어 컨트롤러 클래스를 만들고, 여기서 위젯을 할당할 것이다. public 섹션을 만들고 우선 생성자 부터 만들어주었다. 다음으로 오버레이용 위젯을 만들어 줄 것이다.해당 위젯을 통해 직전에 만든 위젯을 오버레용 위젯을 또 만들어서 여기다가 배치해줄 것이다. 캔버스 패널을 만들고 BP_Ammo Count를 배치하고 앵커를 중앙 하단으로 설정하였다. 플레이어 컨트롤러 클래스에서 BeginPlay() 함수와 위젯을 위한 변수들도 생성해주자. 오버레이용 위젯 클래스가 유효한지 체크후, 해당 위젯을 할당해주자.해당 위젯을 뷰포트로 추가할 것이고, enum 클래스 옵션인 ESlateVisibility의 Vi..
Unreal Engine 4 C++ The Ultimate Shooter Course Section 7-2 Ammo Count Widget이제 위젯을 생성해주자.우선 9mm에 대한 위젯을 생성할 것이지만,이후 AR ammo도 사용할 것이기에 강의 자료에서 해당 아이콘을 다운받아 주자. 그리고 위젯을 생성해주자. 해당 위젯 크기는 바로 Custom으로 설정해주자. 전부 겹치길 원하므로 우선적으로 오버레이를 할당해주고,전에 위젯을 생성했을 때와 마찬가지로 Horizontal Box와 Vertical Box을 조합하여 만들어줄 것이다.Fill을 통해 구역 나누기와, 정렬을 이용하게 된다.글꼴도 원하는대로 바꿔주면 된다.이에 대한 세세한 내용은 생략한다.
Unreal Engine 4 C++ The Ultimate Shooter Course Section 7-1 섹션 7의 90, 91강의는 에셋 호환이 불가능하여 강의 시청만 하였다.간단하게 내용을 요악하자면 장전하는 애니메이션을 다운받아 기존 애니메이션 에셋으로 조정하는 내용이다.Ammo총알 또한 위젯으로 보여주기 위한 작업을 해주자.총기가 여러개이므로 총알 또한 여러 종류을 가지게 될 것이다.우리는 9mm와 AR용 2가지를 사용할 것이며, 이에 TMap을 활용할 것이다. 우선 enum class로 총기 종류를 만들어주자. 이어서 TMap으로 enum 클래스와 해당 총기에 따른 탄약 개수를 할당하기 위해 int를 쌍으로 묶어주자.그리고 각 탄약에 대한 개수를 위한 변수도 2개 선언하고 초기화해주자. 이제 AmmoMap을 위한 함수도 생성해주자. 각 탄약과 사전에 초기화 해준 탄약 개수 변수들을 묶어서 할당해줄 ..