본문 바로가기

전체 글

(166)
[언리얼 실습] 15. 애니메이션 블루프린트 정리하기 목차서론Multiple Animation BlueprintsControl Rig 노드 분리하기1. 서론  애니메이션 블루프린트가 점점 복잡해지고 있다. 이대로 놔두면 나중에 유지보수 하기가 힘들어지고 기능하나를 추가하려 해도 정말 힘들 것이다. 그렇기 때문에 이를 정리할 필요가 있다.2. Multiple Animation Blueprints 애니메이션 블루프린트를 여러개로 쪼개어 이를 관리하면 유지보수가 더 쉬워진다.  새로운 애니메이션 블루프린트를 만들자.  해당 블루프린트에서는 메인 스테이트를 관리할 것이라 메인 스테이트와 관련된 노드들을 복사해서 가져오자.  이렇게 붙여넣을 수 있다. 하지만 한가지 문제는 이렇게 복사해서 가져오면 각종 변수들이 동작을 하지 않는다는 것이다. 그렇기 때문에 변수를 다..
[언리얼 실습] 14. Blend Poses 를 이용하여 상태에 따른 애니메이션 보여주기 목차c++로 만든 상태 가져와서 애니메이션 재생하기1. c++로 만든 상태 가져와서 애니메이션 재생하기  애니메이션 블루프린트로 들어가자. 블랜드 포즈를 이용해서 캐릭터의 상태에 따라 애니메이션을 변경할 것이다.  Blend Poses (EcharacterState) 찾아 만들어 준다.  노드가 나오면 우클릭 해서 핀을 추가해주자. 그다음 우리가 만든 열거형을 가져온다.  이제 각각의 상태마다 우리가 원하는 애니메이션을 입력해주면 된다.  캐릭터의 상태에 따라 다른 애니메이션이 나오게 바뀌었다. 걷기 달리기 기타등등 애니메이션도 똑같은 방식으로 적용하면 된다.
[언리얼 실습] 13. 무기 장착 여부에 따른 캐릭터의 상태 업데이트 하기 목차상태를 나누는 enum 만들기enum을 정의할 헤더파일 만들기enum 상태 바꾸기1. 상태를 나누는 enum 만들기 캐릭터의 상태에 따라 다른 애니메이션을 적용하기 위해서는 캐릭터의 상태를 담을 변수가 필요하다. C++에서 이를 시행해 보자. UENUM(BlueprintType)enum class ECharacterState : uint8{ ECS_Unequipped UMETA(DisplayName = "Unequipped"), ECS_EquippedOneHandWeapon UMETA(DisplayName = "EquippedOneHandWeapon")}; 위와 같이 만들어 캐릭터의 상태를 나타내는 열거형을 만들 수 있다. 열거형을 살펴보자. 최상단의 UENUM은 언리얼엔진의 리플렉션 시스템에 노출..
[언리얼 실습] 12. E 버튼을 눌러 무기 장착하기 무기 근처에 가면 자동으로 캐릭터에 장착되는 것이 아닌 버튼을 눌러 장착할 수 있게 만들어보자 목차입력키 매핑하기C++에서 키 입력으로 장비 장착하게 하기캐릭터 블루프린트에서 액션 넣어주기1. 입력키 매핑하기 키보드 버튼을 눌러 아이템을 장착하려면 키를 매핑해야 한다.  Input Action을 만들어 매핑을 진행해보자. 언리얼 엔진 5.1버전인가 5.2버전 정확히는 기억이 안나는데 어쨌든 그때나온 향상된 입력 기능을 사용할 것이다.  인풋 액션을 만들었으면 여기서 딱히 건들일 것은 없다. 키를 눌렀는지 안눌렀지만 알면 됨으로 Value Type은 그대로 불리언으로 놓아두면 된다. 이제 매핑 컨텍스트에 매핑을 하자  인풋 매핑 컨텍스트를 열고 Mappings의 + 버튼을 눌러 액션을 추가해준다.  아직은..
[언리얼 실습] 11. 캐릭터 소켓에 무기 에셋 붙이기 목차서론C++에서 캐릭터 소켓에 무기 에셋 부착하기1. 서론 무기를 캐릭터에 붙이는 방법은 다음과 같다.무기 클래스에 액터가 오버랩 된다.오버랩 된 액터가 우리가 만든 캐릭터 클래스로 캐스팅 될 수 있는 지 확인한다.캐스팅이 성공하면 플레이어가 무기에 접근한 것이다.무기클래스의 스태틱 매시를 캐릭터의 소켓에 부착한다.2. C++에서 캐릭터 소켓에 무기 에셋 부착하기 C++ 코드를 작성하기 전에 Item.h 파일을 수정을 하였다.protected: virtual void BeginPlay() override; UFUNCTION() virtual void OnSphereOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimiti..
[언리얼 실습] 11. 공격 애니메이션 추가하기 목차1. 애니메이션 리타겟2. 소켓 위치 수정1. 애니메이션 리타겟  다음과 같은 순서로 애니메이션을 가져왔다. 이제 이걸 리타겟하자.  새로 추가한 애니메이션 전부를 리타겟 하면 된다.2. 소켓 위치 수정 이제 다시 애니메이션에 맞게 소켓의 위치를 수정해보자  리타겟한 애니메이션에 들어간다. 이제 여기서 다시 소켓의 위치를 조절해보자.  스켈레톤 트리에서 소켓을 찾고 위치를 수정하면 된다.   한 애니메이션에서 위치를 수정하면 다른 애니메이션에서도 제대로 나오는 지 확인해주어야 한다. 아주 잘 된 것 같다. 이제 공격 애니메이션도 준비됐으니 무기를 캐릭터에 붙이도록 해보자
[언리얼 실습] 10. 캐릭터에 Socket 추가하기 목차캐릭터에 소켓 추가하기1. 캐릭터에 소켓 추가하기 캐릭터에 새로운 소켓을 추가하여 이곳에 무기를 부착하려고 한다. 에디터를 켜보자. 우리가 쓰고 있는 캐릭터의 스켈레톤 매시를 찾아 들어간다.  무기는 손에 추가할 예정이니 왼쪽 스켈레톤 트리에서 Hand를 검색하여 hand_r 본을 찾는다.참고로 언리얼 5.4 에디터 기준으로 트리가 오른쪽에 있지만 한쪽에만 있으니 보기가 힘들어 왼쪽으로 옮겼다. (강의에서도 왼쪽에 있기도 하고)  우클릭을 하면 소켓을 추가할 수 있다.소켓을 추가하고 이름을 RightHandSocket로 바꾸었다. 이 이름은 추후 C++에서 무기를 소켓에 추가할때 쓰는 이름이니 알아보기 쉽게 잘 정해야한다. 무기를 부착하기전 무기가 제대로 부착되는지 확인하기 위해 미리보기를 할 것이다..
[언리얼 실습] 9. 무기 클래스 추가하기 - Quixel Bridge 이용 이번에는 캐릭터에 장착시킬 무기를 만들고 캐릭터에 장착시켜보려고 한다.목차Quixel Bridge에서 무기 에셋 가져오기무기 클래스 만들기무기 블루프린트 클래스 만들기1. Quixel Bridge 무기 에셋 가져오기 퀵셀 브릿지에서 무기에셋을 가져와보려고 한다. 퀵셀 브릿지는 기본적으로 언리얼엔진 라이브러리에 존재하고 이를 엔진에 설치하기만 하면 된다.  이렇게 라이브러리로 들어가면 퀵셀브릿지가 존재한다. 이제 에디터로 돌아가자.  에디터 상단의 Quickly add to the project 버튼을 누르면 퀵셀 브릿지를 열 수 있다.  퀵셀 브릿지를 이용하려면 회원가입을 해야한다. 회원가입은 무료이니 우 상단의 사람 아이콘을 누르고 회원가입을 진행하자  내 기억상으로는 회원가입을 하고 무슨 월정액 결제..
[언리얼 실습] 8. End Overlap 이벤트 생성 이제 이전에 만든 구체에서 나가면 이벤트가 발생하게 해볼 예정이다.목차C++에서 EndOverlap이벤트 생성1. C++에서 EndOverlap 이벤트 생성 비주얼 스튜디오로 돌아가 엔드 오버랩 이벤트를 만들어보자. 헤더파일에 바인딩할 함수를 만든다.void OnSphereEndOverlap(); 여기에 들어갈 매개변수는 무엇일까? 다시한번 Primitive Component.h 파일로 돌아가 찾아보자  파람이 4개가 필요하다는 것을 알 수 있다. 뒤에서 부터 4개를 복사해 가져오면 된다. UFUNCTION()void OnSphereEndOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* Oth..
[언리얼 실습] 7. Overlab Event 생성 목차서론아이템 클래스 만들기C++ 클래스를 기반으로 블루프린트 클래스 만들기1. 서론 이제 캐릭터의 이동에 관한 부분은 끝났으니 공격과 관련된 부분을 해야할 차례이다. 하지만 그전에 무기(아이템) 클래스를 만들어 캐릭터에 장착하는 부분을 해보려고 한다. 캐릭터가 아이템 근처에 가면 무기를 집을 수 있게 할 것인데 그러기 위해서 우선 캐릭터가 아이템에 오면 반응을 할 수 있게 오버랩 이벤트를 만들어 보려고 한다.2. 아이템 클래스 만들기 아이템 클래스를 만들어 여기에 오버랩 이벤트를 주자. 아이템을 조종하거나 할 일은 없기 때문에 그냥 액터 클래스를 기반으로 만들면 된다. 이제 C++에서 이 액터에 오버랩 이벤트를 주자. 오버랩 이벤트를 주기 위해서 오버랩 할 영역을 만들어야 하는데 SphereCompon..