
2D 블렌드 스페이스저번 강의에서 Blend 함수를 통해 애니메이션을 블렌딩 해줬지만, 블렌드 스페이스라는 더 좋은 방법이 존재한다.우선 이를 생성해보자. 블렌드 스페이스를 생성할 때도 기본이 될 스켈레톤 메시를 선택해주어야한다. 생성하고 나면 다음과 같은 화면이 존재하며, 뷰포트 바로 아래 공간이 우리가 작업할 공간이다. 우선 해당 공간에 상하좌우 이동을 할당해보자.할당할 애니메이션은 우측 하단의 에셋 브라우저에서 가져오면 된다.할당한 후에는 컨트롤을 누르면 아래와 같이 초록색 X 표가 보이는데, 이를 통해 해당 X가 위치한 곳의 애니메이션이 재생된다.그리고 블렌드 스페이스 내에 좌측 상단 3가지 중 가운데 표시를 누르면 할당한 내용의 이름을 볼 수 있다. 현재 블렌드 스페이스 좌측과 하단에 None으..

애니메이션 블루프린트의 기초저번에 잠깐 다뤘던 애니메이션에 대해서 이번엔 애니메이션 블루프린트를 통해 다뤄보자.이를 위해 우선 애니메이션 블루프린트를 생성해주자.생성시에 우리가 사용할 스켈레톤 메시를 선택해주어야 한다. 그러면 이제 다음과 같은 화면을 볼 수 있다.좌측에는 미리보기와 함수 및 변수 작성 칸이, 중앙에는 이벤트 그래프 칸이, 우측에는 디테일 패널 및 프리뷰 에디터와 에셋 브라우저가 존재한다. 기본적으로 에셋 브라우저에서 원하는 애니메이션을 골라서 Output Pose에 넣고 컴파일을 해주면 해당 애니메이션이 출력된다. 우리는 중앙에서 Animgraph를 통해 여러 변수들을 사용하여 애니메이션들을 블렌딩하게 된다.블렌딩하기 위해 사용하는 함수는 Blend 함수이다.해당 함수는 이유는 모르겠으..

충돌 메시 편집캐릭터 스포닝 포인트의 바로 오른쪽 통로로 가보면 화면이 이상해지는 부분이 존재한다.이는 콜리전에 문제가 있는 것으로 화면을 플레이어 콜리전으로 바꾸면 해당 콜리전을 볼 수 있다. 위 사진의 튀어나온 콜리전을 선택하여 해당 콜리전의 스태틱 메시를 확인해보자. 해당 스태틱 메시에서 단순 콜리전을 선택하여 설정된 콜리전 세팅을 살펴보면 다음과 같이 콜리전에 대한 에셋팩 오류를 볼 수 있다. 이를 고치기 위해서는 모든 콜리전을 삭제하고 다시 할당해주는 방법도 있지만, 간단하게 튀어나온 콜리전만 선택하여 삭제해주면 다른 부분에는 영향없이 깔끔하게 문제있는 부분만 삭제가 가능하다. 이제 다시 원래 화면의 플레이어 콜리전을 살펴보면 전과 같이 이상하게 튀어나온 콜리전이 없는 것을 볼 수 있다.
문제링크 : https://www.acmicpc.net/problem/5648#include using namespace std;typedef long long ll;typedef pair pii;const int MAX = INT_MAX;int N;string s;vectorv;int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin >> N; while(N--) { cin >> s; reverse(s.begin(), s.end()); v.push_back(stol(s)); //뒤집은 값 저장 } sort(v.begin(), v.end()); //뒤집은 값 정렬 for(int i=..

스켈레탈 애니메이션의 기초현재 캐릭터가 움직일 때 현재 고정된 상태 모양 그대로 움직이기 때문에 매우 부자연스럽다.이를 해결하기 위해 애니메이션을 설정하게 되며, 이번 강의에서는 이 애니메이션의 기초적인 부분을 다루게 된다.이를 위해 다운받았던 에셋팩에서 애니메이션 시퀸스 파일을 찾아 열어보자.열어보면 다음과 같은 화면을 볼 수 있다. 해당 화면을 통해 애니메이션이 동작하는 모습을 볼 수 있고, 우측 하단의 에셋 브라우저를 통해 다른 애니메이션들도 체크하는 것이 가능하다. 우측 상단의 해골 캐릭터 모양을 누르면 스켈레톤 메시를 확인할 수 있다. 해당 화면에서는 스켈레톤 메시를 체크가 가능하며, 해당 스켈레톤 메시를 구성하는 스켈레톤을 일일히 체크하는 것이 가능하다.만약 척추부위 스켈레톤을 좌측 패널에서 ..

