1 00:00:23.799 --> 00:00:26.139 안녕하세요 이영훈 입니다 2 00:00:26.139 --> 00:00:30.559 이번 시간에는 플레이어 애니메이션을 적용해 볼 텐데요 3 00:00:30.559 --> 00:00:36.639 이번 단원에서는 플레이어의 애니메이션을 제어하는 방법에 대해 학습하겠습니다 4 00:00:36.639 --> 00:00:40.240 마켓 플레이스에서 애니메이션을 다운로드하여 5 00:00:40.240 --> 00:00:44.320 리타게팅하고 애니메이션 블루프린트를 적용하여 6 00:00:44.320 --> 00:00:49.439 애니메이션 스테이트 머신을 구성하는 방법에 대해 학습하겠습니다 7 00:00:49.439 --> 00:00:52.279 또한 블랜드 스페이스를 이용해 8 00:00:52.279 --> 00:00:59.200 플레이어의 이동 애니메이션을 부드럽게 처리하는 방법을 학습하겠습니다 9 00:00:59.200 --> 00:01:01.880 이번에는 애니메이션을 해 볼 건데요 10 00:01:01.880 --> 00:01:05.440 주인공 애니메이션을 하기 위해서 11 00:01:05.440 --> 00:01:07.839 언리얼 런처를 열어주세요 12 00:01:07.839 --> 00:01:14.879 그리고 여기 보면 언리얼 엔진에 마켓플레이스가 있습니다 13 00:01:14.879 --> 00:01:20.279 마켓플레이스에서 14 00:01:20.279 --> 00:01:24.680 애니메이션 스타터팩 이라는 게 있는데요 15 00:01:24.680 --> 00:01:26.320 검색을 해보세요 16 00:01:26.320 --> 00:01:28.879 그러면 이렇게 나와 있구요 17 00:01:28.879 --> 00:01:33.040 클릭한 후에 프로젝트에 추가를 해주도록 할게요 18 00:01:33.040 --> 00:01:36.000 모든 프로젝트를 표시합니다 라고 하시고 19 00:01:36.000 --> 00:01:40.000 지금 우리 프로젝트는 cpp-tps 입니다 20 00:01:40.000 --> 00:01:43.080 그런데 5.3 버전은 지원하지 않아요 21 00:01:43.080 --> 00:01:48.480 그래서 이것을 눌러서 5.2 버전으로 바꾼 후에 추가하도록 하겠습니다 22 00:01:51.279 --> 00:01:57.760 용량은 그렇게 크지 않아서 금방 다운로드가 되었구요 23 00:01:57.760 --> 00:01:59.959 프로젝트를 보면은 24 00:01:59.959 --> 00:02:05.320 이렇게 애니메이션 스타터팩 이라는 폴더가 추가된 걸 확인할 수 있죠 25 00:02:05.320 --> 00:02:13.639 그런데 이 녀석은 언리얼4에서 사용되었던 에셋을 기반으로 되어 있는 애니메이션 입니다 26 00:02:13.639 --> 00:02:18.479 그래서 이것을 언리얼5용으로 좀 변경을 해줘야 되는데요 27 00:02:18.479 --> 00:02:21.039 그 작업을 잠깐 해보도록 할게요 28 00:02:21.039 --> 00:02:25.080 자 먼저 애니메이션을 담을 폴더를 하나 만들어 주겠습니다 29 00:02:25.080 --> 00:02:27.800 컨텐츠 밑에다가 30 00:02:27.800 --> 00:02:30.479 new folder에서 31 00:02:30.479 --> 00:02:36.199 animations 라고 하나 만들어 주도록 하겠습니다 32 00:02:36.199 --> 00:02:37.919 이걸 그대로 쓸 건 아니구요 33 00:02:37.919 --> 00:02:44.839 이쪽으로 바꿔서 변형한 후에 이것을 삭제를 할 건데요 34 00:02:44.839 --> 00:02:48.360 여기 보시면은 필터링을 할 수 있는데 35 00:02:48.360 --> 00:02:53.360 여기에서 애니메이션의 애니메이션 36 00:02:53.360 --> 00:02:56.199 시퀀스라는 게 있습니다 37 00:02:56.199 --> 00:02:57.279 여기 있네요 38 00:02:57.279 --> 00:03:01.880 클릭해 주시면 애니메이션 시퀀스들만 딱 나오게 됩니다 39 00:03:01.880 --> 00:03:09.440 언리얼에서는 애니메이션 한 동작을 하나의 애니메이션을 시퀀스라고 불러요 40 00:03:09.440 --> 00:03:13.399 그래서 애니메이션 시퀀스가 이 동작 하나를 말하는 겁니다 41 00:03:13.399 --> 00:03:16.679 이렇게 42 00:03:16.679 --> 00:03:21.199 자 그러면 여기서 컨트롤 a 를 눌러서 전체를 선택하신 후에 43 00:03:21.199 --> 00:03:24.320 그 다음에 여기서 마우스 오른쪽을 눌러보시면 44 00:03:24.320 --> 00:03:29.600 이렇게 리타겟 애니메이션 에셋 이라는 것이 있습니다 45 00:03:29.600 --> 00:03:31.839 이것을 선택해서 디플리케이트 있죠 46 00:03:31.839 --> 00:03:34.960 이거를 눌러주세요 47 00:03:34.960 --> 00:03:37.880 자 그럼 이런 메뉴가 나오는데요 48 00:03:37.880 --> 00:03:43.919 여기에 좌측 상단에 여기 ik 리타게터 부분을 눌러서 49 00:03:43.919 --> 00:03:47.279 우리는 4를 5로 바꿔서 사용할 것이기 때문에 50 00:03:47.279 --> 00:03:50.800 두 번째 메뉴를 선택하겠습니다 51 00:03:50.800 --> 00:03:52.039 자 이렇게 나오죠 52 00:03:52.039 --> 00:03:56.399 그대로 해도 되지만 저는 사용하고 있는 게 퀸이기 때문에 53 00:03:56.399 --> 00:03:59.520 퀸 형태로 바꾼 다음에 진행할게요 54 00:03:59.520 --> 00:04:00.880 자 이렇게 하시고 55 00:04:00.880 --> 00:04:02.919 그 다음에 폴더를 정할 수가 있는데요 56 00:04:02.919 --> 00:04:08.520 체인지 눌러서 애니메이션이라는 폴더에 이렇게 되도록 하고요 57 00:04:08.520 --> 00:04:31.000 그 다음에 리타겟 버튼을 누릅니다 58 00:04:31.000 --> 00:04:33.760 자 그러면 모두 리타겟이 되었고요 59 00:04:33.760 --> 00:04:37.920 일단 저장을 해 주시고요 60 00:04:37.920 --> 00:04:40.359 하나를 열어서 확인해 볼게요 61 00:04:40.359 --> 00:04:43.679 자 이렇게 하면 언리얼 5인 퀸 캐릭터로 62 00:04:43.679 --> 00:04:47.720 이렇게 애니메이션이 되는 것을 확인할 수 있죠 63 00:04:47.720 --> 00:04:50.959 자 그러면 애니메이션 스타트업 팩은 이름이 겹치기 때문에 64 00:04:50.959 --> 00:04:52.079 좀 헷갈릴 수 있으니까 65 00:04:52.079 --> 00:04:54.440 이걸 삭제를 해 줄게요 66 00:04:54.440 --> 00:05:06.799 자 딜리트 키를 눌러서 포스 딜리트 하겠습니다 67 00:05:06.799 --> 00:05:11.279 자 그러면 이제 우리가 사용할 애니메이션을 확보를 했고요 68 00:05:11.279 --> 00:05:15.519 자 이것을 이용해서 애니메이션 동작 처리를 해 보도록 할게요 69 00:05:15.519 --> 00:05:17.160 자 블루프린트 폴더로 와서 70 00:05:17.160 --> 00:05:21.920 주인공 블루프린트 클래스를 열어주십시오 71 00:05:21.920 --> 00:05:25.079 자 그리고 보시면 애니메이션이라는 것은 72 00:05:25.079 --> 00:05:31.600 결국은 이 메시 몸체를 표현하고 있는 메시가 애니메이션을 하게 될 겁니다 73 00:05:31.600 --> 00:05:37.200 메시를 선택하신 후에 디테일을 보시면 74 00:05:37.200 --> 00:05:39.480 애니메이션 이라는 것이 있어요 75 00:05:39.480 --> 00:05:42.320 애니메이션 카테고리에 애니메이션 모드가 있고 76 00:05:42.320 --> 00:05:44.119 클래스 이렇게 되어 있습니다 77 00:05:44.119 --> 00:05:46.480 자 보시면은 블루프린트로 되어 있는데 78 00:05:46.480 --> 00:05:51.679 사실은 S세트로 하시면 그냥 애니메이션을 바로 반영을 할 수가 있습니다 79 00:05:51.679 --> 00:06:02.799 예를 들어서 이 녀석은 아이들 자세를 할 것이기 때문에 80 00:06:02.799 --> 00:06:09.959 자 이것을 선택하면 이렇게 총을 들고 있는 자세가 나오게 되죠 81 00:06:09.959 --> 00:06:11.720 자 이렇게 제어를 할 수도 있어요 82 00:06:11.720 --> 00:06:14.799 한 땀 한 땀 모든 애니메이션을 그 상황에 맞는 걸로 83 00:06:14.799 --> 00:06:17.799 이렇게 교체하는 형태로 해서 제작을 해도 되지만 84 00:06:17.799 --> 00:06:20.760 이것은 좀 효율적이지 않겠죠 85 00:06:20.760 --> 00:06:27.040 그래서 이거보다는 블루프린트 방식으로 제어하는 형태로 진행을 해보도록 할 거에요 86 00:06:27.040 --> 00:06:33.519 자 그러면 애니메이션 블루프린트를 하나 만들어서 여기다가 배치를 하겠습니다 87 00:06:33.519 --> 00:06:36.880 자 블루프린트 이니까 유니콘도에다가 제작을 할게요 88 00:06:36.880 --> 00:06:41.320 마우스 오른쪽을 눌러보시면 애니메이션이 있죠 89 00:06:41.320 --> 00:06:43.720 애니메이션에 애니메이션 블루프린트 라는 게 있습니다 90 00:06:43.720 --> 00:06:45.839 이것을 클릭해서 만들어 줄게요 91 00:06:45.839 --> 00:06:49.559 자 그러면 뼈대를 무엇으로 할 건지 나옵니다 92 00:06:49.559 --> 00:06:53.880 자 여기 보시면은 세번째 SK마네킹 이라고 있는데 93 00:06:53.880 --> 00:06:58.760 이것이 지금 우리가 사용하고 있는 캐릭터의 본이에요 94 00:06:58.760 --> 00:06:59.920 스켈레톤 입니다 95 00:06:59.920 --> 00:07:02.320 자 이것을 선택을 해주겠습니다 96 00:07:02.320 --> 00:07:04.959 그리고 크리에이트 합니다 97 00:07:04.959 --> 00:07:10.519 자 이름은 애니메이션 블루프린트니까 ab 언더가 이렇게 할게요 98 00:07:10.519 --> 00:07:14.200 자 이건 TPS 클레일 거니까요 99 00:07:14.200 --> 00:07:18.920 같은 이름으로 이렇게 작성을 하겠습니다 100 00:07:18.920 --> 00:07:22.519 abp 라고 할까요 애니메이션 블루프린트니까 101 00:07:22.519 --> 00:07:25.000 자 abp 언더가 이렇게 하겠습니다 102 00:07:25.000 --> 00:07:29.920 자 그리고 이것을 더블 클릭하고 그러면은 이렇게 생겼는데요 103 00:07:29.920 --> 00:07:32.799 자 이 구조를 보시면은 104 00:07:32.799 --> 00:07:35.720 좌측에 마이 블루프린트가 있고 105 00:07:35.720 --> 00:07:37.760 여기에 이벤트 그래프라는 곳이 있습니다 106 00:07:37.760 --> 00:07:39.760 여기를 더블 클릭해서 가보면 107 00:07:39.760 --> 00:07:44.160 자 우리가 계속 봤었던 비주얼 스크립팅을 할 수 있는 공간이구요 108 00:07:44.200 --> 00:07:51.119 자 그리고 애닝 그래프는 애니메이션 시퀀스들이 배치되어지는 공간이라고 보시면 됩니다 109 00:07:51.119 --> 00:07:55.160 자 여기에 들어가 애니메이션은 여기 우측에 보시면 110 00:07:55.160 --> 00:08:00.519 에셋 브라우저가 있는데 여기 보시면 여기 들어갈 수 있는 목록이 이렇게 보입니다 111 00:08:00.519 --> 00:08:05.079 자 여기서 저는 아이들 자세를 일단 넣어 볼게요 112 00:08:05.079 --> 00:08:11.279 자 아이들, 라이플, 아이언사이트를 기본 동작으로 하도록 하겠습니다 113 00:08:11.279 --> 00:08:13.079 자 이렇게 연결해 주시면 되구요 114 00:08:13.079 --> 00:08:14.480 자 여기 보시면 컴파일이 있습니다 115 00:08:14.480 --> 00:08:19.440 이걸 눌러 주시거나 상단에 있는 걸 눌러 주시면 컴파일이 되구요 116 00:08:19.440 --> 00:08:21.359 어 제가 잘못 걸었네요 117 00:08:21.359 --> 00:08:25.839 자 이걸로 118 00:08:25.839 --> 00:08:29.640 네 이렇게 해서 컴파일 해보시면 이 자세를 하게 됩니다 119 00:08:29.640 --> 00:08:32.599 자 저장해 주시고 120 00:08:32.599 --> 00:08:38.080 그 다음에 주인공한테 이 애니메이션 블루프린트를 지정해 주도록 할게요 121 00:08:38.080 --> 00:08:45.200 자 여기서 눌러서 ABP TPS 플레이어 이렇게 해서 반영을 하시면 122 00:08:45.200 --> 00:08:50.960 이렇게 기본 동작을 하는 걸 볼 수가 있습니다 123 00:08:50.960 --> 00:08:53.200 굉장히 간단하게 구성이 되어 있는데요 124 00:08:53.200 --> 00:08:59.159 자 이것을 이용해서 우리가 애니메이션을 이어서 해 보도록 하겠습니다 125 00:08:59.159 --> 00:09:04.719 자 다시 애니메이션 블루프린트로 이동할게요 126 00:09:04.719 --> 00:09:10.280 자 이것은 어 굉장히 애니메이션 하나만 이렇게 반영한 건데 127 00:09:10.280 --> 00:09:14.640 이렇게 하지 않고 상태 머신을 이용해서 제어해 보도록 할게요 128 00:09:14.640 --> 00:09:17.440 자 여기서 마우스 오른쪽 버튼을 누르시면 129 00:09:17.440 --> 00:09:18.719 자 이런 메뉴가 나오는데 130 00:09:18.719 --> 00:09:23.359 여기에서 state machine이라고 하시면 이렇게 있습니다 131 00:09:23.359 --> 00:09:26.440 이걸 클릭해서 이렇게 만들어 줄게요 132 00:09:26.440 --> 00:09:30.080 자 이거는 state, 뭐 FSM이라고 할까요? 133 00:09:30.080 --> 00:09:35.880 이거는 이동할 거니까 moveFSM 이라는 이름으로 지어 주도록 하고요 134 00:09:35.880 --> 00:09:38.760 자 그리고 이거는 삭제를 하겠습니다 135 00:09:38.760 --> 00:09:44.719 자 그리고 여기에서 이제 결과가 나오니까 이렇게 연결해 주도록 하고요 136 00:09:44.719 --> 00:09:49.400 지금은 이제 아무것도 없으니까 그냥 이런 A 포즈를 하게 되는데 137 00:09:49.400 --> 00:09:55.359 더블 클릭하고 들어가서 여기다가 아까 전에 기본 자세를 이렇게 꺼내시고 138 00:09:55.359 --> 00:09:58.119 자 이렇게 연결해 주도록 할게요 139 00:09:58.119 --> 00:10:00.359 연결하실 때는 여기 가운데 넣는 것이 아니라 140 00:10:00.359 --> 00:10:05.760 여기 바깥에 하얀색 테두리 부분에 마우스를 대시면은 이렇게 연결할 수 있습니다 141 00:10:05.760 --> 00:10:09.359 자 그러면 우리가 상태 머신에 대해서 배웠는데 142 00:10:09.359 --> 00:10:14.400 애니메이션은 기본적으로 FSM 기반으로 제어를 할 수 있다고 했죠 143 00:10:14.400 --> 00:10:16.239 자 이것이 바로 그 내용이고요 144 00:10:16.239 --> 00:10:19.000 자 이거 하나를 이제 상태라고 보시면 되고요 145 00:10:19.000 --> 00:10:21.320 이것은 전이한다 이런 뜻입니다 146 00:10:21.320 --> 00:10:23.799 자 엔트리는 이제 시작이라는 뜻이고요 147 00:10:23.799 --> 00:10:29.719 시작하면은 이쪽으로 전이가 되어서 이 애니메이션을 하게 되는 그런 구조입니다 148 00:10:29.719 --> 00:10:32.599 자 그러면 이렇게 동작을 하게 되고요 149 00:10:32.599 --> 00:10:36.919 자 이것을 제어하기 위해서 150 00:10:36.919 --> 00:10:39.880 애니메이션을 좀 더 추가를 해 볼게요 151 00:10:39.880 --> 00:10:45.320 여기 보면은 걷는 동작이 있는데 walk라고 해 볼게요 152 00:10:45.320 --> 00:10:49.280 자 그러면은 이렇게 워크가 네 가지가 있습니다 153 00:10:49.280 --> 00:10:55.599 아이언 사이트에서 앞으로 뒤로 왼쪽 오른쪽 이런 네 가지의 걷는 동작이 있는데 154 00:10:55.599 --> 00:10:58.239 이것을 이용해서 처리를 해 볼게요 155 00:10:58.239 --> 00:11:00.719 일단 앞과 뒤쪽만 한번 해 볼까요 156 00:11:00.719 --> 00:11:05.000 자 Forward와 Backward 두 가지를 놓을게요 157 00:11:12.840 --> 00:11:16.159 자 일단은 그냥 앞으로 가는 것만 먼저 해 볼까요 158 00:11:16.159 --> 00:11:19.239 자 여기에서 마우스를 이렇게 올리시고 하얗게 되죠 159 00:11:19.239 --> 00:11:22.719 그럼 이 상태에서 마우스 왼쪽 버튼을 눌러서 이렇게 당기시면 160 00:11:22.719 --> 00:11:25.080 이렇게 전이할 수 있는 화살표가 나옵니다 161 00:11:25.080 --> 00:11:26.840 그 이쪽으로 이렇게 보내고요 162 00:11:26.840 --> 00:11:29.640 자 반대로 돌아도 돌아올 수도 있어야겠죠 163 00:11:29.640 --> 00:11:34.919 자 이렇게 처리를 해 볼게요 164 00:11:34.919 --> 00:11:40.159 자 그럼 이거를 처리하기 위해서 우리 어떤 이 조건을 만들어 줘야 되거든요 165 00:11:40.159 --> 00:11:42.799 저기 이렇게 동그랗게 보이는 것이 바로 조건입니다 166 00:11:42.799 --> 00:11:46.039 이 조건이 성립을 하면 이쪽으로 전의를 하는 거고요 167 00:11:46.039 --> 00:11:48.440 이렇게 해 보도록 할게요 168 00:11:48.440 --> 00:11:51.840 여기 보시면 변수를 만들 수 있습니다 169 00:11:51.840 --> 00:11:53.239 자 변수를 하나 만들어 볼게요 170 00:11:53.239 --> 00:11:59.719 이렇게 해서 스피드라는 변수를 만들겠습니다 171 00:11:59.719 --> 00:12:04.919 자 그리고 불이 아니라 플루트 타입으로 할 거고요 172 00:12:04.919 --> 00:12:09.359 자 그래서 이건 어떻게 할 거냐면 이런 개념으로 할 거예요 173 00:12:09.359 --> 00:12:15.520 우리가 플레이어를 조작을 해서 W키나 이렇게 누르면 앞으로 가잖아요 174 00:12:15.520 --> 00:12:22.039 자 옆에서 본다면 플레이어가 이렇게 있으면 W키를 누르면 앞으로 이렇게 가게 될 겁니다 175 00:12:22.039 --> 00:12:27.359 자 그러면 이 녀석은 얼마나 빠르게 가냐면 176 00:12:27.359 --> 00:12:28.880 플레이어를 잠깐 보고요 177 00:12:28.880 --> 00:12:35.440 여기에 캐릭터 보그먼트 보시면 워크에 대한 내용이 있는데요 178 00:12:35.440 --> 00:12:37.520 여기에 움직임의 크기는 여기 있습니다 179 00:12:37.520 --> 00:12:39.599 워크 스피드라는 값이 있고 180 00:12:39.599 --> 00:12:43.159 초당 6m를 이동하게 되어 있습니다 181 00:12:43.159 --> 00:12:47.559 자 그러니까 저걸 기반으로 얘기한다면 182 00:12:47.559 --> 00:12:51.880 벨로시티가 생기는데 W키를 누르면 속도가 만들어지잖아요 183 00:12:51.880 --> 00:12:54.599 그리고 벨로시티가 있는데 184 00:12:54.599 --> 00:12:57.960 그곳의 방향은 앞쪽이고 185 00:12:57.960 --> 00:13:03.520 그 다음에 스피드는 워크 스피드가 되고 600이 되겠죠 186 00:13:03.520 --> 00:13:06.239 이렇게 이런 구조인데요 187 00:13:06.239 --> 00:13:11.880 저는 스피드라는 것은 방향을 제거하고 스피드 값만 그대로 가져오겠다는 거예요 188 00:13:11.880 --> 00:13:18.000 그리고 스피드는 이 앞쪽에 대한 크기만 가져온다는 뜻이 되는 겁니다 189 00:13:18.000 --> 00:13:22.440 자 이렇게 이름을 지어주도록 할게요 190 00:13:22.440 --> 00:13:28.599 다시 돌아와서 스피드가 조건을 보면 가만히 있을 때는 스피드가 0이겠죠 191 00:13:28.599 --> 00:13:33.280 그리고 걸을 수 있다는 것은 스피드가 0보다 커졌다 이런 개념인데 192 00:13:33.280 --> 00:13:39.799 근데 사실 부동소점 연산이라고 해서 지금 플로트 타입을 사용할 건데요 193 00:13:39.799 --> 00:13:45.280 자 플로트 타입은 부동소점 연산은 사실 오차가 좀 있습니다 194 00:13:45.280 --> 00:13:46.280 예를 들어 이런 거죠 195 00:13:46.280 --> 00:13:50.640 1이라고 이렇게 우리가 지정을 해주더라도 내부적으로 계산하다 보면 196 00:13:50.640 --> 00:13:54.559 0.99999 이렇게 될 수도 있어요 197 00:13:54.559 --> 00:13:58.159 이게 1과 같다 이렇게 되어버릴 수도 있거든요 198 00:13:58.159 --> 00:14:05.400 자 이러한 오차를 가지고 있는 게 플로트 타입입니다 199 00:14:05.400 --> 00:14:14.919 자 이거에 대해서 궁금하시면 부동소점 연산을 한번 검색을 해보십시오 200 00:14:14.919 --> 00:14:18.960 오차에 대해서 한번 보시면 되고요 201 00:14:18.960 --> 00:14:21.719 자 그렇기 때문에 이런 식으로 할 겁니다 202 00:14:21.719 --> 00:14:27.400 스피드가 이 스피드 값이 0보다 크다 이렇게 하는 것보다는 203 00:14:27.400 --> 00:14:32.280 한 0.1 정도를 그러니까 구간을 만들 건데 이렇게 이렇게 보면은 204 00:14:32.280 --> 00:14:35.840 여기가 0이잖아요 그리고 여기가 1이라면 205 00:14:35.840 --> 00:14:39.359 사실 여기는 뭐 600 뭐 플러스 600 이렇게 되겠죠 206 00:14:39.359 --> 00:14:40.840 스피드가 600이니까 207 00:14:40.840 --> 00:14:44.719 자 그러면 내가 가만히 서 있다는 거는 0이라기 보다는 208 00:14:44.719 --> 00:14:46.760 여기 정도의 구간을 주는 거예요 209 00:14:46.760 --> 00:14:49.440 그 이거를 저는 0.1로 주고 싶은데 210 00:14:49.440 --> 00:14:55.200 0.1보다 작거나 마이너스 0.1보다 크면 그냥 서 있는 거다 211 00:14:55.200 --> 00:14:57.599 이렇게 주고 싶어요 212 00:14:57.599 --> 00:15:01.080 그러면 이런 오차는 이 안에서 약간의 계산이 되기 때문에 213 00:15:01.479 --> 00:15:03.679 무시하고 진행할 수가 있겠죠 214 00:15:03.679 --> 00:15:07.919 자 그래서 여기다가 조건을 줄 건데 215 00:15:07.919 --> 00:15:10.599 이걸 더블 클릭하면 이렇게 들어갈 수가 있습니다 216 00:15:10.599 --> 00:15:13.760 그럼 여기에서 스피드를 꺼낸 다음에 217 00:15:13.760 --> 00:15:16.960 자 이 스피드가 크다면 218 00:15:16.960 --> 00:15:21.559 그레이터 0.1보다 크다면 219 00:15:21.559 --> 00:15:26.400 그러면은 앞으로 걷는 거다 라고 지정을 해 주도록 하겠습니다 220 00:15:26.400 --> 00:15:27.520 컴파일 하고요 221 00:15:27.520 --> 00:15:31.080 다시 돌아오시고 이쪽으로 누르시면은 돌아올 수 있겠죠 222 00:15:31.080 --> 00:15:33.679 자 반대로 돌아오는 것은 더블 클릭하고 223 00:15:33.679 --> 00:15:36.559 스피드가 0.1보다 작아졌다 224 00:15:36.559 --> 00:15:40.080 그러면은 멈춘 거다 라고 저는 이해하고 싶어요 225 00:15:40.080 --> 00:15:49.919 자 이렇게 해서 작다 less라고 하고 0.1이라고 하겠습니다 226 00:15:49.919 --> 00:15:52.479 자 이렇게 지정을 해 주면 되겠죠 227 00:15:52.479 --> 00:15:56.080 자 그 다음에 스피드를 이제 실제로 넣어야 되는데 228 00:15:56.080 --> 00:15:58.359 여기에 이제 보면은 프리뷰가 있어요 229 00:15:58.359 --> 00:16:01.280 이것을 이용하면 테스트를 좀 해 볼 수가 있습니다 230 00:16:01.280 --> 00:16:02.760 자 여기에 스피드가 나와 있죠 231 00:16:02.760 --> 00:16:06.200 여기다가 제가 600이라고 적으면 앞으로 걷죠 232 00:16:06.200 --> 00:16:09.119 다시 0이라고 쓰면 가만히 서고요 233 00:16:09.119 --> 00:16:14.640 근데 애니메이션을 보니까 아이딜 자세는 계속해서 반복적으로 하는 것 같은데 234 00:16:14.640 --> 00:16:19.640 제가 600 이렇게 적었을 때 걷는 것은 걷다 만해요 235 00:16:19.640 --> 00:16:22.239 자 이거는 반복하지 않아서 그런 것 같아요 236 00:16:22.239 --> 00:16:25.640 자 그래서 저것을 처리를 좀 해 주도록 할게요 237 00:16:25.640 --> 00:16:29.719 자 보시면은 이거를 더블 클릭해서 보면은 238 00:16:29.719 --> 00:16:38.679 이 애니메이션은 여기에 디테일에 보면 하단에 보면 여기 루프 애니메이션이라는 게 있습니다 239 00:16:38.679 --> 00:16:41.119 이것을 체크를 해 줄게요 240 00:16:41.119 --> 00:16:43.239 자 아이들도 그냥 해 주도록 하겠습니다 241 00:16:43.239 --> 00:16:45.919 이렇게 하고 그 다음에 앞으로 걷는 거 있죠 242 00:16:45.919 --> 00:16:53.840 이것도 선택한 다음에 루프 애니메이션을 체크를 해 주겠습니다 243 00:16:53.840 --> 00:16:57.760 자 그러면 이제 600이라는 값을 넣어 주면 계속 걸어 가죠 244 00:16:57.760 --> 00:17:01.080 반복해서 이런 식으로 설정을 할 수가 있고요 245 00:17:01.080 --> 00:17:02.479 자 반대쪽도 한번 해 볼까요 246 00:17:02.479 --> 00:17:05.760 그러면 여기도 이렇게 화상표를 만들어 주시고 247 00:17:05.760 --> 00:17:11.319 전의하는 것들을 그 다음에 이제 가만히 있다가 뒤로 걸을 수 있는 조건은 248 00:17:11.319 --> 00:17:17.319 스피드가 마이너스 0.1 보다 작아졌을 때 그렇게 할 겁니다 249 00:17:17.319 --> 00:17:20.640 그래서 작다 음수로 갈까요 250 00:17:20.640 --> 00:17:28.839 마이너스 0.1 보다 작다면 이제 뒤로 걷는 거다 이렇게 이해를 할 거고요 251 00:17:28.839 --> 00:17:35.680 다시 반대로 돌아오는 것은 얘가 마이너스 0.1 보다 커졌다 그렇게 이해하면 될 것 같습니다 252 00:17:35.680 --> 00:17:39.079 스피드가 커졌어요 이렇게 253 00:17:39.079 --> 00:17:45.680 그레이터 마이너스 0.1 보다 커졌다면 이제 제자리에 서는 거다 254 00:17:45.680 --> 00:17:48.280 자 이런 식의 어떤 구성을 해 보겠습니다 255 00:17:48.280 --> 00:17:52.680 자 그러면 이게 스피드를 제가 0 이라고 하면 멈추고요 256 00:17:52.680 --> 00:17:58.359 1 이라고 하면 앞으로 걷죠 그리고 마이너스 1 이라고 하면 저렇게 뒤로 걷습니다 257 00:17:58.359 --> 00:18:02.280 자 이렇게 제어를 할 수가 있고요 이것도 애니메이션을 수정을 해 줘야 겠네요 258 00:18:02.280 --> 00:18:06.040 자 이렇게 해서 259 00:18:06.040 --> 00:18:07.959 네 아이고 잘못 눌렀습니다 260 00:18:07.959 --> 00:18:13.760 자 이걸 눌러서 여기 루프를 체크를 해 줄게요 261 00:18:13.760 --> 00:18:16.400 자 프리뷰는 말 그대로 그냥 미리 보기 이고요 262 00:18:16.400 --> 00:18:21.640 자 이 값을 수정한다고 해서 여기 있는 스피드 값이 이 값이 되는 건 아닙니다 263 00:18:21.640 --> 00:18:25.920 자 그리고요 실제로 이 스피드 값을 이제 처리를 해야 될 텐데 264 00:18:25.920 --> 00:18:30.439 일단은 블루프린트 상에서 먼저 제어를 해 보도록 할게요 265 00:18:30.439 --> 00:18:34.319 자 여기 이벤트 그래프로 보시면 이렇게 되어 있습니다 266 00:18:34.319 --> 00:18:36.839 여기도 보면은 Owner라는 이름을 쓰고 있죠 267 00:18:36.839 --> 00:18:42.479 이게 뭐 이 Owner라는 것은 이 컴포넌트를 소유하고 있는 것이라고 할 수 있는데 268 00:18:42.479 --> 00:18:46.079 어 게다가 이것은 컴포넌트는 아니고 애니메이션 269 00:18:46.079 --> 00:18:48.880 어 애님 인스턴스라고 해요 여기 보시면 270 00:18:48.880 --> 00:18:52.760 어 부모 클래스가 애님 인스턴스라고 되어 있죠 271 00:18:52.760 --> 00:18:57.880 자 그래서 애님 인스턴스는 결국은 누가 되냐면 메시가 가지고 있고요 272 00:18:57.880 --> 00:19:00.880 메시 컴포넌트가 가지고 있고요 273 00:19:00.880 --> 00:19:07.119 여기 있죠 자 메시 컴포넌트 가지고 있고 이 컴포넌트를 이 주인공이 가지고 있는 개념입니다 274 00:19:07.119 --> 00:19:10.599 자 그러면 여기 보면 어 폰 오너라고 되어 있어요 275 00:19:10.599 --> 00:19:15.359 그래서 이것을 가지고 있는 메시 컴포넌트를 말하는 것이 아니라 276 00:19:15.359 --> 00:19:21.959 어 이 애니메이션을 소유하고 있는 메시를 소유하고 있는 폰을 얘기하는 겁니다 277 00:19:21.959 --> 00:19:25.680 자 그래서 가져온 다음에 278 00:19:25.680 --> 00:19:28.880 어 일단은 이것이 있는지 한번 검증을 해야겠죠 279 00:19:28.880 --> 00:19:30.760 이게 없을 수도 있잖아요 280 00:19:30.760 --> 00:19:34.000 왜냐하면 언리얼 엔진에서는 이것을 처리하기 위해서 281 00:19:34.000 --> 00:19:38.359 이 에디터 상에서도 이거를 만들어서 이제 구성을 하거든요 282 00:19:38.359 --> 00:19:40.599 그러다 보니까 여기서 오류가 날 수도 있습니다 283 00:19:40.599 --> 00:19:46.119 그래서 이것을 이렇게 해서 isValid라는 걸로 체크를 해줄게요 284 00:19:46.119 --> 00:19:47.599 이걸로 하시면 되고요 285 00:19:47.599 --> 00:19:50.400 자 이거는 널체크와 동일하다고 생각하시면 됩니다 286 00:19:50.400 --> 00:19:59.199 정확하게 말하면 널체크보다 조금 더 강력하게 수면까지 체크를 해주는 개념이긴 한데 287 00:19:59.199 --> 00:20:01.280 자 어쨌든 이걸로 하시면 됩니다 288 00:20:01.280 --> 00:20:03.319 자 이렇게 해서 체크를 해주고요 289 00:20:03.319 --> 00:20:08.599 Valid라면 유효하다면 이걸 사용하면 되겠죠 290 00:20:08.599 --> 00:20:11.239 이게 폰 오너에서 Velocity를 가져올 수 있어요 291 00:20:11.239 --> 00:20:15.319 Get Velocity 이렇게요 292 00:20:15.319 --> 00:20:19.000 자 그럼 여기에 있는 값을 스피드에다가 이렇게 넣어 보도록 할 건데요 293 00:20:19.000 --> 00:20:20.560 Set 해주겠습니다 294 00:20:20.560 --> 00:20:28.560 일단은 여기에서 Length라고 하면 295 00:20:28.560 --> 00:20:32.640 Vector Length 이렇게 가져오면 이 벡터의 크기를 가지고 올 수가 있고요 296 00:20:32.640 --> 00:20:35.280 이걸 일단 스피드로 넣어 볼까요 297 00:20:35.280 --> 00:20:39.920 자 이렇게 하고 컴파일 합니다 298 00:20:39.920 --> 00:20:43.079 자 그러면 여기서 실행해서 움직여 보도록 할게요 299 00:20:43.079 --> 00:20:44.520 그러면 걸어가죠 300 00:20:44.520 --> 00:20:49.920 뒤로 가도 걸어가는 것처럼 보입니다 301 00:20:49.920 --> 00:20:59.920 이런 식으로 되고요 302 00:20:59.920 --> 00:21:05.560 사실 이거를 얘기할 때 이렇게 스피드를 그냥 가지고 오긴 했는데 303 00:21:05.560 --> 00:21:08.040 이거는 정확하게 한 건 아닙니다 304 00:21:08.040 --> 00:21:13.239 왜냐하면 스피드를 가져온다는 것은 Velocity의 스피드를 가져왔기 때문에 305 00:21:13.239 --> 00:21:18.000 이거를 공중에서 본다면 이런 느낌인 거예요 306 00:21:18.000 --> 00:21:19.920 자 우리가 팔 방향으로 움직일 수 있습니다 307 00:21:19.920 --> 00:21:26.640 WASD를 키를 눌러서 보면은 플레이어가 이렇게 이쪽이 앞쪽이라면 308 00:21:26.640 --> 00:21:29.839 이렇게 가면은 이제 W만 누른 거고 309 00:21:29.839 --> 00:21:33.439 이렇게 가면은 D만 누른 거죠 310 00:21:33.439 --> 00:21:38.520 자 그럼 이렇게 가면은 W와 D를 동시에 누른 그런 개념인 거죠 311 00:21:38.520 --> 00:21:41.280 자 만약에 이렇게 동시에 이렇게 눌렀어요 312 00:21:41.280 --> 00:21:45.199 그러면은 이것의 스피드는 몇일까요 313 00:21:45.199 --> 00:21:46.880 600이라고 나올 수 있죠 314 00:21:46.880 --> 00:21:51.280 근데 이제 조금 애매할 수가 있습니다 315 00:21:51.280 --> 00:21:55.640 그래서 정확하게 앞쪽에 대한 스피드값 316 00:21:55.640 --> 00:22:03.000 그 다음에 옆으로 가는 어떤 값 이런 거를 따로따로 분리해서 가지고 싶어요 317 00:22:03.000 --> 00:22:05.359 자 무슨 말이냐면 318 00:22:05.359 --> 00:22:06.199 자 보세요 319 00:22:06.199 --> 00:22:11.640 여기서 실행했을 때 제가 오른쪽으로 움직여도 걷는 애니메이션을 한다는 거죠 320 00:22:11.640 --> 00:22:13.760 왼쪽으로 움직여도 321 00:22:13.760 --> 00:22:16.800 자 앞으로 갈 때 뒤로 갈 때 오른쪽 왼쪽 322 00:22:16.800 --> 00:22:20.839 다 Velocity의 값이 있기 때문에 이렇게 되는 거죠 323 00:22:20.839 --> 00:22:24.000 자 지금은 당연히 앞쪽 뒤쪽으로만 움직이니까 324 00:22:24.000 --> 00:22:26.119 이렇게 해도 크게 문제는 없습니다 325 00:22:26.119 --> 00:22:30.520 그런데 저희가 이제 하려고 하는 최종적인 형태는 326 00:22:30.520 --> 00:22:33.079 좌우의 이동도 애니메이션을 넣을 거예요 327 00:22:33.079 --> 00:22:40.280 그러면은 앞뒤만이 아니라 좌우에 대한 그 속도값도 우리가 알 필요가 있죠 328 00:22:40.280 --> 00:22:43.640 자 그래서 이것을 좀 분리를 할 건데요 329 00:22:43.640 --> 00:22:47.000 그래서 여기다가 일단 변수를 하나 더 만들고요 330 00:22:47.000 --> 00:22:50.479 이거는 디렉션이라고 합니다 331 00:22:50.479 --> 00:22:53.439 자 이렇게 해서 스피드 디렉션 이렇게 두 개를 만들 거고 332 00:22:53.439 --> 00:22:58.760 이것의 의미는 이건 앞뒤로 움직이는 움직임의 크기를 담는 변수고 333 00:22:58.760 --> 00:23:01.560 이거는 좌우로 움직일 때 크기를 담는 변수 334 00:23:01.560 --> 00:23:06.000 이렇게 이해를 하시면 되겠습니다 335 00:23:06.000 --> 00:23:11.319 자 그럼 Velocity에서 어떻게 하면 그 성분을 뜯어낼 수 있을까요 336 00:23:11.319 --> 00:23:13.560 그거에 대해서 잠깐 배워보도록 할 건데요 337 00:23:13.560 --> 00:23:18.359 자 그거는 이제 벡터의 곱을 이용해서 할 수가 있습니다 338 00:23:18.359 --> 00:23:22.319 그 곱 중에서도 내적을 이용해서 처리를 할 수가 있어요 339 00:23:22.319 --> 00:23:28.439 자 어떤 거냐면 벡터에서 곱을 쓸 건데 340 00:23:28.439 --> 00:23:32.520 곱은 크게 보면은 외적과 내적이 있습니다 341 00:23:32.520 --> 00:23:34.439 이번엔 내적을 해볼 건데요 342 00:23:34.439 --> 00:23:39.760 내적이라는 것은 닷이죠 이렇게 닷이라고 표현합니다 343 00:23:39.760 --> 00:23:46.040 닷 프로덕트에요 344 00:23:46.040 --> 00:23:48.239 닷 프로덕트입니다 345 00:23:48.239 --> 00:23:51.040 자 그러면 닷을 할 건데 346 00:23:51.040 --> 00:23:54.199 닷은 이렇게 해요 이렇게 어떤 벡터가 이렇게 있고요 347 00:23:54.199 --> 00:23:56.239 두 개가 이렇게 있다고 해보죠 348 00:23:56.239 --> 00:24:00.760 자 그러면 벡터의 닷은 이렇게 씁니다 349 00:24:00.760 --> 00:24:03.839 이렇게 해서 벡터 이렇게 쓰고요 350 00:24:03.839 --> 00:24:08.839 이거는 다시 표현한다면 여기 벡터니까 a,b,c가 있겠죠 351 00:24:08.839 --> 00:24:10.400 x,y,z가 있겠죠 352 00:24:10.400 --> 00:24:15.439 자 그러면 a에 x가 있고 곱하기 b에 x를 합니다 353 00:24:15.439 --> 00:24:20.920 그리고 더하기 a에 y와 b에 y를 곱해요 354 00:24:20.920 --> 00:24:27.520 그리고 또 더하고 a에 z와 b에 z를 곱합니다 355 00:24:27.520 --> 00:24:30.280 자 그러면 이거는 실제로 플로트 값이죠 356 00:24:30.280 --> 00:24:34.920 그럼 결과적으로 이거의 값은 플로트 값이 하나 나와요 357 00:24:34.920 --> 00:24:38.280 자 이게 이제 닷 프로젝트고요 358 00:24:38.280 --> 00:24:40.560 이걸 했을 때 뭐 이런 개념이죠 359 00:24:40.560 --> 00:24:44.040 만약에 이게 a고 이게 b라고 해볼게요 360 00:24:44.040 --> 00:24:46.599 그러면은 지금 이거는 제가 약간 삐뚤어졌지만 361 00:24:46.599 --> 00:24:50.800 그냥 바로 b라고 한다면 0,0,1이죠 362 00:24:50.800 --> 00:24:53.800 얘도 0,0,1입니다 363 00:24:53.800 --> 00:24:56.239 x,y,z 순서로 이렇게요 364 00:24:56.239 --> 00:25:01.920 그러면 여기다 대입을 해보면 얘는 0,0,0,0,1 이렇게 돼요 365 00:25:01.920 --> 00:25:05.719 그쵸 그러면은 이것은 결과가 뭘까요 366 00:25:05.719 --> 00:25:10.439 이렇게 곱하면 당연히 1이죠 367 00:25:10.439 --> 00:25:16.119 그래서 같은 방향 벡터는 결과가 1입니다 368 00:25:16.119 --> 00:25:17.839 자 그러면 이렇게 생긴 벡터도 볼까요 369 00:25:17.839 --> 00:25:21.239 이렇게 생긴 벡터하고 이렇게 생긴 벡터를 닷을 해볼게요 370 00:25:21.239 --> 00:25:24.199 자 이게 a고 이게 b라고 했을 때 371 00:25:24.199 --> 00:25:29.040 자 그러면 0,0,1과 372 00:25:29.040 --> 00:25:33.319 그 다음에 이거는 0,1,0이죠 373 00:25:33.319 --> 00:25:35.239 y가 1이니까 그쵸 374 00:25:35.239 --> 00:25:44.239 자 그러면은 0 곱하기 1 곱하기 0 이렇게 되겠죠 375 00:25:44.239 --> 00:25:45.119 자 얘는 몇이에요 376 00:25:45.119 --> 00:25:48.560 0 곱하기 0 곱하기 0 아니 0 더하기 0 더하기 0이죠 377 00:25:48.560 --> 00:25:49.920 그래서 0입니다 378 00:25:49.920 --> 00:25:52.760 그래서 이렇게 수직인 거 이렇게 직각이에요 379 00:25:52.760 --> 00:25:57.160 수직인 벡터를 두 개를 닷을 하면 얘는 0입니다 380 00:25:57.160 --> 00:26:00.640 제가 말하는 0이고 1인 이유는 길이가 1인 경우에 381 00:26:00.640 --> 00:26:03.280 이렇게 벡터의 길이가 1인 경우에 382 00:26:03.280 --> 00:26:04.640 자 마지막으로 하나 더 있죠 383 00:26:04.640 --> 00:26:09.920 이렇게 반대쪽 이렇게 이렇게 이렇게 180도로 반대쪽인 거 384 00:26:09.920 --> 00:26:14.680 완전히 반대쪽인 거는 얘는 0,0,-1이죠 385 00:26:14.680 --> 00:26:16.880 얘는 0,0,1이고요 386 00:26:16.880 --> 00:26:21.520 자 그럼 여기다 대입해 보면 0,0,1이고요 387 00:26:21.520 --> 00:26:24.160 0,0,-1입니다 388 00:26:24.160 --> 00:26:26.839 얘를 곱하는 거예요 389 00:26:26.839 --> 00:26:27.839 다 더합니다 390 00:26:27.839 --> 00:26:31.599 그러면은 얘는 0이고 0이고 얘는 마이너스 1이죠 391 00:26:31.599 --> 00:26:33.359 그래서 마이너스 1입니다 392 00:26:33.359 --> 00:26:35.319 자 여기서 같은 방향이면 1이 나오고요 393 00:26:35.319 --> 00:26:38.520 닷을 했을 때 이렇게 수직이면 0이 나오고 394 00:26:38.520 --> 00:26:42.160 어 반대 방향이면 마이너스 1이 나오는 그런 성질을 가지고 있어요 395 00:26:42.160 --> 00:26:43.479 닷이라는 것은 396 00:26:43.479 --> 00:26:47.520 자 그래서 이걸 가지고 보통 이제 각도도 구하고 막 그러거든요 397 00:26:47.520 --> 00:26:49.280 자 이거를 이렇게 증명할 수도 있고 398 00:26:49.280 --> 00:26:54.920 아니면은 내적은 또 이렇게도 표현할 수 있어요 399 00:26:54.920 --> 00:27:00.119 a.b 하면은 얘는 400 00:27:00.119 --> 00:27:06.800 자 a에 이렇게 쓰면은 이 a라는 벡터의 길이를 스칼라를 말하는 거거든요 401 00:27:06.800 --> 00:27:11.199 자 곱하기 b의 스칼라 402 00:27:11.199 --> 00:27:14.040 곱하기 뭐 보통에는 코사인 403 00:27:14.040 --> 00:27:19.439 어 곱하기 표현은 안하지만 여기다가 코사인 세타 이렇게 표현하거든요 404 00:27:19.439 --> 00:27:22.640 자 그러면은 길이가 1이면은 얘가 1 곱하기 1이잖아요 405 00:27:22.640 --> 00:27:25.599 그니까 이거는 없어지는 거고 코사인 세터만 남아요 406 00:27:25.599 --> 00:27:28.680 코사인 세터를 그림으로 그리면 407 00:27:28.680 --> 00:27:32.359 자 이거를 증명을 한다면 이렇게 됩니다 408 00:27:32.359 --> 00:27:35.400 코사인이라는 거는 이렇게 생겼죠 409 00:27:35.400 --> 00:27:38.319 이렇게 해서 뭐 구글 찾아보시면 있을 거예요 410 00:27:38.319 --> 00:27:41.760 여기가 0이고 마이너스 1이고 1이라면 411 00:27:41.760 --> 00:27:44.119 이렇게 해서 이렇게 나오고 412 00:27:44.119 --> 00:27:46.599 그 다음에 이렇게 올라오고 413 00:27:46.599 --> 00:27:48.880 이렇게 또 이렇게 이렇게 돼 있잖아요 414 00:27:48.880 --> 00:27:51.439 이렇게 된 파동 형태로 돼 있는데 415 00:27:51.439 --> 00:27:53.280 반대쪽도 이렇게 있습니다 416 00:27:53.280 --> 00:27:56.400 자 그러면 여기가 몇이냐면 417 00:27:56.400 --> 00:28:00.640 자 여기가 이제 어 418 00:28:00.640 --> 00:28:02.599 2분의 파이예요 419 00:28:02.599 --> 00:28:05.800 그리고 여기는 이렇게 되면 여기 마이너스 1이 닿는 곳 있죠 420 00:28:05.800 --> 00:28:08.359 여기가 파이입니다 421 00:28:08.359 --> 00:28:11.400 자 보통 이제 우리가 파이는 이거잖아요 422 00:28:11.400 --> 00:28:13.239 라디안 얘기할 때 많이 나오는데 423 00:28:13.239 --> 00:28:18.760 원을 이제 표현할 때 원의 각도나 둘레 길이 이런 걸 구할 때 424 00:28:18.760 --> 00:28:22.119 우리가 이걸 반지름이라고 할 수 있습니다 425 00:28:22.119 --> 00:28:26.800 자 그리고 보통 이제 우리가 각도를 얘기할 땐 두 가지로 하거든요 426 00:28:26.800 --> 00:28:31.479 디그리가 있고 그 다음에 라디안이 있어요 427 00:28:31.479 --> 00:28:34.920 디그리는 우리가 아는 0에서 360도 428 00:28:34.920 --> 00:28:37.199 이런 걸 얘기하는 게 디그리이고 429 00:28:37.199 --> 00:28:41.000 라디안은 반지름이 R이라면 430 00:28:41.000 --> 00:28:43.680 여기 이 원의 이만큼이 R일 거예요 431 00:28:43.680 --> 00:28:46.400 여기가 R이겠죠 R의 길이가 똑같겠죠 432 00:28:46.400 --> 00:28:49.319 여기다가 이렇게 이렇게 하는 거죠 433 00:28:49.319 --> 00:28:53.760 이게 이제 1라드죠 1라드고 434 00:28:53.760 --> 00:28:55.640 그래서 이렇게 돌렸을 때 몇 라드냐 435 00:28:55.640 --> 00:28:57.160 뭐 이렇게 얘기를 할 수 있는데 436 00:28:57.160 --> 00:29:00.800 파이 라디안 하면은 180도입니다 437 00:29:00.800 --> 00:29:03.520 90도가 2분의 파이고요 438 00:29:03.520 --> 00:29:07.239 180도가 파이예요 이렇게 보면 되거든요 439 00:29:07.239 --> 00:29:08.560 그래서 이렇게 표현할 수 있는데 440 00:29:08.560 --> 00:29:11.160 결국은 여기가 90도라는 거고 441 00:29:11.160 --> 00:29:14.560 여기가 180도인 거예요 442 00:29:14.560 --> 00:29:18.319 그래서 코사인 90 하면은 몇이죠? 443 00:29:18.319 --> 00:29:20.760 0이죠 코사인 90은 0이고 444 00:29:20.760 --> 00:29:22.520 코사인 0은 1이에요 445 00:29:22.520 --> 00:29:25.079 코사인 180은 마이너스 1입니다 446 00:29:25.079 --> 00:29:26.199 이런 개념으로 447 00:29:26.199 --> 00:29:27.280 그래서 이거랑 똑같아요 448 00:29:27.280 --> 00:29:28.920 1 0 마이너스 1 449 00:29:28.920 --> 00:29:31.040 그렇죠? 1 0 마이너스 1 450 00:29:31.040 --> 00:29:33.959 여기가 1이고 0이고 마이너스 1이잖아요 451 00:29:33.959 --> 00:29:35.719 그쵸? 각도에 따라서 452 00:29:35.719 --> 00:29:37.680 이게 이제 각도가 증가하는 쪽이니까 453 00:29:37.680 --> 00:29:41.040 각도가 0도면 1이고 90도면 0이고 454 00:29:41.160 --> 00:29:43.959 180도까지 왔으면은 마이너스 1이 되는 455 00:29:43.959 --> 00:29:45.239 그런 구조이기 때문에 456 00:29:45.239 --> 00:29:47.880 이렇게 같은 결과를 볼 수 있거든요 457 00:29:47.880 --> 00:29:50.680 자 어쨌든 이 벡터에 458 00:29:50.680 --> 00:29:53.319 닷 프로덕트 이 내적을 이용하면 459 00:29:53.319 --> 00:29:56.520 이런 식으로 방향을 기준 방향이 있으면 460 00:29:56.520 --> 00:29:59.319 그 기준 방향에 다른 벡터를 곱해서 461 00:29:59.319 --> 00:30:02.560 닷을 해서 같은 방향인지 반대 방향인지 462 00:30:02.560 --> 00:30:04.719 뭐 이런 것들을 구할 수가 있습니다 463 00:30:04.719 --> 00:30:07.839 자 이거를 이용해서 한번 구해보도록 할 건데요 464 00:30:07.839 --> 00:30:10.319 이거는 이제 앞쪽을 의미한다고 했죠 465 00:30:10.319 --> 00:30:13.040 그러니까 앞쪽 벡터랑 466 00:30:13.040 --> 00:30:15.479 Forward 벡터랑 얘를 닷을 하면 돼요 467 00:30:15.479 --> 00:30:18.920 자 그러면 여기에서 현재 이 폰에 468 00:30:18.920 --> 00:30:21.439 Get Forward Vector가 있겠죠 469 00:30:21.439 --> 00:30:24.400 벡터 Forward Vector 여기 있죠 470 00:30:24.400 --> 00:30:27.719 Forward Vector와 이 Velocity를 닷을 합니다 471 00:30:27.719 --> 00:30:29.239 닷이라고 하고요 472 00:30:29.239 --> 00:30:31.479 닷 프로덕트 473 00:30:31.479 --> 00:30:33.119 자 그러면 이게 float 값이 하나 나오죠 474 00:30:33.119 --> 00:30:35.040 이걸 여기다 넣어 주시면 되고요 475 00:30:35.040 --> 00:30:39.280 자 디렉션은 이렇게 가져와서 476 00:30:39.280 --> 00:30:43.199 자 이 Velocity랑 Right Vector 하고 477 00:30:43.199 --> 00:30:44.319 이번에는 해볼 거에요 478 00:30:44.319 --> 00:30:49.479 그래서 Get Vector Right Vector 479 00:30:49.479 --> 00:30:51.280 이걸 가져와서 480 00:30:51.280 --> 00:30:56.479 자 얘네 두 개를 닷을 해줄게요 481 00:30:56.479 --> 00:31:00.319 자 이렇게 닷을 해서 넣어 주시면 되겠습니다 482 00:31:00.319 --> 00:31:02.040 제가 이제 일단 블루프린트를 하고 있는데 483 00:31:02.040 --> 00:31:05.439 이거는 이제 C 에서 다시 해보도록 할 거에요 484 00:31:05.439 --> 00:31:07.959 이렇게 하고 실행을 해보면 485 00:31:07.959 --> 00:31:10.119 이제 앞뒤로 움직일 때는 이렇게 걸어지고요 486 00:31:10.119 --> 00:31:14.439 좌우로 움직이면 애니메이션이 안되죠 487 00:31:14.439 --> 00:31:19.160 네 이런식의 결과를 볼 수가 있습니다 488 00:31:19.160 --> 00:31:23.040 자 그럼 이번에는 점프를 좀 띄워볼 건데요 489 00:31:23.040 --> 00:31:24.479 자 그럼 점프를 띄기 위해서 490 00:31:24.479 --> 00:31:29.040 이제 애니메이션이 있어야겠죠 491 00:31:29.040 --> 00:31:31.520 자 그래서 제가 점프를 좀 준비를 했는데 492 00:31:31.520 --> 00:31:34.680 자 이거를 좀 이용해 보도록 하겠습니다 493 00:31:34.680 --> 00:31:38.920 자 그래서 여기다가 애니메이션 폴더 494 00:31:38.920 --> 00:31:40.040 같이 하긴 좀 그러네요 495 00:31:40.040 --> 00:31:42.400 그래서 애니메이션 폴더 하위에다가 496 00:31:42.400 --> 00:31:43.680 하나 더 만들게요 폴더를 497 00:31:43.680 --> 00:31:47.680 이렇게 해서 점프라고 하겠습니다 498 00:31:47.680 --> 00:31:48.920 자 여기다가 넣어 줄게요 499 00:31:48.920 --> 00:31:50.560 자 이거는 지금 필터링이 돼 있는데 500 00:31:50.560 --> 00:31:52.199 이거 끌게요 501 00:31:52.199 --> 00:31:54.000 자 원래대로 돌려놓고 502 00:31:54.000 --> 00:31:55.719 여기 점프라는 폴더에다가 503 00:31:55.719 --> 00:31:59.920 지금 플레이어 점프를 이렇게 해서 넣어 주도록 할게요 504 00:31:59.920 --> 00:32:01.160 자 그러면 이렇게 물어봐요 505 00:32:01.160 --> 00:32:02.760 스킬레톤을 뭐 쓸 건지 506 00:32:03.040 --> 00:32:04.760 지금 제가 준비한 점프도 507 00:32:04.760 --> 00:32:08.040 아마 그 언리얼4용으로 돼 있을 겁니다 508 00:32:08.040 --> 00:32:09.199 자 이거죠 509 00:32:09.199 --> 00:32:11.880 이거 말고 밑에 거요 510 00:32:11.880 --> 00:32:14.099 자 이거를 선택을 하시고요 511 00:32:14.099 --> 00:32:15.599 임포트를 해 줄 건데 512 00:32:15.599 --> 00:32:17.079 그냥 하면 아마 오류가 날 겁니다 513 00:32:17.079 --> 00:32:22.479 그래서 여기 어드밴스를 열어 보시면은 514 00:32:22.479 --> 00:32:25.640 여기 스냅 투 클로젯 프레임 515 00:32:25.640 --> 00:32:26.239 이런게 있어요 516 00:32:26.239 --> 00:32:28.959 이거를 체크를 해 주시면 됩니다 517 00:32:28.959 --> 00:32:31.400 자 이렇게 해서 임포트를 해 줄게요 518 00:32:31.400 --> 00:32:36.959 자 그러면 이렇게 애니메이션이 임포트가 되었고요 519 00:32:36.959 --> 00:32:42.160 자 그러면 이렇게 생긴 애니메이션 입니다 520 00:32:42.160 --> 00:32:46.599 자 이것도 전부 다 리타게팅을 해 주도록 하겠습니다 521 00:32:46.599 --> 00:32:48.400 지금 이거 하는 게 리타게팅이에요 522 00:32:48.400 --> 00:32:51.520 자 그래서 리타게팅 애니메이션 에셋 해서 523 00:32:51.520 --> 00:32:53.359 디플리케이트 하시고 524 00:32:53.359 --> 00:32:54.920 아까랑 동일한 형태로 525 00:32:54.920 --> 00:32:59.239 이렇게 지정하신 다음에 526 00:32:59.239 --> 00:33:01.479 자 이거는 이제 프리셋을 뭘 할 거냐라는 거라서 527 00:33:01.479 --> 00:33:02.319 안 바꿔도 되는데 528 00:33:02.319 --> 00:33:04.920 저는 하는 김에 같이 하겠습니다 529 00:33:04.920 --> 00:33:08.359 폴더를 선택하시고 530 00:33:08.359 --> 00:33:10.880 자 그럼 점프 531 00:33:10.880 --> 00:33:12.119 아 이것도 좀 애매하네요 532 00:33:12.119 --> 00:33:13.599 이름이 똑같을 텐데 533 00:33:13.599 --> 00:33:17.079 자 일단은 애니메이션 폴더에 그냥 넣어 볼까요 534 00:33:17.079 --> 00:33:21.160 자 이렇게 하시고 리타게팅을 하겠습니다 535 00:33:21.160 --> 00:33:24.680 자 그럼 이렇게 애니메이션이 잘 들어갔을 거고요 536 00:33:24.680 --> 00:33:30.920 자 이를 보면은 537 00:33:30.920 --> 00:33:34.000 네 잘 되는 것 같습니다 538 00:33:34.000 --> 00:33:41.560 자 그럼 하위에 넣었던 점프는 삭제를 할게요 539 00:33:41.560 --> 00:33:43.880 자 이렇게 해서 이제 점프 뛸 수 있는 애니메이션도 540 00:33:43.880 --> 00:33:45.599 확보를 했고요 541 00:33:45.599 --> 00:33:49.319 자 그러면 이쪽으로 와서 애닝그로피에서 542 00:33:49.319 --> 00:33:52.479 Move FSM으로 오겠습니다 543 00:33:52.479 --> 00:33:54.719 자 그럼 변수도 하나 있어야 돼요 544 00:33:54.719 --> 00:33:58.160 뭐냐면 이렇게 해서 내가 공중에 있는가 545 00:33:58.160 --> 00:34:01.160 자 그거를 체크하는 변수를 하나 만들겠습니다 546 00:34:01.160 --> 00:34:04.640 자 불 타입으로 할 거고요 547 00:34:04.640 --> 00:34:08.840 이것은 Is In Air 라고 할게요 548 00:34:08.840 --> 00:34:10.600 뭐 Is Falling 이렇게 해도 되는데 549 00:34:10.600 --> 00:34:13.239 공중에 있니 라는 뜻입니다 550 00:34:13.239 --> 00:34:14.760 자 그럼 어떤 느낌이냐면 551 00:34:14.760 --> 00:34:19.879 내가 움직이다가 공중에 있게 되었어요 552 00:34:19.879 --> 00:34:23.159 자 그러면은 그때부터는 점프를 시작하는 거죠 553 00:34:23.159 --> 00:34:27.879 자 보시면 점프 동작이 하나가 아니라 세 개로 되어 있는데 554 00:34:27.879 --> 00:34:32.159 이렇게 Start, Loop, End 이렇게 세 가지 형태로 되어 있습니다 555 00:34:32.159 --> 00:34:35.120 그래서 이거는 뛰기 전에 도움닫기고 556 00:34:35.120 --> 00:34:37.879 공중에서 자세를 취하는 것이고 557 00:34:37.879 --> 00:34:40.399 땅에 닿을 때 착지 동작이 되겠습니다 558 00:34:40.399 --> 00:34:43.239 이렇게 세 개로 구성을 할 거고요 559 00:34:43.239 --> 00:34:46.080 그래서 여기다가 배치를 해 줄게요 560 00:34:46.080 --> 00:34:51.679 자 애니메이션에서 점프라고 하면은 나오겠죠 561 00:34:51.679 --> 00:34:59.600 여기 Start, Loop, End 이렇게 세 개가 있습니다 562 00:34:59.600 --> 00:35:01.159 자 이것을 처리하면 되는데 563 00:35:01.159 --> 00:35:04.600 일단은 최종적으로는 이걸 쓰진 않을 거예요 564 00:35:04.600 --> 00:35:07.239 우리 나중에 이제 Blend Space라는 걸 바꾸긴 할 건데 565 00:35:07.239 --> 00:35:09.760 그래서 일단은 아이들 자세에서만 566 00:35:09.760 --> 00:35:13.959 이렇게 점프를 뛸 수 있게 배치를 해 보겠습니다 567 00:35:13.959 --> 00:35:16.439 자 이렇게 연결하고요 568 00:35:16.439 --> 00:35:18.280 그리고 여기서 이렇게 연결하고 569 00:35:18.280 --> 00:35:21.800 네 이렇게 이렇게 되는 거죠 570 00:35:21.800 --> 00:35:24.439 네 그래서 점프를 뛰면은 이제 스타트를 하고 571 00:35:24.439 --> 00:35:25.959 끝나면은 루프가 되고 572 00:35:25.959 --> 00:35:29.199 그리고 내가 땅에 닿았으면 착지 동작하고 573 00:35:29.199 --> 00:35:31.479 그 다음에 다시 아이들 자세를 취하는 574 00:35:31.479 --> 00:35:33.159 그러한 형태로 할 거고요 575 00:35:33.159 --> 00:35:36.080 그러면은 여기에서 조건이 576 00:35:36.080 --> 00:35:39.959 그럼 Is In Air가 True일 때 577 00:35:39.959 --> 00:35:42.639 공중에 떠 있을 때 가만히 있다가 578 00:35:42.639 --> 00:35:45.120 얘가 허공이 되었어요 579 00:35:45.120 --> 00:35:47.120 발이 땅에 닿지 않은 상태면 580 00:35:47.120 --> 00:35:49.199 점프를 뛰는 동작을 한다는 거죠 581 00:35:49.199 --> 00:35:51.239 자 이렇게 지정을 해주고요 582 00:35:51.239 --> 00:35:53.520 그 다음에 이 동작이 끝나면 583 00:35:53.520 --> 00:35:55.959 자동으로 이제 루프 상태로 갈 건데 584 00:35:55.959 --> 00:35:57.320 여기를 선택해 보시면 585 00:35:57.320 --> 00:36:01.320 여기에 Detail의 Automation 룰 뭐 이런 것들이 있습니다 586 00:36:01.320 --> 00:36:03.280 그래서 요거를 체크해 주시면 587 00:36:03.280 --> 00:36:05.159 이것은 이 애니메이션이 끝나면 588 00:36:05.159 --> 00:36:08.719 자동으로 이렇게 전의를 해 주겠다 그런 뜻입니다 589 00:36:08.719 --> 00:36:10.520 그래서 요거를 체크해 줄게요 590 00:36:10.560 --> 00:36:12.800 자 그리고 루프에서는 591 00:36:12.800 --> 00:36:15.120 공중에 허공이죠 허공인데 592 00:36:15.120 --> 00:36:17.520 내가 만약 Is In Air가 False가 되었다 593 00:36:17.520 --> 00:36:19.360 그러면 땅에 착지를 한 거잖아요 594 00:36:19.360 --> 00:36:21.080 땅에 닿은 거잖아요 595 00:36:21.080 --> 00:36:23.199 그러면은 착지 동작을 하는 거죠 596 00:36:23.199 --> 00:36:25.239 자 그래서 이 조건에는 597 00:36:25.239 --> 00:36:26.840 Is In Air를 가져오고 598 00:36:26.840 --> 00:36:30.080 이거를 False일 때 이쪽으로 넣겠습니다 599 00:36:30.080 --> 00:36:33.399 그러면은 여기 Not Boolean 이런 것들이 있거든요 600 00:36:33.399 --> 00:36:34.560 자 이렇게 해서 601 00:36:34.560 --> 00:36:37.879 이거는 이제 True를 False로 바꿔주는 일을 하는 녀석이에요 602 00:36:37.879 --> 00:36:39.080 Not 이에요 603 00:36:39.080 --> 00:36:46.159 자 이렇게 한 다음에 이렇게 넣어 주겠습니다 604 00:36:46.159 --> 00:36:49.479 자 그리고 이 착지 동작이 끝나면 605 00:36:49.479 --> 00:36:52.840 자동으로 이렇게 가만히 혀 있는 데로 와야겠죠 606 00:36:52.840 --> 00:36:55.719 그래서 이것도 Automatic 룰 Base 607 00:36:55.719 --> 00:36:59.959 이거를 체크를 해 줄게요 608 00:36:59.959 --> 00:37:01.320 자 이렇게 구성을 하고요 609 00:37:01.320 --> 00:37:03.320 자 이거는 Is In Air를 보면은 610 00:37:03.320 --> 00:37:04.919 자 프리뷰에서 잠깐 볼까요 611 00:37:04.919 --> 00:37:08.320 요거를 체크를 하시면 612 00:37:08.320 --> 00:37:10.439 아 지금 여기 있네요 613 00:37:10.439 --> 00:37:12.080 자 지금 현재 여기 있잖아요 614 00:37:12.080 --> 00:37:14.399 그래서 이쪽으로 못 가는 겁니다 615 00:37:14.399 --> 00:37:17.760 자 이거는 스피드를 0으로 해놓고 테스트를 할게요 616 00:37:17.760 --> 00:37:20.159 자 Is In Air를 체크하시면 공중에 뜨고요 617 00:37:20.159 --> 00:37:25.600 다시 푸시면은 땅에 닿게 됩니다 618 00:37:25.600 --> 00:37:28.560 자 이런 식으로 이제 점프를 뛸 수가 있고요 619 00:37:28.560 --> 00:37:32.399 자 그러면은 이제 점프를 뛰기 위해서는 620 00:37:32.399 --> 00:37:35.040 음 이제 처리를 좀 해줘야겠죠 621 00:37:35.040 --> 00:37:37.399 여기 보면은 622 00:37:37.399 --> 00:37:41.439 이 녀석이 지금 뭘 가지고 있냐면 623 00:37:41.439 --> 00:37:43.800 Movement 컴포넌트를 가지고 있어요 624 00:37:43.800 --> 00:37:45.879 Get Movement 컴포넌트겠죠 625 00:37:45.879 --> 00:37:47.439 근데 이게 아니라 626 00:37:47.439 --> 00:37:52.800 저거를 Character Movement 컴포넌트로 바꿔서 사용해야 되거든요 627 00:37:52.800 --> 00:37:55.199 그래서 이거를 지금 그대로 썼지만 628 00:37:55.199 --> 00:37:58.080 얘를 이제 캐스팅을 해서 사용해야 될 것 같습니다 629 00:37:58.080 --> 00:38:06.919 자 그래서 요거를 Cast To TPS Player로 이렇게 교체해 주신 다음에 630 00:38:06.919 --> 00:38:12.479 네 요거는 제일 마지막에 할까요 631 00:38:12.479 --> 00:38:16.520 자 이렇게 캐스팅 한 다음에 632 00:38:16.520 --> 00:38:26.000 자 여기서 Get Character Movement 컴포넌트 633 00:38:26.000 --> 00:38:29.360 여기 있죠 이거를 가지고 오고요 634 00:38:29.360 --> 00:38:33.320 자 여기 안에 들어있는 Is Falling 이라는 게 있습니다 635 00:38:33.320 --> 00:38:35.719 자 이거를 가지고 636 00:38:35.719 --> 00:38:44.120 자 이거를 채워줄게요 637 00:38:44.120 --> 00:38:47.639 자 컴파일 해주고요 638 00:38:47.639 --> 00:38:51.120 실행해 보면 점프를 뛰죠 639 00:38:51.120 --> 00:38:52.120 움직일 때는 안 돼요 640 00:38:52.120 --> 00:38:54.600 지금은 이제 구성을 그렇게 했기 때문에 641 00:38:54.600 --> 00:39:04.399 자 이렇게 점프가 잘 되는 걸 볼 수 있습니다 642 00:39:04.399 --> 00:39:08.439 자 그러면 이거를 C 에서 한번 제어를 해볼까요 643 00:39:08.439 --> 00:39:11.639 자 이쪽으로 와서 644 00:39:11.639 --> 00:39:13.479 자 애님 인스턴스 잖아요 645 00:39:13.479 --> 00:39:19.280 그러면은 툴즈에서 646 00:39:19.280 --> 00:39:21.120 자 여기서 한번 검색해 보겠습니다 647 00:39:21.120 --> 00:39:25.439 애님 인스턴스 여기 있죠 648 00:39:25.439 --> 00:39:27.439 자 이거 상속받은 클래스를 하나 만들게요 649 00:39:27.439 --> 00:39:29.919 이렇게 해서 이거는 플레이어 이름이니까요 650 00:39:29.919 --> 00:39:36.520 TPS 이렇게 하겠습니다 651 00:39:36.520 --> 00:39:53.280 자 크레이트 하시고요 652 00:39:53.280 --> 00:39:56.639 자 여기 보시면은 653 00:39:56.639 --> 00:40:00.439 어디서 했냐면 지금 블루프린트 업데이트 애니메이션 이라는 곳에서 654 00:40:00.439 --> 00:40:03.320 이 작업을 하고 있어요 655 00:40:03.320 --> 00:40:09.800 그래서 플레이어 애님은 헤더가 이렇게 생겼습니다 656 00:40:09.800 --> 00:40:14.520 자 그래서 퍼블릭 이라고 하고요 657 00:40:14.520 --> 00:40:26.080 자 블루프린트가 아니라 이거는 자 버추얼 업데이티브 업데이트 애니메이션 658 00:40:26.080 --> 00:40:27.879 이렇게 해주시면 되고요 659 00:40:27.919 --> 00:40:31.439 자 매개변수가 660 00:40:31.439 --> 00:40:34.760 네 델타 타임이 넘어오네요 661 00:40:34.760 --> 00:40:39.520 이거를 찾을 때는 애님 인스턴스로 들어가서 여기서 검색해 보시면 돼요 662 00:40:39.520 --> 00:40:40.560 이렇게 생겼네요 663 00:40:40.560 --> 00:40:49.280 자 이거를 그대로 복제해서 이렇게 작성해 주도록 하겠습니다 664 00:40:49.280 --> 00:40:53.679 자 이렇게 해서 Alt-Enter 하시면은 구현부를 만들 수가 있고요 665 00:40:53.679 --> 00:40:56.560 자 여기에서 그대로 작성을 해 줄 거고요 666 00:40:56.560 --> 00:40:59.800 자 그리고 블루프린트에서 우리가 변수를 아까 3개 만들었는데 667 00:40:59.800 --> 00:41:02.639 스피드 디렉션 인 이즈 인 에어 이거 만들었죠 668 00:41:02.639 --> 00:41:06.840 이거 그대로 만들어 줄게요 669 00:41:06.840 --> 00:41:14.000 자 여기다가 New Property 670 00:41:14.000 --> 00:41:20.040 Edit Anywhere 라고 하시고요 671 00:41:20.040 --> 00:41:24.199 자 플러스 스피드 이렇게 변수를 만들겠습니다 672 00:41:24.199 --> 00:41:29.679 자 그런데 이게 블루프린트 상에서 사용을 할 수 있게 하려면요 673 00:41:29.679 --> 00:41:35.600 자 블루프린트 리드 온리 혹은 리드 라이트를 이용을 해야 됩니다 674 00:41:35.600 --> 00:41:38.000 일단 우리는 다 일단 열어 놓고 하죠 675 00:41:38.000 --> 00:41:41.320 블루프린트 리드 라이트를 넣어 주겠습니다 676 00:41:41.320 --> 00:41:44.399 자 스피드 디렉션 이즈 인 에어 3가지죠 677 00:41:44.399 --> 00:41:49.879 자 스피드 디렉션 678 00:41:49.879 --> 00:41:57.959 자 불타입의 이즈 인 에어라는 변수를 이렇게 만들었고요 679 00:41:57.959 --> 00:42:06.040 자 이것을 업데이트 상태에서 채워 주도록 할게요 680 00:42:06.040 --> 00:42:11.239 자 이쪽으로 가서 자 스피드 681 00:42:11.239 --> 00:42:18.040 그 다음에 디렉션 그리고 이즈 인 에어 이렇게 3가지죠 682 00:42:18.040 --> 00:42:21.560 자 이걸 하기 위해서 일단 오너를 가져와야 되요 683 00:42:21.560 --> 00:42:25.560 try get phone owner 라고 할 수 있죠 684 00:42:25.560 --> 00:42:27.439 이거 그대로 쓰면 되구요 685 00:42:27.439 --> 00:42:30.439 자 그러면 이거를 가지고 할 건데 686 00:42:30.439 --> 00:42:34.439 이거는 결국은 a tps player 잖아요 687 00:42:34.439 --> 00:42:39.959 tps player 688 00:42:39.959 --> 00:42:41.600 자동성이 좀 잘 안되네요 689 00:42:41.600 --> 00:42:47.320 자 이렇게 해서 플레이어라고 하겠습니다 690 00:42:47.320 --> 00:43:00.560 자 캐스팅을 해주고요 691 00:43:00.560 --> 00:43:03.280 자 헤더를 추가해 주도록 하겠습니다 692 00:43:03.280 --> 00:43:05.679 자 그러면 이렇게 플레이어를 사용할 수 있겠죠 693 00:43:05.679 --> 00:43:10.520 자 플레이어에서 get velocity 가지고 올 수가 있거든요 694 00:43:10.520 --> 00:43:18.840 자 이거를 fvector에 보면 695 00:43:18.840 --> 00:43:20.199 dot product가 있습니다 696 00:43:20.199 --> 00:43:24.159 자 이걸 이용해서 방향을 구할 거구요 697 00:43:24.159 --> 00:43:26.760 그러면 이거는 이제 velocity니까 698 00:43:26.760 --> 00:43:27.959 자 따로 만들까요 699 00:43:27.959 --> 00:43:33.399 fvector로 velocity 700 00:43:33.399 --> 00:43:34.600 자 이렇게 하고요 701 00:43:34.600 --> 00:43:39.040 fvector forward 702 00:43:39.040 --> 00:43:46.199 자 이거는 forward vector가 되겠죠 703 00:43:46.199 --> 00:43:50.800 자 그리고 right vector도 있습니다 704 00:43:50.800 --> 00:43:55.479 자 right는 여기가 right vector 이렇게 하면 되죠 705 00:43:55.479 --> 00:43:57.439 자 이렇게 한 다음에 706 00:43:57.439 --> 00:43:59.040 이제 dot을 해 볼게요 707 00:43:59.040 --> 00:44:05.520 자 forward하고 그 다음에 velocity를 dot을 하겠습니다 708 00:44:05.520 --> 00:44:10.199 자 이 값은 스피드에다 넣을 거구요 709 00:44:10.199 --> 00:44:15.120 자 똑같이 해서 이건 디렉션에다가 710 00:44:15.120 --> 00:44:20.159 자 이거는 right vector죠 711 00:44:20.159 --> 00:44:23.560 자 이즈인에도 채워 주도록 할 거구요 712 00:44:23.560 --> 00:44:32.639 자 여기는 플레이어의 character movement가 있죠 713 00:44:32.639 --> 00:44:34.120 자 이걸 가져온 다음에 714 00:44:34.120 --> 00:44:37.399 여기에 있는 isFalling이란 값을 채워 주도록 할 겁니다 715 00:44:37.399 --> 00:44:44.679 자 이걸 사용하려면 당연히 헤더를 이렇게 추가를 해 줘야 됩니다 716 00:44:44.679 --> 00:44:53.520 게임 프레임웍에 있는 이거를 717 00:44:53.520 --> 00:44:57.719 이렇게 추가를 해 주셔야지 사용할 수가 있습니다 718 00:44:57.719 --> 00:45:01.479 자 그리고 이거는 플레이어가 null일 때는 하면 안 되겠죠 719 00:45:01.479 --> 00:45:07.159 null이 아닐 때만 채우도록 하겠습니다 720 00:45:07.159 --> 00:45:10.320 이렇게 null 체크를 해 줄게요 721 00:45:10.320 --> 00:45:12.760 그러면 이렇게 구성을 하고요 722 00:45:12.760 --> 00:45:15.000 자 그 다음에 이거의 부모를 바꿔야겠죠 723 00:45:15.000 --> 00:45:24.560 이렇게 한 다음에 일단 컴파일 한번 해 주겠습니다 724 00:45:24.560 --> 00:45:30.840 자 그리고 부모를 바꾸기 위해서 이렇게 해서 725 00:45:30.840 --> 00:45:34.159 tps-play-anim이죠 이렇게 교체를 할게요 726 00:45:34.159 --> 00:45:37.159 자 그러면은 기존에 있는 값들이 이렇게 바뀌는데 727 00:45:37.159 --> 00:45:39.840 이거는 이제 삭제를 해야겠죠 728 00:45:39.840 --> 00:45:46.840 자 여기 블루프린트를 했던 내용을 이렇게 지우겠습니다 729 00:45:46.840 --> 00:45:50.800 자 이거는 다 지워버리고요 730 00:45:50.800 --> 00:45:53.879 자 그 다음에 스피드로 처리했던 것들 731 00:45:53.879 --> 00:45:55.919 그게 지금 이걸로 제거 되고 있을 거예요 732 00:45:55.919 --> 00:46:01.320 아직도 자 여기에 조건을 만들었잖아요 733 00:46:01.320 --> 00:46:05.719 자 이렇게 보면은 스피드 734 00:46:05.719 --> 00:46:07.919 네 스피드 0으로 되겠죠 735 00:46:07.919 --> 00:46:13.760 자 그래서 이거를 find-reference 해가지고 이렇게 되어있는데 736 00:46:13.760 --> 00:46:15.159 이거는 일단 지우고요 737 00:46:15.159 --> 00:46:18.639 스피드 738 00:46:18.639 --> 00:46:20.040 이걸 지우면 오류가 날 겁니다 739 00:46:20.040 --> 00:46:23.919 이렇게 그러면 여기를 이제 스피드 740 00:46:23.919 --> 00:46:27.919 get-speed 해서 가지고 와서 이렇게 채워 주시면 되겠습니다 741 00:46:27.919 --> 00:46:30.239 여기도 있고 자 이걸로 복사해서 742 00:46:30.239 --> 00:46:34.840 자 여기도 있죠 이렇게 해서 넣어 주시고 743 00:46:34.840 --> 00:46:43.760 네 전부 다 이렇게 채워 주십시오 744 00:46:43.760 --> 00:46:47.760 자 그리고 디렉션도 사용이 되고 있는지 볼까요 745 00:46:47.760 --> 00:46:51.040 자 이렇게 해서 마우스 오른쪽 눌러서 find-reference 하시면 746 00:46:51.040 --> 00:46:53.159 이거는 지금 사용이 되고 있지 않네요 747 00:46:53.159 --> 00:46:56.959 그냥 지우면 될 것 같습니다 748 00:46:56.959 --> 00:46:59.919 자 이렇게 처리를 해주고요 749 00:46:59.919 --> 00:47:04.800 자 다시 돌아와서 여기도 잘 반영이 되요 750 00:47:04.800 --> 00:47:06.919 자 그러면 실행을 한번 해보죠 751 00:47:06.919 --> 00:47:09.159 자 이렇게 해서 점프 752 00:47:09.159 --> 00:47:12.120 네 잘 되죠 753 00:47:12.120 --> 00:47:17.760 자 이런 식으로 우리가 C 에서 이렇게 교체해서 사용할 수가 있구요 754 00:47:17.760 --> 00:47:23.320 자 그러면은 마지막으로 저거를 755 00:47:23.320 --> 00:47:24.679 이렇게 구성을 했는데 756 00:47:24.679 --> 00:47:27.199 이거는 이제 좀 복잡해지잖아요 757 00:47:27.199 --> 00:47:29.360 그쵸 이게 지금 앞뒤만 해서 그런데 758 00:47:29.560 --> 00:47:33.239 좌우도 하고 대각선도 추가하고 이러면은 759 00:47:33.239 --> 00:47:35.479 좀 처리하기가 좀 어려워집니다 760 00:47:35.479 --> 00:47:38.679 그래서 이거를 대신하는 걸 하나 만들 건데 761 00:47:38.679 --> 00:47:43.040 자 이쪽으로 와서 블루프린트 쪽에다 만들게요 762 00:47:43.040 --> 00:47:46.959 마우스 오른쪽 누르고 애니메이션에 보면 763 00:47:46.959 --> 00:47:49.639 블랜드 스페이스라는 게 있습니다 764 00:47:49.639 --> 00:47:51.239 자 이거를 클릭하시구요 765 00:47:51.239 --> 00:47:55.320 역시 마찬가지로 스켈레톤을 지정해 주셔야 돼요 766 00:47:56.320 --> 00:48:02.399 자 그 다음에 이건 BS 언더바 TPS 플레이어라고 하겠습니다 767 00:48:02.399 --> 00:48:04.879 자 이렇게 작성하시고 더블 클릭해서 768 00:48:04.879 --> 00:48:09.360 여기 보시면 구성이 허리젠탈 버티컬 액시스가 2개 있어요 769 00:48:09.360 --> 00:48:11.320 이렇게 펼쳐보시면 되는데 770 00:48:11.320 --> 00:48:13.120 자 여기 이름을 771 00:48:13.120 --> 00:48:15.000 허리젠탈은 우리가 디렉션으로 했죠 772 00:48:15.000 --> 00:48:16.879 디렉션이라고 하고요 773 00:48:16.879 --> 00:48:21.000 그 다음에 버티컬은 스피드라고 하겠습니다 774 00:48:21.000 --> 00:48:22.000 자 이렇게요 775 00:48:22.000 --> 00:48:25.600 그러면 이게 이쪽이 버티컬이고 이게 허리젠탈이죠 776 00:48:25.600 --> 00:48:28.800 자 그럼 여기다 애니메이션을 배치를 해주면 되는데 777 00:48:28.800 --> 00:48:33.120 자 먼저 아이들부터 해볼게요 778 00:48:33.120 --> 00:48:35.320 아이들을 가운데다 놓겠습니다 779 00:48:35.320 --> 00:48:37.399 근데 배치할 때 약간 잘 안 맞죠 780 00:48:37.399 --> 00:48:41.080 쉬프트를 누르시면 점에 딱딱딱 배치를 할 수가 있어요 781 00:48:41.080 --> 00:48:43.719 쉬프트를 누른 상태에서 배치를 하겠습니다 782 00:48:43.719 --> 00:48:48.040 자 그 다음에 워크라고 하시구요 783 00:48:48.040 --> 00:48:52.439 그 다음에 이거는 백워드죠 여기다 놓고 784 00:48:52.439 --> 00:48:54.639 자 이건 포워드 785 00:48:54.639 --> 00:48:57.159 그 다음에 레프트 786 00:48:57.159 --> 00:48:59.159 라이트 이렇게 배치를 하겠습니다 787 00:48:59.159 --> 00:49:00.879 그 다음에 컨트롤 키를 누르면은 788 00:49:00.879 --> 00:49:03.159 이렇게 포커스를 움직일 수가 있는데요 789 00:49:03.159 --> 00:49:05.040 마우스를 클릭하지 않았어요 790 00:49:05.040 --> 00:49:07.320 컨트롤 키만 누른 상태에서 마우스 움직여 보면 791 00:49:07.320 --> 00:49:11.199 이제 이쪽에 애니메이션이 이렇게 블렌딩이 됩니다 792 00:49:11.199 --> 00:49:12.800 이렇게 섞어주는 거예요 793 00:49:12.800 --> 00:49:15.040 대각선을 이렇게 하고 794 00:49:15.040 --> 00:49:16.280 이런 기능이 있으니까 795 00:49:16.280 --> 00:49:18.479 이걸 한번 사용해 보도록 할 거구요 796 00:49:18.479 --> 00:49:22.840 자 이렇게 하고 저장합니다 797 00:49:22.840 --> 00:49:24.600 자 그리고 이쪽으로 돌아와서 798 00:49:24.600 --> 00:49:25.679 지금 이렇게 하고 있는데 799 00:49:25.679 --> 00:49:27.320 이건 이제 쓰지 않구요 800 00:49:27.320 --> 00:49:33.639 이거 대신 여기서 801 00:49:33.639 --> 00:49:37.239 이렇게 처리를 해줘야 될 것 같습니다 802 00:49:37.239 --> 00:49:39.639 노드를 하나 만들게요 803 00:49:39.639 --> 00:49:41.040 add state 라고 하구요 804 00:49:41.040 --> 00:49:44.800 이거는 move bs 라고 하도록 805 00:49:44.800 --> 00:49:46.439 블렌드 스페이스니까요 806 00:49:46.439 --> 00:49:48.679 자 여기 들어가서 여기다가 807 00:49:48.679 --> 00:49:52.439 아까 전에 우리가 만들었던 bs tps 플레이어죠 808 00:49:52.439 --> 00:49:53.280 그대로 적어 볼게요 809 00:49:53.280 --> 00:49:56.879 bs tps 플레이어 810 00:49:56.879 --> 00:49:58.000 이렇게 하면 이렇게 나오죠 811 00:49:58.000 --> 00:49:59.679 자 여기서 뭐 제일 위에 있는 거 할까요 812 00:49:59.679 --> 00:50:01.719 이렇게 눌러보시면 이렇게 나옵니다 813 00:50:01.719 --> 00:50:04.199 자 여기다가 우리 디렉션 814 00:50:04.199 --> 00:50:06.959 get direction 이렇게 가져오시고 815 00:50:06.959 --> 00:50:11.280 get speed 이렇게 가져오셔서 816 00:50:11.280 --> 00:50:12.199 여기다 넣어주세요 817 00:50:12.199 --> 00:50:14.959 이렇게 이렇게 818 00:50:14.959 --> 00:50:17.399 자 C 로 만든 변수죠 819 00:50:17.399 --> 00:50:19.280 자 이렇게 하시면 이렇게 되구요 820 00:50:19.280 --> 00:50:21.239 그 다음에 이걸 아웃풋에다 넣어주시고 821 00:50:21.239 --> 00:50:23.639 컴파일 하면 이렇게 나옵니다 822 00:50:23.639 --> 00:50:25.239 자 이렇게 생겼죠 823 00:50:25.239 --> 00:50:27.080 자 그리고 이렇게 한 다음에 824 00:50:27.080 --> 00:50:28.520 다시 뒤로 온 다음에 825 00:50:28.520 --> 00:50:31.199 자 기존에 있던 이 내용을 사용하지 않구요 826 00:50:31.199 --> 00:50:33.120 이건 옆에서 치워버리고 827 00:50:33.120 --> 00:50:35.719 자 이거를 사용해 보도록 하겠습니다 828 00:50:35.719 --> 00:50:37.600 자 그러면 이거를 다시 만들어야겠죠 829 00:50:37.600 --> 00:50:39.320 이거는 끊어버릴게요 830 00:50:39.320 --> 00:50:43.120 Alt 누르고 클릭 클릭하면은 끊어집니다 831 00:50:43.120 --> 00:50:46.639 이렇게 다시 이렇게 이렇게 배치를 하고요 832 00:50:46.639 --> 00:50:49.280 엔트리도 이쪽에다가 연결하고 있습니다 833 00:50:49.280 --> 00:50:51.840 이건 이제 안 쓰고요 834 00:50:51.840 --> 00:50:56.040 이쪽으로 와서 이걸 쓰게 되겠죠 835 00:50:56.040 --> 00:50:57.399 자 이거는 점프니까요 836 00:50:57.399 --> 00:51:02.639 이거 다시 이지네어 가져와서 837 00:51:02.639 --> 00:51:05.639 그대로 넣어 주시구요 838 00:51:05.639 --> 00:51:07.639 그리고 이거는 자동이죠 839 00:51:07.639 --> 00:51:10.520 오토매틱 이렇게 체크를 해 주시구요 840 00:51:10.520 --> 00:51:12.760 그 다음에 생각해 보니까 841 00:51:12.760 --> 00:51:15.919 이 Blend Space 범위를 좀 잘못한 것 같아요 842 00:51:15.919 --> 00:51:19.560 자 이거를 디렉션 600 그리고 마이너스 600 843 00:51:19.560 --> 00:51:21.800 이렇게 해야겠죠 844 00:51:21.800 --> 00:51:24.239 자 그럼 스피드도 845 00:51:24.239 --> 00:51:28.679 x를 600 그리고 이거를 마이너스 600 846 00:51:28.679 --> 00:51:32.199 자 이렇게 범위를 다시 재조정해 주겠습니다 847 00:51:32.239 --> 00:51:36.120 위치를 다시 이렇게 해 주시구요 848 00:51:36.120 --> 00:51:40.679 Shift 누르고 움직이면 이렇게 딱 붙일 수 있습니다 849 00:51:40.679 --> 00:51:44.399 자 이렇게 구성을 해 준 다음에 850 00:51:44.399 --> 00:51:46.479 저장하고 다시 돌아와서 851 00:51:46.479 --> 00:51:48.639 Blend Space 보통 이렇게 하면은 852 00:51:48.639 --> 00:51:50.879 이게 제대로 반영이 안 될 때가 있더라고요 853 00:51:50.879 --> 00:51:53.840 그래서 지우고 다시 반영해 주도록 하겠습니다 854 00:51:53.840 --> 00:51:57.439 여기 이렇게 해서 Blend Space를 이렇게 넣어도 돼요 855 00:51:57.439 --> 00:52:00.560 자 Blend Space가 856 00:52:00.560 --> 00:52:03.719 이렇게 해서 집어넣어도 됩니다 857 00:52:03.719 --> 00:52:07.919 자 이렇게 연결해 주시구요 858 00:52:07.919 --> 00:52:09.080 자 컴파일 합니다 859 00:52:09.080 --> 00:52:12.479 그러면 잘 반영이 되죠 860 00:52:12.479 --> 00:52:14.120 자 실행해 볼까요 861 00:52:14.120 --> 00:52:18.600 자 앞으로 뒤로 좌우 잘 반영이 되는 것 같구요 862 00:52:18.600 --> 00:52:27.600 점프도 걸을 때도 점프 이제 뛸 수 있죠 863 00:52:27.600 --> 00:52:30.800 이번 단원에서 학습한 내용을 정리하도록 하겠습니다 864 00:52:31.464 --> 00:52:32.364 블루프린트를 적용한 애니메이션 동작 처리 이동 상태 애니메이션 애니메이션 애셋을 프로젝트에 추가하고 ABP_TPSPalyer 블루프린트를 제작함 865 00:52:32.364 --> 00:52:33.214 [대기상태]와 각 방향 [이동상태]를 양방향으로 트랜지션 연결함 Folat 타입의 Speed 변수를 각 [float] 비교 노드와 연결함 866 00:52:33.214 --> 00:52:34.064 [Get Velocity] 노드와 연결되는 [Vector Length] 노드를 생성 후 Speed 변수를 [Set] 노드로 추가함 867 00:52:34.064 --> 00:52:34.914 [Cast To ABP_TPSPalyer] 노드가 성공했을 때의 실행 핀과 [Speed Set] 노드를 연결함 868 00:52:34.914 --> 00:52:35.764 Direction 변수 추가 후 벡터의 내적을 이용해 앞·뒤 움직임과 좌·우 움직임이 다르도록 처리함 869 00:52:35.764 --> 00:52:36.614 점프 상태 애니메이션 JumpStart 등록 후 [Idle] 상태 노드와 트랜지션 연결함 870 00:52:36.614 --> 00:52:37.464 공중에 있는 지 여부를 기억할 변수 IsInAir 선언 후 참일 때 트랜지션이 발생하도록 설정함 871 00:52:37.464 --> 00:52:38.514 [Idle] 상태 노드 - [Jumpstart] - [JumpLoop] - [JumpEnd] - [Idle] 상태 노드로 트랜지션을 연결하고 조건을 설정함 872 00:52:38.578 --> 00:52:39.528 C 및 블렌드 스페이스를 이요한 애니메이션 동작 처리 C 을 이요한 동작 처리 AnimInstance를 검색해 상속받는 클래스로 TPSPlayerAnim을 생성함 873 00:52:39.528 --> 00:52:40.478 TPSPlayerAnim.h 파일에 함수 선언부를 복사한 후 오버라이딩 함 블루프린트에서 사용할 수 있도록 UPROPERTY 지정자로 BlueprintReadWrite를 입력함 874 00:52:40.478 --> 00:52:41.328 Speed, Direction, IsInAir 변수 선언 후 각 변수에 맞는 값을 할당함 875 00:52:41.328 --> 00:52:42.078 블렌드스페이스를 이용한 동작처리 블렌드스페이스 생성 후 BS_TPSPlayer로 이름 설정 876 00:52:42.078 --> 00:52:42.978 애셋 디테일 창에서 블렌드 스페이스 축 값을 설정함 [Idle_Rifle_Ironsights]를 에디터 그리드 창에 등록 후 각 방향에 맞는 애니메이션 시퀀스를 배치함 877 00:52:42.978 --> 00:52:44.028 [MoveBS] 상태 노드 생성 후 Blendspace 'BS_TPSPlayer'를 선택해 [BS_TPSPlayer] 노드를 생성함 878 00:52:44.028 --> 00:52:45.128 Direction, Speed, 변수 추가 후 [BS_TPSPlayer] 노드의 Direction, Speed에 각각 연결함 879 00:52:45.128 --> 00:52:46.228 [MoveBS] - [JumpStart], [JumpEnd] - [MoveBS] 방향으로 트랜지션을 연결함 IsInAir 변수를 그래프창에 등록 후 [Result] 노드에 연결함