
Add Movement Input노드
Get Control Rotation노드
Add Controller Yaw/Pitch/Roll Input노드
Scalar
Vector
Velocity(속도)
Event Blueprint Update Animation노드
Try get pawn owner노드
Get Movement Component 노드
Do Once노드
Timeline노드
Lerp(Linear Interpolation, 선형 보간)


get velocity -> vector length를 통해서 속도를 구하는 두방식의 차이점이 궁금했다.
첫번째 방식은 Z값의 속도도 받기 때문에 3D속도가 되고, 점프나 낙하로 Z속도가 커지면 Speed값도 같이 커지게 된다. 그러므로 위로 점프하거나 떨어지는 속도도 달리기 속도에 섞여 들어 가므로 캐릭터 이동의 Speed 변수는 X/Y만 사용하는 식으로 많이 쓰인다.
State Machine에서 다른 state로 넘어갈때 'Automatic Rule Based on Sequence Player in State' 이런속성이 있다. 이는 현재 상태의 애니메이션이 끝까지 재생되면 자동으로 다음 상태로 넘어가라는 뜻
초기 블루프린트

Timeline앞으로 isClose를 식별하는 브랜치를 옮김

isClose대신에 Do Once노드 사용

Start, TargetRotation을 Timeline앞에 배치

Do Once의 Reset과 end overlap연결

Timeline의 Play from Start

★완성품★



loop 설정해서 해결
정수 N(1 ≤ N ≤ 1000)을 입력받고, 이어서 N개의 정수를 입력받는다. 이후 프로그램은 다음을 계산해야 한다.
단, STL 컨테이너/알고리즘을 일절 사용하지 말 것. (vector, algorithm, map, sort, set 등 금지)
10
3 -5 3 7 2 0 3 12 8 -1
min: -5
max: 12
avg: 3.2
mode: 3
even: 4
odd: 6
abs_avg: 4.4
#include <iostream>
#include <string>
using namespace std;
int main() {
int N;
cin >> N;
int arr[1001];
for (int i = 0; i < N; i++)
{
int inp;
cin >> inp;
arr[i] = inp;
}
int maxV = 0;
int minV = 2 ^ 32;
double sumV = 0.0;
int odd = 0;
int even = 0;
int arrMaxV = 0;
int arrMaxIdx = -1;
double absSumV = 0.0;
for (int i = 0; i < N; i++)
{
int inp = arr[i];
if (maxV < inp)
{
maxV = inp;
}
else if (minV > inp)
{
minV = inp;
}
sumV += inp;
if (inp % 2)
{
odd++;
}
else
{
even++;
}
if (inp < 0)
{
absSumV -= inp;
}
else
{
absSumV += inp;
}
}
int mVCnt = 0;
int mV = 0;
for (int i = 0; i < N; i++) {
int inp = arr[i];
int cnt = 0;
for (int j = 0; j < N; j++) {
if (inp == arr[j])
{
cnt++;
}
}
if (mVCnt < cnt)
{
mVCnt = cnt;
mV = inp;
}
}
cout << fixed;
cout.precision(1);
cout << "min: " << minV << endl;
cout << "max: " << maxV << endl;
cout << "avg: " << sumV / N << endl;
cout << "mode: " << mV << endl;
cout << "even: " << even << endl;
cout << "odd: " << odd << endl;
cout << "abs_avg: " << absSumV / N << endl;
return 0;
}
C++에 내장된 템플릿 기반의 라이브러리
#include <iostream>
#include <vector>
int main() {
std::vector<int> vec;
vec.push_back(5);
vec.push_back(6);
vec.push_back(7);
vec.pop_back();
std::cout << "처음: " << vec.front() << std::endl;
std::cout << "마지막: " << vec.back() << std::endl;
vec.insert(vec.begin() + 1, 15);
for (int elem : vec)
{
std::cout << elem << " ";
}
std::cout << std::endl;
vec.erase(vec.begin() + 1);
for (int elem : vec)
{
std::cout << elem << " ";
}
std::cout << std::endl;
return 0;
}
#include <iostream>
#include <list>
int main() {
std::list<int> lst;
lst.push_back(30);
lst.push_back(31);
lst.push_back(32);
for (int elem : lst)
{
std::cout << elem << " ";
}
std::cout << std::endl;
auto it = lst.begin();
++it;
lst.insert(it, 15);
for (int elem : lst)
{
std::cout << elem << " ";
}
std::cout << std::endl;
return 0;
}
#include <iostream>
#include <deque>
int main() {
std::deque<int> dq;
dq.push_back(1);
dq.push_front(2);
dq.push_back(3);
std::cout << "맨 앞: " << dq.front() << std::endl;
std::cout << "맨 뒤: " << dq.back() << std::endl;
dq.insert(dq.begin() + 1, 4);
std::cout << "두 번째 원소: " << dq[1] << std::endl;
dq.erase(dq.begin() + 1);
std::cout << "두 번째 원소: " << dq.at(1) << std::endl;
dq.pop_front(); // 맨 앞 원소제거
dq.pop_back(); // 맨 뒤 원소제거
return 0;
}