이전 강의로 컨트롤러 조준에 대한 내용이 존재하지만, 해당 강의는 패드를 통한 캐릭터 이동에 관한 내용이다.현재 키보드 및 마우스로 강의를 진행하고 있기에 해당 내용 시청만하고 내용 작성은 스킵하였다. 3인칭 카메라 스프링 암현재 캐릭터의 카메라를 조정하여 3인칭으로 보이도록 조절해보자.캐릭터 블루프린트에서 카메라 컴포넌트를 우선 생성해주자. 그리고 해당 카메라의 위치를 조정해보자. 현재 상태에서 플레이를 해보면 다음과 같은 화면을 볼 수 있다. 이 상태에서 마우스를 통해 회전을 해보면 현재 위 아래 회전이 불가능한 상태이다.추가적으로 벽 쪽으로 가면 다음과 같이 벽을 통과해서 보고 있는 것을 볼 수 있다. 우선 위아래 회전 문제를 해겨해보자.이는 카메라 디테일 패널에 있는 폰 제어 회전 사용을 활성화하..
문제링크 : https://www.acmicpc.net/problem/2535#include using namespace std;typedef long long ll;typedef pair pii;const int MAX = INT_MAX;int N, n1, n2, n3;mapm;struct info{ int country; int student; int grade;};vectorv;bool cmp(info a, info b) //성적 순 정렬{ return a.grade > b.grade;}int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin >> N; for(int i=0; i> n1 >> n2 >> n3; ..

캐릭터 이동 기능이번에는 캐릭터의 기본적인 상하좌우 이동과 점프를 구현해준다.우선 프로젝트 세팅으로 가서 상하좌우에 대한 축 매핑을 생성해주자.상하좌우의 경우 스케일 값을 통해서 하나의 축(상하, 좌우)으로 해결이 가능하다. 이제 이를 토대로 VScode에서 바인딩 작업을 해주자.우리가 사용할 함수는 다음과 같다.AddMoveMentInput() 기본적으로 벡터를 받아서 이동할 방향을 알려줌AddControllerPitchInput() : 위 아래를 바라보는 기능AddControllerYawInput() : 왼쪽 오른쪽으로 바라보는 기능Jump() : 점프 축의 경우 AxisValue가 딱히 필요없기에 해당 함수가 위한 곳에 연결하여 바로 작성하는 것이 가능하다.축에 관련한 이동 함수는 APawn에..

C++에서 폰(pawn)과 캐릭터의 차이점저번 섹션에서도 다룬 내용이지만, 이번 섹션을 통해서 좀 더 자세히 다뤄보게 된다.우선 직접 비교를 위해 pawn과 character 모두 C++ 클래스로 생성해보자. 그리고 각 C++ 클래스를 기반으로 다시 블루프린트를 생성하고 컴포넌트를 살펴보자. 위 이미지와 같이 pawn 경우 있는 것이 별로 없지만, character의 경우 캡슐과 화살표, 캐릭터 무브먼트 등이 추가로 존재한다.character의 경우 기본적으로 pawn에서 상속된 것으로 pawn의 기능을 가지고 있으나, 추가적으로 위와 같은 기능들을 가지게 되는 것이다. 우선 캡슐의 경우 대략적인 물리학, 조작, 지형과의 충돌 등을 구현하기 위한 것으로 우리가 만들 캐릭터가 해당 캡슐 안에 들어가게 된다..

