분류 전체보기 115

[UE4] Mixamo 애니메이션 리타겟(Retarget)

개요 전문적인 애니메이터가 있는 회사가 아닌 개인이 개발을 하다보면 여러 곳에서 애니메이션을 가져와야 하는 경우가 종종 있다. 그 중에서도 Mixamo라는 사이트에서 무료로 다양한 애니메이션을 제공받을 수 있기 때문에 많은 개발자들이 애용하는데, 문제가 하나 있다. 내가 다운받은 모델과 Mixamo에서 다운받은 모델은 겉보기엔 둘다 동일한 사람처럼 생겼지만 그 속의 해골?을 뜯어보면 전혀 다르다. 이해하기 쉽게 예를 들어보자. 내가 영국 사람에게 전화로 구르기 동작을 설명하려고 한다. 영국사람과 난 겉보기엔 동일한 구조를 가지고 있지만(사람이라면 어깨, 목, 골반, 다리, 팔 등이 동일한 구조다.) 그것을 부르는 이름은 나라마다 다르다. 그래서 내가 아무리 무릎을 굽히고 고개를 숙이라고 얘기해도 영국 사..

UE4 2023.04.09
[ue4] 루트 모션

개요 보통의 게임제작에서 애니메이션은 캐릭터의 모양새를 내기 위해 단순히 캐릭터에 입혀 재생시키는 것이지, 물리적인 움직임에 관여할 수 없다. 조금 기술적으로 말해보면 대부분의 애니메이션은 캐릭터 루트의 정지 상태를 유지하는 사이클을 통해 처리된다. 하지만 일부 애니메이션의 경우 캐릭터의 이동이 포함되어 있고, 그렇게 되면 플레이어 콜라이더 캡슐 밖으로 캐릭터가 벗어나고 애니메이션이 끝나면 부자연스럽게 돌아오는 문제가 발생하게 된다. 이를 해결하기 위해 주목해봐야 할 것이 바로 루트모션이다. 루트모션이란? 그렇다면 '루트 모션'이란 무엇일까? 간단히 말해 스켈레톤의 루트 본(root born)의 애니메이션을 기준으로 하는 캐릭터의 동작을 말한다. 위와 같은 경우의 처리를 위해서 캐릭터에서 루트의 모션을 ..

UE4 2023.04.09
[인공지능 응용] CIFAR10 예제 공부하기

https://colab.research.google.com/github/pytorch/tutorials/blob/gh-pages/_downloads/4e865243430a47a00d551ca0579a6f6c/cifar10_tutorial.ipynb#scrollTo=f4krrQjVJkca cifar10_tutorial.ipynb Run, share, and edit Python notebooks colab.research.google.com Classifier(분류자) 학습시키기 먼저, 데이터에 대해 생각해보자. 일반적으로 이미지, 텍스트, 오디오 또는 비디오 데이터를 처리해야 할 때, 데이터를 numpy 배열로 로드하는 표준 python 패키지를 사용할 수 있다. 그런 다음 이 배열을 Torch로 변환..

수업내용 정리 2023.04.06
[UE4] 상태패턴으로 캐릭터 효율적 관리 구상해보기

언리얼에서 여러가지 다양한 애니메이션(스킬, 달리기, 구르기, 점프공격, 점프, 공격, 피격, idle, 죽음)을 연결하다보니 AnimBlueprint의 StateMachine을 사용하게 되었고, 캐릭터의 다양한 상태를 코드적으로 구현해 관리하면 애니메이션이나 다른 부분을 구현할때에도 도움이 되지 않을까 생각해서 구상해보기로 했다. 1. 순수가상클래스 State 정의하기. 먼저, 상태를 정의하는 State Class를 작성한다. // State.h #pragma once class AMyCharacter; class State { public: virtual ~State() {} virtual void Enter(AMyCharacter* Character) {} virtual void Update(AMy..

UE4 2023.04.05
[UE4] 클래스 이름 변경하는 방법

1. 바꾸고자 하는 클래스의 헤더파일로 이동한 후, 첫 알파벳을 제외한 클래스 이름을 선택한다. - 예를 들어 위의 경우는 저렇게 U를 뺀 나머지 클래스 이름을 선택하면 된다. 2. Ctrl + H를 누른다. 그럼 우측 상단에 팝업이 하나 뜰것이다. 3. 새로운 이름을 아래 캡처와 같이 하단 박스에 작성한다. 4. 변경 영역을 현재 프로젝트로 지정하고 오른쪽에 있는 버튼을 눌러주면 된다. 5. 솔루션 탐색기의 클래스 네이밍은 F2를 눌러 직접 변경해주자. 6. 컴파일 에러가 없는지 확인한 후 프로젝트를 닫고 uproject파일을 우클릭해 Generate Visual Studio를 해주면 끝! 출처 : https://cynthis-programming-life.tistory.com/entry/Ue4-Cha..

UE4 2023.04.05
[UE4] UIOnly InputMode에서 Key Input 허용하는 방법

