![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbX6srJ%2FbtsejKWkL8j%2Fb7o8bcs1xyhBkG0nQRdZdK%2Fimg.png)
Level 2. [1차] 프렌즈4블록 솔직히 이번 건 좀 어려웠다. 2 * 2 크기를 확인해야 하므로, 2차원 벡터에 1칸씩 여유 공간이 더 필요했다. 2차원 벡터의 원소들을 -Y 방향으로 내려야 하다보니 생각하기가 쉽지 않았다. 그래서 벡터를 돌리면 된다는 걸 깨달았다. 근데 이것도 처음에 블록들을 내리나, 올리나 똑같다고 잘못 생각해 헛수고를 했다. unordered_set에 pair 타입을 쓸 수가 없어, XXXYYY 6자리의 int에 X, Y 정보를 담아 삽입했다. 인덱스를 가져올 때는 다시 나누고 나머지 연산을 쓰면 된다. 또, remove() 함수 때문에도 애를 먹었다. unique() 함수와 같이 지운 원소들을 뒤로 보내는 줄 알았는데, 그게 아니라 뒤에는 그냥 쓰레기 값으로 채워져 있어 f..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDdaRG%2FbtsgE6bWBCa%2FH9uOnQs5hWQRbwK65YHRz0%2Fimg.gif)
이득우의 게임 수학 3차원 트랜스폼의 회전을 담당하는 오일러 각 방식은 장단점이 명확하게 존재한다. 장점 굉장히 직관적이다. 설정할 값도 세 가지 뿐이고, 표준 기전 벡터를 회전축으로 사용하기 때문에 설계가 용이하다. 행렬을 사용하면 최소 9(3x3)개의 실수가 필요하지만, 오일러 각 방식은 3개의 데이터만 있어도 된다. 단점 짐벌 락 현상이 발생할 수 있다. 짐벌 락 오릴러 각 방식으로 회전을 다룰 때, 특정한 상황에서 한 축의 회전이 제한(소실)되는 현상이다. DirectX 짐벌락 현상 ( Gimbal Lock ) 짐벌락 현상 ( Gimbal Lock ) 짐벌( Gimbal ) - 짐벌이란 물체가 회전하도록 중심... blog.naver.com 아래는 짐벌 락에 대해 굉장히 쉽게 잘 설명되어 있는 영..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAnBTF%2Fbtsd0o2su2f%2FBz71JeyDb8bzjylOoQU4S1%2Fimg.png)
vector에 unique(), remove() 함수를 적용해도 실행 전후의 크기는 같다. unique() 함수와 remove() 함수 모두 크기는 동일하지만, 필요 없는 값으로 채워지기 시작하는 반복자 위치를 반환한다. #include #include #include using namespace std; void print(vector& v); int main() { vector v1 = {1, 1, 2, 2, 3, 3, 4, 5, 6}; vector v2(v1); unique(v1.begin(), v1.end()); print(v1); remove(v2.begin(), v2.end(), 2); print(v2); } 출력 1 2 3 4 5 6 4 5 6 ^ 1 1 3 3 4 5 6 5 6 ^
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ7YVz%2FbtsecvFlpLF%2FcrsrzTpb3GbAKQkRp9qOJ0%2Fimg.png)
Advanced Unreal Engine 5 Multiplayer Gameplay Programming 왼발, 오른발에 따라 재생 위치를 달리 하고, 다른 소리 혹은 VFX를 재생할 수 있도록 새로운 열거형을 정의한다. 발자국 소리와 VFX 등을 관리할 FootstepsComponent 액터 컴포넌트를 생성한다. Tick 기능은 사용하지 않을 것이므로 꺼주고, TickComponent() 함수도 주석 처리해준다. Skeletal Mesh 에셋에서 왼발, 오른발 소켓 이름을 확인 후, Footsteps 컴포넌트에 하드코딩한다. 캐릭터에 Footsteps 컴포넌트를 선언할 때, Editable로 설정하고 BP에서 지정해줘도 된다. 열거형이 선언되어 있는 헤더를 포함하고, 발자국 이벤트 시 처리할 함수를 선언..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBMMX4%2Fbtsd0tBR0j8%2FAwoIsbCLIoG4mlk0LAZ460%2Fimg.png)
Advanced Unreal Engine 5 Multiplayer Gameplay Programming 발자국 소리를 만들 때, 이 머티리얼 위에서 어떤 VFX나 소리를 재생할지 알고 싶을 때 사용한다. Physical Material C++ 클래스를 생성한다. 재생할 발자국 소리 정보를 저장하도록 한다. PM_Default 피지컬 머티리얼을 생성한다. 변수로 선언했던 Footstep Sound를 지정할 수 있다. Surface Type을 통해 어떤 피지컬 머티리얼 위에 있는지 알 수 있다. 태그와 유사한 역할을 한다. Project Settings - Physics - Physical Surface에서 Wood 표면을 추가한다. PM_Wood 피지컬 머티리얼을 생성한다. 마찬가지로 Footstep So..
![article thumbnail](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbJ0tOX%2Fbtsd6t102Ef%2FMLRwpJnfkCqDckFocPPXv1%2Fimg.png)
Level 2. 삼각 달팽이 한 방향당 n, n-1, n-2, ..., 1, 0 개수대로 입력하면 된다. 피라미드 모양으로 생각하지 말고, 직각삼각형 모양으로 생각하면 쉽다. 1 2 9 3 10 8 4 5 6 7 #include #include using namespace std; vector solution(int n) { vector answer((n + 1) * n / 2); vector vv(n, vector(n, -1)); int dx[] = {0, 1, -1}; int dy[] = {1, 0, -1}; int num = 1, dcur = 0; int x = 0, y = -1; do { for (int i = 0; i < n; ++i) vv[y += dy[dcur]][x += dx[dcur]] ..