이번 섹션의 목표는 우선 애니메이션 동작을 가진 3인칭 캐릭터를 이용하여 적을 물리치는 게임을 만드는 것이다.플레이어는 사격 매커니즘을 가지고 사격을 하게 되며, 적은 사격 AI를 가지고 플레이어를 쫒아와서 사격을 하게 된다.적 섹션과 마찬가지로 먼저 체력을 0으로 만드는 쪽이 승리하게 된다. 또한 이번 섹션을 위한 각종 에셋팩이 강의자료로 올라와있으므로 해당 자료를 다운받아야 한다.그리고 강의가 언리얼 엔진 4.25 버전을 사용하고 나는 언리얼 엔진 5를 사용하므로 이 점에 유의하도록 하였다. 프로젝트 셋업하기우선 이번 프로젝트를 위한 자료를 다운받고 시작하자.각 자료를 압축을 풀고, 각 폴더의 내용을 하나로 합쳐주자. 해당 에셋은 하나의 프로젝트로 되어있다.이를 실행해주고 마이그레이션 기능을 통해 ..
문제링크 : https://www.acmicpc.net/problem/24417#include using namespace std;typedef long long ll;typedef pair pii;const int MAX = INT_MAX;const int MOD = 1000000007;int N;int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin >> N; ll a = 1, b = 1; //더할 값 2가지 for(int i=2; i 언듯보면 웰노운으로 잘 알려진 dp 식을 이용해 피보나치를 푸는 문제이다.하지만 이렇게 풀 경우 N의 값이 최대 1억이기에 여기에만 메모리가 400MB가 사용되고,DP 중간 계산과정에서 추가적인 메..

다듬기 및 마무리이제 마무리할 단계이다.그전에 몇가지 개선사항을 짚어보고 수정을 해보도록 하자. 첫 번째로 카메라 움직임을 더 부드럽게 조정해보자.이는 탱크에서 스프링암을 선택하면 볼 수 있는 지연 기능을 통해 조절할 수 있다.여기서 카메라 렉과 회전 렉을 활성화 해주었다.이러면 카메라가 약간 지연되면서 탱크를 부드럽게 따라오게 된다.이에 대한 수치는 카메라 지연 속도와 회전 지연 속도의 값을 조절하여 얼마나 지연 되서 따라오게 할 지 선택할 수 있다.해당 값 또한 정답이 없기에 개인의 취향에 맞게 테스트해보고 값을 선택하면 된다. 두 번째로 탱크가 죽은 뒤에도 포탑이 탱크를 향해 발사체를 발사하는 것을 수정해보자.이는 간단하게 bool 타입 변수를 선언해서 활용함으로서 해결할 수 있다. 탱크가 죽었을 ..

카메라 셰이크이번엔 역동적인 움직임 연출을 위해 카메라 셰이크 기능을 추가해준다.이러면 발사체가 대상을 맞추면 카메라가 흔들리게 된다. 언리얼 엔진에는 카메라 셰이크를 위한 내장 클래스가 존재한다.우선 C++ 클래스가 아닌 블루프린트 클래스를 생성하는데, 이는 카메라 셰이크에 변수가 많아서 블루프린트 클래스에서 작업하는 것이 훨씬 쉽기 때문이다. 먼저 발사체가 부딪혔을 때의 카메라 셰이크를 만들어주자. 그리고 얼마나 흔들릴지 진동 값을 조절해주어야 한다.자세한 수치는 직접 테스트해보며 조정해보는 것이 좋다.우선 강의에서 나온 수치를 그대로 적용하였다. 각각의 변수는진동이 지속되는 시간, 카메라 흔들림이 시작될 때 까지의 시간, 카메라 흔들림이 종료될 때까지의 시간을 의미한다. 추가적으로 위치 진동의 값도..

사운드발사체가 발사됐을 때와 탱크나 터렛이 죽었을 때의 사운드를 추가해주자.이를 위해 발사체에 발사시 사운드와 히트 사운드, 베이스폰에 데스 사운드 이렇게 총 3개가 필요하다.우선 발사체에서 사운드 변수를 선언해주자.사운드를 위해서 UBaseSound 타입 포인터 변수를 사용하게 된다. 같은 변수를 2개 사용하기에 앞에만 전방선언 해줘도 뒤에 변수는 해줄 필요가 없다.또는 미리 전방선언을 따로 해주는 방법도 있다. 그리고 베이스폰에서도 선언해주자. 이제 언리얼로 돌아가서 각각에 맞는 사운드 파일을 할당해주자.여기서 Launch Sound와 Hit Sound는 같은 걸로 할당해주었다. Death Sound의 경우 탱크와 터렛 각각에 할당해주어야 한다. 이제 사운드를 재생시키는 방법을 알아야 한다.사운드 ..
문제링크 : https://www.acmicpc.net/problem/16212#include using namespace std;typedef long long ll;typedef pair pii;const int MAX = INT_MAX;int N;int arr[500001];int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cin >> N; for(int i=0; i> arr[i]; sort(arr, arr+N); for(int i=0; i 간단한 정렬 문제이다.힌트에 주어진 것 처럼 sort 함수를 사용하면 매우 간단하게 풀이가 가능하다.