본문 바로가기

전체 글

(166)
[언리얼 실습] 25. 언리얼 인터페이스 만들기 목차인터페이스란?언리얼 인터페이스 만들기1. 인터페이스란? 인터페이스는 클래스나 객체의 구조를 미리 설정하고 이를 상속 받은 클래스나 객체가 해당 속성을 반드시 구현하도록 하는 것을 말한다. 인터페이스 자체는 실제 구현을 하지는 않고 메서드의 이름과 인자, 반환값만 정의하는데 이것을 추상화라고 한다. 추상화되어 있기 때문에 인터페이스를 상속 받는 클래스에서 각각 필요한 기능들을 구현해서 사용할 수가 있고 이를 다형성이라고 한다. 인터페이스를 통해 여러 클래스에서 같은 규칙을 따를 수 있게 되기 때문에 코드의 일관성을 유지할 수 있으며 이는 객체지향언어의 핵심적인 특징 중 하나이다. C++에는 인터페이스가 존재하지 않지만 순수가상함수를 통해 이를 구현할 수 있는데 순수가상함수란 함수가 구현되어 있지 않고 ..
[언리얼 실습] 24. 공격중에만 트레이싱 하기 목차특정 상황에서만 트레이싱 진행하기1. 특정 상황에서만 트레이싱 진행하기 공격 몽타주에서 노티파이를 이용해서 공격시작지점과 종료지점을 정한 뒤 이 사이에서만 콜리전을 활성화 시킬 것이다. 공격 시작 지점과 종료지점 각각 노티파이를 추가하자. 이제 C++에서 콜리전을 활성화 시키는 방법을 알아보자. 그전에 활성화를 시키려면 먼저 비활성화 시킬 필요가 있을 것이다. 무기 cpp파일로 가서 생성자에서 콜리전을 비활성화 시키자AWeapons::AWeapons(){// 생략 WeaponBox->SetCollisionEnabled(ECollisionEnabled::NoCollision);// 생략} 이제 캐릭터 헤더파일에서 블루프린트에서 호출이 가능한 콜리전 활성화/비활성화 함수를 만들 것이다. UFUNCTION..
[언리얼 실습] 23. 무기 히트를 위한 콜리전 박스 추가랑 트레이싱 추가하기 목차콜리전 박스 만들기트레이싱 준비c++에서 트레이싱 하기1. 콜리전 박스 만들기 충돌을 감지하기 위해서는 충돌을 일으킬 수 있어야 하고 그렇게 하기 위해 콜리전 박스를 만들 것이다. 비주얼 스튜디오로 들어가자 // 무기.hprivate: UPROPERTY(VisibleAnywhere) class UBoxComponent* WeaponBox; 박스 컴포넌트를 선언해주자. 이제 생성자에서 이를 정의해주어야 한다. #include "Components/BoxComponent.h"AWeapons::AWeapons(){ WeaponBox = CreateDefaultSubobject(TEXT("Weapon Box")); WeaponBox->SetupAttachment(GetRootComponent());} 이제..
[언리얼 실습] 22. C++에서 아이템 습득시 사운드 재생하기 목차 C++에서 사운드 재생하기디버그 하기1. C++에서 사운드 재생하기 C++에서 무기를 장착할때 사운드를 재생해보려고 한다.  void AKnight::EKeyPressed(){ AWeapons* OverlappingWeapon = Cast(OverlappingItem); if (OverlappingWeapon) { OverlappingWeapon->Equip(GetMesh(), FName("RightHandSocket")); CharacterState = ECharacterState::ECS_EquippedOneHandWeapon; OverlappingItem = nullptr; EquippedWeapon = OverlappingWeapon; } else if (CanDisarm()) { ..
[언리얼 실습] 21. 실제로 무장 해제하기 목차소켓을 추가하기c++로 무장 및 해제하기1. 소켓을 추가하여 실제로 무장 해제하기 무기를 해제해서 등 뒤로 옮기려고 한다. 그러기 위해서 캐릭터의 스켈레톤매시에 새로운 소켓을 추가하여야 한다.  캐릭터의 스켈레톤 매시에서 검을 놓기 적절한 위치를 찾아 소켓을 추가해준다.  우클릭하여 소켓을 추가해주자.  프리뷰 에셋을 추가하여 검의 위치를 잡아보자.  대략 이런 형태로 옮기고 제대로 됐는지 확인하기 위해 우측의 프리뷰 신에서 애니메이션 미리보기를 해본다.  이런식으로 애니메이션을 재생시켜 검의 위치를 잡을 수 있다. 이때 너무 정확하게 맞출 필요는 없으며 대략 비슷하게만 맞추면 된다. 이제 실제로 검을 장착하거나 장착해제해 보자.2. c++로 무장 및 해제하기  무장을 하거나 무장을 해제하는 그 시점..
[언리얼 실습] 20. 무장 해제 애니메이션 적용 목차무장해제 애니메이션 만들기C++에서 재생하기1. 무장해제 애니메이션 만들기 먼저 무장 애니메이션과 무장 해제 애니메이션을 구하자. 그리고 이것들을 애니메이션 몽타주에서 재생할 것이다.  애니메이션을 설정하자. 이제 이 몽타주를 재생하기만 하면 된다.2. C++에서 재생하기UPROPERTY(EditDefaultsOnly, Category = "Montage")UAnimMotage* EquipMontage; 캐릭터 헤더파일에 몽타주를 담을 변수를 선언해주자. 이제 이 몽타주를 재생하면 된다. void AKnight::EKeyPressed(){ AWeapons* OverlappingWeapon = Cast(OverlappingItem); if (OverlappingWeapon) { OverlappingW..
[언리얼 실습] 19. 메타사운드를 활용하여 랜덤사운드 재생하기 메타사운드를 이용하여 랜덤사운드를 재생해보려고 한다. 메타사운드를 만들고 들어간뒤 다시 인풋을 추가하자. 그리고 디테일 창으로 넘어간다.  타입을 WaveAsset으로 변경한 뒤 Is Array를 체크해준다.  이제 배열들에 각각의 효과음을 집어 넣자.  인풋을 끌고 와 셔플을 검색해 노드를 추가한다.  그 뒤 셔플노드를 wave player 노드랑 연결해주자.  이렇게 연결하면 끝이다. 마찬가지로 피치랑 볼륨을 조절해서 단조로운 사운드를 좀 더 입체적으로 만들 수 있다. (위 노드에서 셔플의 밸류랑 웨이브 플레이어의 웨이브 에셋이 연결되어 있지 않은데 이를 연결해야한다.)  애니메이션으로 돌아가 사운드를 재생하기 원하는 곳에서 재생하면 끝이다.
[언리얼 실습] 18. 메타사운드를 활용하여 효과음 추가 목차효과음 추가메타사운드 만들기메타사운드 적용하기1. 공격시 효과음을 추가 공격을 할때 효과음을 추가해보려고 한다. 사운드를 구한뒤 이를 사용할 것인데 이때 사운드 파일의 확장자는 wav 파일이여야 언리얼에디터에서 임포트가 가능하다고 한다. 사운드 파일을 구할때 이 점을 주의하도록 하자.  사운드를 임포트해온다. 이제 이 사운드를 그래도 사용해도 되지만 강의에서 메타사운드를 사용하기 때문에 여기서도 메타사운드를 이용해서 효과음을 다루어보려고 한다.2. 메타사운드 사용하기  플러그인에서 메타사운드가 사용중인지 확인한다. 이제 메타사운드를 만들어보자.  콘텐츠 브라우저에서 메타사운드를 만든다.  이제 다음과 같은 창이 뜬다. 이곳에서 사운드를 설정할 것이다.  좌측 멤버 항목에서 인풋을 추가하자. 해당 인풋..
[언리얼 실습] 17. 공격 상태 만들기 목차서론공격 상태 enum 만들기블루프린트에서 비점거 상태로 돌아가기c++에서 비점거 상태로 돌아가기무기가 없을 때 공격방지공격 중 이동방지1. 서론 현재 공격 애니메이션 작동 방식은 연속된 입력을 가하면 계속 애니메이션을 초기화해서 재생한다. 또한 애니메이션 재생 중 이동이 가능한데 이 부분을 막아보려고 한다.2. 공격 상태 enum 만들기 전에 캐릭터의 무기 장착 상태에 따른 enum을 만들었던 것처럼 캐릭터의 액션 상태에 따른 enum을 만들 것이다. 캐릭터타입 헤더파일로 들어가보자 UENUM(BlueprintType)enum class EActionState : uint8{ EAS_Unoccupied UMETA(DisplayName = "Unoccoupied"), EAS_Attacking UMET..
[언리얼 실습] 16. 애니메이션 몽타주로 공격 모션 만들기 목차 공격 몽타주 만들기인풋 액션 만들기C++ 에서 몽타주 재생하기1. 공격 몽타주 만들기 애니메이션 몽타주를 이용하여 공격 모션을 만들어보려고한다.  콘텐츠 브라우저에서 애니메이션 몽타주를 만들자. 애니메이션 몽타주를 누르면 매시를 선택하라고 뜨는데 우리가 쓰고 있는 캐릭터의 매시를 고르면 된다. 몽타주 안으로 들어가자   우측 하단에 있는 애셋 브라우저에서 해당 스켈레톤에서 사용할 수 있는 애니메이션들을 볼 수 있는데 이곳에서 공격 애니메이션을 가져다가 디폴트 그룹으로 가져가면 된다.  이제 이곳에서 섹션을 나눌 것이다 가장 상단바에서 우클릭을 하면 새 섹션을 만들 수 있다.  다음과 같이  섹션을 나누자. 현재 섹션은 나누어져 있지만 애니메이션은 연속적으로 이어진다. 그렇기 때문에 이를 분리할 필요..