언리얼에서는 인풋모드를 클래스로 만들어 관리하고 있는데 자주 쓰이는 인풋모드는 크게 3가지가 있다. 1. UI에만 인풋 전달. 2. 게임에만 인풋 전달. 3. 둘다에 인풋 전달. 서론 인벤토리를 만드는 중에 괜히 욕심이 생겨 특정 키를 누르면 현재 화면에 떠있는 팝업 ui 가 하나씩 지워지는 기능을 만들었는데 1번 모드를 사용하니 키 인풋이 먹히지 않았다. 열심히 배열이랑 함수들 만들어가며 추가한 기능인지라 이대로 버리긴 아까워서 구글링을 통해 해결하고자 한다. 참고로 3번을 쓰면 되지 않냐 싶은데 그렇게 했다가 인벤토리 클릭하는데 플레이어가 같이 공격해버리는 버그가 발생했다. 플레이어가 UI 밖 게임과 상호 작용하게 하고 싶지 않다면, 또는 키보드를 사용하여 UI와 상호작용 하고 싶다면 주목하자. 해결..

UE4 2023.03.31
[UE4] MSB 3073 오류 해결법

위의 오류는 대체로 다른 에러와 함께 발생한다. 하지만 이번에 처음으로 혼자 에러를 발생시켜 새벽 3시까지 구글링을 했다. 코딩을 하면서 어떤 오류가 발생했을 때 내잘못이 아니라 컴퓨터가 이상해 엔진이 이상해 생각하기 마련인데, 그런 생각은 진작 접는것이 좋다. 나보다 천만배는 더 똑똑한 사람들이 만든게 오류가 쉽게 날리 없다. 반드시 마지막으로 잘 실행했던 빌드 이후로 내가 코드 혹은 엔진에 무슨 똥을 싸질러놨는지 기억을 되돌려보자. 해결법 언리얼에서 저 오류만 단독으로 발생했다면 높은 확률로 UPROPERTY 와 같은 언리얼에서 만든 것들과 관련된 오류이다. 그래서 컴파일러 오류로 뜨지 않고 저 오류만 단독 발생한 것이다. 그렇다면 컴파일러에서도 알려주지 않는 오류를 광활한 코드들 속에서 어떻게 찾아..

UE4 2023.03.29
[C++] const 위치에 따른 차이점

const는 상수라는 뜻으로 뒤에나오는 값의 수정, 변경이 불가함을 나타낸다. const는 변수와 함수에서 주로 사용되는데 그 위치에 따라 의미가 헷갈리는 경우가 많다. 참고로 const화 되어있는 변수를 레퍼런스변수나 포인터변수로 접근하려면 참조자도 const화 해주어야 한다. 1. 변수 const int num1 = 0; //num1의 int 형식의 값을 변경할 수 없습니다. int const num2 = 0; //num2의 값을 변경할 수 없습니다. num1 = 1; //ERROR!!! num2 = 1; //ERROR!!! 변수는 const가 어디에 붙든 의미가 크게 달라지지 않고 변수의 값을 변경할 수 없다는 결과도 똑같다. 하지만 포인터나 레퍼런스에서는 그 결과가 달라진다. 2. 포인터 int ..

C++ 2023.03.26
[UE4] 아키타입(Archetype)

언리얼 Document를 보다보면 아키타입이라는 말이 자주 나오는데 구글링을 해도 많은 자료가 나오진 않아서 오늘은 아키타입이란 무엇인지 알아보고자 한다. 일단 사전에 Archetype의 단어 뜻에 대해 검색해보았다. 우리나라말로는 "전형"이라고 떠서 의미가 확 와닿진 않았는데 영어 해석을 보면 "A perfect example of something"이라고 쓰여져있다. 무언가의 틀? 원형?과 같은 의미로 쓰이는 것 같다. 언리얼에서 Archetype에 대해 정의한 문서는 존재하지 않았지만, 이 아키타입이라는 말이 제일 많이 나오는 부분인 UPROPERTY의 속성 지정자에 대한 Documents를 통해 단서를 얻을 수 있었다. - EditAnywhere : 에디터 내의 속성 창, 아키타입 및 인스턴스를 ..

UE4 2023.03.02
[UE4] 인터페이스 (Interface)

What is "Interface"? 인터페이스(interface)란 특정 기능을 구현할 것을 약속한 추상 형식을 말합니다. Java나 C#등 다른 객체지향 언어에서는 인터페이스 형식을 제공하지만 C++언어에서는 제공하지 않습니다. 하지만 순수 가상 메서드를 이용하여 정의할 수 있습니다. 인터페이스는 멤버필드나 구체적으로 구현한 메서드를 갖지 않고 특정 기능을 약속한 메서드만 갖습니다. 그리고 모든 멤버는 사용하는 개발자와의 약속으로 public 접근 지정합니다. C++에서는 구조체는 디폴트 가시성이 public이어서 구조체를 이용하여 인터페이스를 정의하는 이들도 많습니다. 인터페이스 명명규칙 개발자들 사이에 인터페이스 이름은 I로 시작하고 뒤에 약속하는 기능을 붙입니다. 물론 여러 개의 기능을 약속하는..

UE4 2023.02.25