1 00:00:04.221 --> 00:00:09.022 실감 기본편 언리얼 엔진 블루프린트 기초 2 00:00:09.022 --> 00:00:11.636 GCC 사관학교 3 00:00:27.242 --> 00:00:28.392 안녕하세요 4 00:00:28.392 --> 00:00:32.200 블루프린트 강의를 담당하게 된 탁광욱입니다 5 00:00:32.200 --> 00:00:34.600 블루프린트는 언리얼 엔진을 다루면서 6 00:00:34.600 --> 00:00:37.360 굉장히 많이 다루게 될 시스템인데요 7 00:00:37.360 --> 00:00:39.710 복잡한 액터를 설계하고 고안된 8 00:00:39.710 --> 00:00:44.400 언리얼만의 고유 설계 시스템을 의미합니다 9 00:00:44.400 --> 00:00:46.750 이 블루프린트는 외형뿐만 아니라 10 00:00:46.750 --> 00:00:49.919 기능들도 동작할 수 있도록 추가할 수 있는데요 11 00:00:49.919 --> 00:00:52.019 이번 시간에는 블루프린트의 기능에 12 00:00:52.019 --> 00:00:54.200 집중해 보도록 하겠습니다 13 00:00:54.200 --> 00:00:56.700 먼저 블루프린트의 비주얼 스크립트에 대해 14 00:00:56.700 --> 00:00:58.880 익숙해지는 시간을 가져보고 15 00:00:58.880 --> 00:01:01.080 기능을 제작하기 위한 기초 지식과 16 00:01:01.080 --> 00:01:03.217 이론에 대해서 알아보도록 하겠습니다 17 00:01:03.901 --> 00:01:07.641 블루프린트 및 블루프린트 스크립팅의 이해 18 00:01:07.879 --> 00:01:10.529 일반적으로 블루프린트 액터의 기능은 19 00:01:10.529 --> 00:01:13.080 코딩을 통해서 제작하게 돼요 20 00:01:13.080 --> 00:01:15.180 프로그래머가 마치 글을 쓰듯이 21 00:01:15.180 --> 00:01:18.160 코딩 문법을 이용해서 제작을 하게 되죠 22 00:01:18.160 --> 00:01:23.040 언리얼 엔진은 코딩에 익숙하지 않은 기획자나 아티스트들도 23 00:01:23.040 --> 00:01:26.080 아주 간단하게 기능을 구현할 수 있도록 24 00:01:26.080 --> 00:01:30.130 비주얼 스크립팅이라는 방식으로 블루프린트의 기능을 25 00:01:30.130 --> 00:01:33.959 제작할 수 있도록 제공해주고 있어요 26 00:01:33.959 --> 00:01:35.720 비주얼 스크립트 방식이 뭐냐면 27 00:01:35.720 --> 00:01:38.770 이 그림에서 보는 것처럼 모드라고 불리는 28 00:01:38.770 --> 00:01:41.400 블럭을 선으로 연결해서 29 00:01:41.400 --> 00:01:45.320 이런 데이터의 흐름을 시각적으로 보면서 작업하는 30 00:01:45.320 --> 00:01:49.470 즉 시각적인 인터페이스로 작업하는 기능을 31 00:01:49.470 --> 00:01:53.559 만들어내는 방식이라고 생각하시면 좋아요 32 00:01:53.559 --> 00:01:57.680 특히 이 언리얼 엔진의 블루프린트의 비주얼 스크립팅 방식은 33 00:01:57.680 --> 00:01:59.830 일반적인 블루 코딩보다도 34 00:01:59.830 --> 00:02:02.839 코딩 관련 기능들을 더 많이 제공하고 있어서 35 00:02:02.839 --> 00:02:06.400 직접적인 코딩 없이도 블루프린트만으로도 36 00:02:06.400 --> 00:02:11.399 어느 정도 규모의 프로젝트를 거뜬히 제작할 수 있을 정도로 37 00:02:11.399 --> 00:02:13.639 굉장히 강력하다고 보시면 좋습니다 38 00:02:13.639 --> 00:02:15.989 먼저 간단하게 블루프린트 사용하는 방법부터 39 00:02:15.989 --> 00:02:17.960 알아보도록 하겠습니다 40 00:02:17.960 --> 00:02:21.000 먼저 일반적으로 프로그래머들이 코딩을 배울 때 41 00:02:21.000 --> 00:02:24.000 Hello World를 출력하는 그런 기능을 42 00:02:24.000 --> 00:02:25.919 만드는 것으로 시작을 해요 43 00:02:25.919 --> 00:02:28.119 우리도 Hello World를 출력하는 44 00:02:28.119 --> 00:02:29.839 기능을 한번 만들어보도록 할게요 45 00:02:29.839 --> 00:02:31.520 저는 베이직 레벨을 열었어요 46 00:02:31.520 --> 00:02:35.320 여기서 간단하게 블루프린트를 배워볼 예정이고요 47 00:02:35.320 --> 00:02:38.520 Content Drawer를 열어서 48 00:02:38.520 --> 00:02:42.399 Content 폴더에 폴더를 하나 만들어 주도록 하겠습니다 49 00:02:42.399 --> 00:02:45.299 이름은 BP라는 이름으로 50 00:02:45.299 --> 00:02:46.919 폴더를 하나 만들어 주도록 할게요 51 00:02:46.919 --> 00:02:49.479 블루프린트의 약자입니다 52 00:02:49.479 --> 00:02:51.919 이 폴더 안에다가 학습을 해볼 거고요 53 00:02:51.919 --> 00:02:58.279 빈 곳에다가 우클릭, 블루프린트 클래스를 선택을 합니다 54 00:02:58.279 --> 00:03:01.753 부모 클래스를 선택하라고 하는 창이 나오게 됩니다 55 00:03:01.753 --> 00:03:03.919 간단하게 이야기하면 56 00:03:03.919 --> 00:03:07.320 언리얼 엔진에서 블루프린트를 만들 때에는 57 00:03:07.320 --> 00:03:10.119 이미 만들어져 있는 특정한 기능을 가지고 와서 58 00:03:10.119 --> 00:03:13.440 그 위에다가 덧붙여서 기능을 만들어라 59 00:03:13.440 --> 00:03:17.199 블루프린트를 만들어라라고 되어 있어요 60 00:03:17.199 --> 00:03:20.360 이런 방식을 기존에 만들었던 것을 그대로 가지고 와서 61 00:03:20.360 --> 00:03:23.759 만드는 방식을 보통 상속한다고 해요 62 00:03:23.759 --> 00:03:27.559 그래서 클래스를 상속해서 새로운 기능을 만들어내는 63 00:03:27.559 --> 00:03:29.160 그런 과정이라고 보시면 돼요 64 00:03:29.160 --> 00:03:34.399 그래서 어떤 것을 상속할 것이냐를 선택한다고 보시면 됩니다 65 00:03:34.399 --> 00:03:38.399 우리는 맨 위에 있는 Actor 클래스를 상속을 받을게요 66 00:03:38.399 --> 00:03:40.600 이 Actor 클래스는 뭐냐면 67 00:03:40.600 --> 00:03:45.350 레벨 공간에다가 배치할 수 있는 기능을 가진 68 00:03:45.350 --> 00:03:47.080 클래스라고 보시면 됩니다 69 00:03:47.080 --> 00:03:49.559 그래서 이 레벨에다가 배치할 예정이니까 70 00:03:49.559 --> 00:03:53.600 Actor 클래스를 선택을 할게요 71 00:03:53.600 --> 00:03:57.839 그러면 상속이 받아져서 블루프린트가 생성이 됐죠 72 00:03:57.839 --> 00:04:04.520 우리는 이름을 BP_Basic이라고 할게요 73 00:04:04.520 --> 00:04:06.570 그러면 Actor 클래스를 상속을 받은 74 00:04:06.570 --> 00:04:08.880 블루프린트 액터가 생성이 됐습니다 75 00:04:08.880 --> 00:04:10.600 더블 클릭해 주시고요 76 00:04:10.600 --> 00:04:13.200 더블 클릭을 하면 이렇게 77 00:04:13.200 --> 00:04:15.919 블루프린트 에디터 창이 나오게 되는데요 78 00:04:15.919 --> 00:04:21.440 저는 이 에디터 창을 레벨 옆에다가 이렇게 정렬을 해뒀어요 79 00:04:21.440 --> 00:04:24.839 전체적으로 보기 위해서요 80 00:04:24.839 --> 00:04:28.200 보시면 가운데 뻥 뚫려 있는 공간이 있고 81 00:04:28.200 --> 00:04:30.600 왼쪽에는 Components와 My Blueprint 82 00:04:30.600 --> 00:04:33.920 그리고 오른쪽에는 Details 창이 있네요 83 00:04:33.920 --> 00:04:37.270 왼쪽의 Components는 언리얼에서 제공하는 84 00:04:37.270 --> 00:04:39.480 기능 블럭을 불러올 수 있는 85 00:04:39.480 --> 00:04:41.440 그런 패널이라고 보시면 되고요 86 00:04:41.440 --> 00:04:44.540 My Blueprint 같은 경우는 우리가 잠시 후에 배울 87 00:04:44.540 --> 00:04:47.679 변수를 담당하는 곳이라고 보시면 되겠습니다 88 00:04:47.679 --> 00:04:50.320 그리고 오른쪽의 Details는 익숙하죠 89 00:04:50.320 --> 00:04:51.870 설정값들을 설정하는 90 00:04:51.870 --> 00:04:55.279 그런 패널이라고 보시면 좋을 것 같아요 91 00:04:55.279 --> 00:04:58.079 뷰포트는 일반적인 뷰포트하고 똑같아요 92 00:04:58.079 --> 00:05:01.579 블루프린트의 어떤 시각적인 표현, 외형을 확인해 보는 93 00:05:01.579 --> 00:05:04.720 그런 공간이라고 보시면 됩니다 94 00:05:04.720 --> 00:05:08.480 우리가 작업할 기능을 만들어줄 작업은 95 00:05:08.480 --> 00:05:12.030 이 상단에 보시면 이렇게 뷰포트 옆에 96 00:05:12.030 --> 00:05:16.640 Event Graph라고 하는 패널을 클릭해 보면 97 00:05:16.640 --> 00:05:18.600 화면이 바뀌는 걸 볼 수가 있어요 98 00:05:18.600 --> 00:05:21.160 여기서 만들 수가 있습니다 99 00:05:21.160 --> 00:05:23.640 기본적인 노드가 세 가지가 있는데 100 00:05:23.640 --> 00:05:25.799 이건 잠시 후에 설명을 하고요 101 00:05:25.799 --> 00:05:28.119 오른쪽에 빈 공간에 우클릭을 하고 102 00:05:28.119 --> 00:05:31.160 우클릭을 하면 검색을 할 수 있는 창이 있고요 103 00:05:31.160 --> 00:05:32.559 이 안에서도 목록이 있죠 104 00:05:32.559 --> 00:05:33.640 여기서도 고를 수가 있는데 105 00:05:33.640 --> 00:05:36.320 우리는 직접 검색을 하도록 하겠습니다 106 00:05:36.320 --> 00:05:38.040 print라고 검색을 해 볼게요 107 00:05:38.040 --> 00:05:41.090 그러면 Print String이라고 하는 108 00:05:41.090 --> 00:05:43.040 노드를 꺼낼 수가 있게 됩니다 109 00:05:43.040 --> 00:05:45.920 클릭을 해 볼게요, 클릭 110 00:05:45.920 --> 00:05:50.160 그러면 Print String이라고 하는 노드를 꺼냈어요 111 00:05:50.160 --> 00:05:53.610 Print String은 어떤 특정한 문구를 112 00:05:53.610 --> 00:05:56.799 출력을 해주는 블럭이라고 생각하시면 좋아요 113 00:05:56.799 --> 00:05:59.160 그래서 안에 있는 이 내용 114 00:05:59.160 --> 00:06:02.037 In String에 있는 네모 박스 안에 있는 내용을 115 00:06:02.037 --> 00:06:04.440 출력하는 기능을 담당하고 있죠 116 00:06:04.440 --> 00:06:06.040 당연히 우리는 Hello World를 할 거니까 117 00:06:06.040 --> 00:06:13.480 여기에다가 Hello World라고 작성을 해야겠죠 118 00:06:13.480 --> 00:06:15.679 여기서 이렇게 끝나는 것이 아니라 119 00:06:15.679 --> 00:06:18.440 이제 이 노드를 어디다가 연결을 하냐면 120 00:06:18.440 --> 00:06:22.320 Event BeginPlay라고 하는 빨간색 노드가 있습니다 121 00:06:22.320 --> 00:06:25.839 처음에 우리가 블루프린트를 만들었을 때 122 00:06:25.839 --> 00:06:29.200 처음 나와 있는 노드예요 123 00:06:29.200 --> 00:06:32.600 이 노드는 이벤트 노드라고 해서 124 00:06:32.600 --> 00:06:36.880 특정한 상황에서 실행하라고 하는 노드라고 보시면 돼요 125 00:06:36.880 --> 00:06:38.920 지금 같은 경우에 BeginPlay죠 126 00:06:38.920 --> 00:06:42.200 BeginPlay는 처음에 시작할 때 127 00:06:42.200 --> 00:06:45.200 처음 플레이를 시작을 할 때 128 00:06:45.200 --> 00:06:48.320 실행하는 이벤트를 발생하는 노드다 129 00:06:48.320 --> 00:06:51.079 라고 생각하시면 좋을 것 같아요 130 00:06:51.079 --> 00:06:55.760 여기에 보시면 화살표처럼 보이는 이런 마크가 보이죠 131 00:06:55.760 --> 00:06:58.239 이것은 실행 핀이라고 하는데 132 00:06:58.239 --> 00:07:02.040 이 실행 핀을 클릭해서 쭉 옆으로 빼면 133 00:07:02.040 --> 00:07:05.420 드래그해서 빼면 이런 식으로 선이 나오게 되고요 134 00:07:05.420 --> 00:07:08.040 이것을 다시 쭉 연결해서 135 00:07:08.040 --> 00:07:11.480 Print String에 있는 이 실행 핀에다가 136 00:07:11.480 --> 00:07:18.000 이렇게 연결을 해주면 선이 이렇게 연결이 됩니다 137 00:07:18.000 --> 00:07:19.559 연결이 잘못되서 취소할 때는 138 00:07:19.559 --> 00:07:23.760 키보드의 Alt 키를 누르고 선을 클릭하면 끊어집니다 139 00:07:23.760 --> 00:07:25.119 선이 사라져요 140 00:07:25.119 --> 00:07:29.040 다시 여기 실행 핀을 드래그&드롭해서 141 00:07:29.040 --> 00:07:32.279 Print String에다가 이렇게 연결을 하겠습니다 142 00:07:32.279 --> 00:07:36.279 그러면 완료가 됐어요 143 00:07:36.279 --> 00:07:40.160 이 노드는 이렇게 잡고 왔다 갔다 할 수 있고요 144 00:07:40.160 --> 00:07:43.040 여기도 마찬가지 잡고 왔다 갔다 할 수 있고요 145 00:07:43.040 --> 00:07:46.279 그 다음에 이렇게 잡고 동시에 왔다 갔다 할 수 있습니다 146 00:07:46.279 --> 00:07:51.200 그리고 마우스 휠 버튼을 이용해서 확대 축소가 가능해요 147 00:07:51.200 --> 00:07:53.600 확대하면 여기까지가 되는데 148 00:07:53.600 --> 00:07:57.839 Ctrl 키를 누르면 더 확대가 됩니다 149 00:07:57.839 --> 00:07:59.480 이런 식으로 할 수가 있고요 150 00:07:59.480 --> 00:08:02.959 그 다음에 마우스 오른쪽 버튼을 눌러서 왔다 갔다 하면 151 00:08:02.959 --> 00:08:04.839 팬 이동이라 그러죠 152 00:08:04.839 --> 00:08:10.399 위치를 이동할 수가 있게 됩니다, 이런 식으로요 153 00:08:10.399 --> 00:08:12.040 그러면 완료가 됐어요 154 00:08:12.040 --> 00:08:13.959 여기서 완료가 되면 155 00:08:13.959 --> 00:08:16.679 왼쪽 상단에 Compile이라고 하는 156 00:08:16.679 --> 00:08:20.000 물음표 표시가 되어 있는 이 버튼을 눌러줘야 돼요 157 00:08:20.000 --> 00:08:21.760 Compile이 뭐냐면 158 00:08:21.760 --> 00:08:24.359 사람이 알아들을 수 있는 이런 언어들을 159 00:08:24.359 --> 00:08:27.920 컴퓨터라는 기계가 알아들을 수 있는 언어로 160 00:08:27.920 --> 00:08:31.839 변환시켜주는 작업이라고 생각하시면 좋습니다 161 00:08:31.839 --> 00:08:34.960 그래서 반드시 이런 작업들을 우리가 진행을 하게 되면 162 00:08:34.960 --> 00:08:37.960 이 Compile이라는 버튼을 반드시 눌러줘야 돼요 163 00:08:37.960 --> 00:08:41.280 그리고 어떤 우리가 작업을 하게 되면 164 00:08:41.280 --> 00:08:44.640 상단에 보시면 이렇게 이름 옆에 165 00:08:44.640 --> 00:08:48.200 * 표시가 떠 있는 걸 볼 수가 있어요 166 00:08:48.200 --> 00:08:53.000 그리고 애셋에서도 보시면 167 00:08:53.000 --> 00:08:54.840 어떤 작업을 하고 나면 168 00:08:54.840 --> 00:08:58.280 이렇게 가운데에 * 표시가 있는 걸 볼 수가 있습니다 169 00:08:58.280 --> 00:09:01.039 이렇게 * 표시가 되어 있다라는 건 뭐냐면 170 00:09:01.039 --> 00:09:06.000 작업은 했되 저장하지 않았다라는 것을 표현합니다 171 00:09:06.000 --> 00:09:07.760 마치 우리가 이제 워드나 172 00:09:07.760 --> 00:09:10.719 혹은 PPT 문서에서 작업을 할 때 173 00:09:10.719 --> 00:09:14.359 글을 쓰고 나서 저장을 하지 않은 상태라고 보시면 돼요 174 00:09:14.359 --> 00:09:16.960 블루프린트 같은 경우에는 Compile을 하고 나서 175 00:09:16.960 --> 00:09:18.960 반드시 저장까지 해줘야 176 00:09:18.960 --> 00:09:22.599 안정적으로 작동하는 걸 볼 수가 있을 거예요 177 00:09:22.599 --> 00:09:24.799 그래서 반드시 Compile을 하고 178 00:09:24.799 --> 00:09:26.520 저장 버튼을 눌러주는 179 00:09:26.520 --> 00:09:31.520 이런 습관을 기르는 걸 추천드리겠습니다 180 00:09:31.520 --> 00:09:33.559 그래서 저도 Compile 버튼 눌렀고요 181 00:09:33.559 --> 00:09:37.760 그 다음에 저장 버튼을 누르도록 하겠습니다 182 00:09:37.760 --> 00:09:39.520 그럼 이제 * 표시 사라졌죠 183 00:09:39.520 --> 00:09:42.599 Content Drawer 상에서도 * 표시가 사라진 걸 볼 수가 있어요 184 00:09:42.599 --> 00:09:46.119 우리는 간단하게 Hello World라는 기능을 만들었으니까 185 00:09:46.119 --> 00:09:49.320 제대로 작동하는지 한번 알아보도록 하겠습니다 186 00:09:49.320 --> 00:09:53.280 Untitled라고 하는 지금 이름이 아직 적용되지 않았네요 187 00:09:53.280 --> 00:09:55.919 레벨로 돌아오도록 하겠습니다 188 00:09:55.919 --> 00:10:00.080 레벨로 돌아와서 우리가 만든 Content Drawer를 열어서 189 00:10:00.080 --> 00:10:03.280 우리가 만든 이 블루프린트를 배치를 시켜야 돼요 190 00:10:03.280 --> 00:10:08.440 그래서 드래그&드롭으로 이렇게 배치를 시키도록 하겠습니다 191 00:10:08.440 --> 00:10:12.239 저는 항상 모든 애셋들은 레벨에 배치하면 192 00:10:12.239 --> 00:10:15.280 저는 원점에 두는 습관을 가지고 있어요 193 00:10:15.280 --> 00:10:16.320 그래서 원점에 두고 194 00:10:16.320 --> 00:10:19.359 이 상태에서 플레이를 해보도록 하겠습니다 195 00:10:19.359 --> 00:10:22.080 상단에 플레이 버튼을 누르면 196 00:10:22.080 --> 00:10:26.479 이 뷰포트 화면 상단에 Hello World가 잠깐 나왔다 197 00:10:26.479 --> 00:10:28.440 사라진 걸 볼 수가 있었을 겁니다 198 00:10:28.440 --> 00:10:33.559 너무 금방 사라져서 좀 수정을 해보도록 할게요 199 00:10:33.559 --> 00:10:37.320 이 Print String의 아래쪽의 화살표를 누르면 200 00:10:37.320 --> 00:10:41.440 Print String 기능을 설정할 수 있는 항목들이 뜨는데 201 00:10:41.440 --> 00:10:44.159 여기 Duration이라고 하는 게 지금 2라고 되어 있어요 202 00:10:44.159 --> 00:10:46.640 2초 동안 보여주고 사라진다는 의미거든요 203 00:10:46.640 --> 00:10:48.159 이걸 조금 더 늘려보도록 하겠습니다 204 00:10:48.159 --> 00:10:52.200 10초만 보여지고 사라지도록 이렇게 설정을 할게요 205 00:10:52.200 --> 00:10:54.159 우리 수정을 했으니까 Compile을 하고 206 00:10:54.159 --> 00:10:57.799 왼쪽 위쪽에 Compile을 하고, Compile을 했으면 207 00:10:57.799 --> 00:11:01.200 저장까지 하는 습관까지, 됐죠? 208 00:11:01.200 --> 00:11:04.100 다시 레벨로 돌아와서 209 00:11:04.100 --> 00:11:07.719 다시 한번 플레이를 눌러보도록 하겠습니다 210 00:11:07.719 --> 00:11:09.320 이렇게 플레이를 해보니까 어때요? 211 00:11:09.320 --> 00:11:13.400 왼쪽 상단에 이런 식으로 Hello World라고 하는 212 00:11:13.400 --> 00:11:17.520 하늘색 문구가 출력되는 걸 볼 수가 있습니다 213 00:11:17.520 --> 00:11:21.760 10초가 지나니까 사라지는 것도 확인해 볼 수가 있죠 214 00:11:21.760 --> 00:11:24.119 자 됐습니다 215 00:11:24.119 --> 00:11:30.440 우리는 블루프린트를 통해서 기능을 만든 거예요 216 00:11:30.440 --> 00:11:34.440 우리가 만들었던 블루프린트의 노드에 대해서 217 00:11:34.440 --> 00:11:37.359 좀 더 알아보도록 할게요 218 00:11:37.359 --> 00:11:41.640 간단하게 자주 쓰는 노드를 하나 꺼냈는데요 219 00:11:41.640 --> 00:11:45.479 이 노드는 Set Actor Rotation이라고 하는 220 00:11:45.479 --> 00:11:49.440 액터의 회전을 설정할 수 있는 그런 노드예요 221 00:11:49.440 --> 00:11:52.440 그래서 상단에 보시면 이 노드의 이름이 적혀 있고요 222 00:11:52.440 --> 00:11:55.320 이 노드가 이 이름에서 이 데이터가 무슨 기능을 하는지 223 00:11:55.320 --> 00:11:58.520 대충은 알 수 있게끔 그렇게 나오겠죠 224 00:11:58.520 --> 00:12:03.640 그리고 위에 있는 하얀색 핀이 있었습니다 225 00:12:03.640 --> 00:12:06.760 이 핀은 실행 핀이라고 이야기 했었죠 226 00:12:06.760 --> 00:12:10.239 앞서서 실행해라는 명령을 받으면 227 00:12:10.239 --> 00:12:14.359 이 노드를 통해서 이 기능이 작동을 하게 되죠 228 00:12:14.359 --> 00:12:18.559 그리고 작동이 끝나면 이 뒤에 있는 실행 핀을 통해서 229 00:12:18.559 --> 00:12:22.760 뒤쪽으로 다음 일을 하라고 실행하게 되는 230 00:12:22.760 --> 00:12:28.000 그렇게 실행의 명령을 받고 실행하라고 하는 명령을 하는 231 00:12:28.000 --> 00:12:31.039 그 실행의 흐름을 보여주는 연결해주는 232 00:12:31.039 --> 00:12:33.039 그런 핀이라고 생각하시면 좋습니다 233 00:12:33.039 --> 00:12:36.400 그리고 아래쪽에도 이런 핀들이 있어요 234 00:12:36.400 --> 00:12:40.640 이런 핀들을 모두 다 데이터 핀이라고 이야기 하는데요 235 00:12:40.640 --> 00:12:43.640 왼쪽에 있는 것은 입력 핀이에요 236 00:12:43.640 --> 00:12:48.080 그래서 이 노드에서 기능을 실행을 할 때 237 00:12:48.080 --> 00:12:50.599 어떠한 데이터를 입력 받을지를 238 00:12:50.599 --> 00:12:54.359 이 왼쪽의 핀을 통해서 입력 받게 됩니다 239 00:12:54.359 --> 00:12:59.640 그리고 이 노드를 통해서 완료된, 계산된 그런 데이터들은 240 00:12:59.640 --> 00:13:05.719 오른쪽에 있는 이 핀을 통해서 뽑아져 나가게 되는 것이죠 241 00:13:05.719 --> 00:13:07.840 그래서 이 블루프린트의 흐름은 242 00:13:07.840 --> 00:13:12.440 왼쪽에서 오른쪽으로 이 데이터의 흐름이 이어지게 돼요 243 00:13:12.440 --> 00:13:13.919 그래서 보시면 아시겠지만 244 00:13:13.919 --> 00:13:17.679 우리는 왼쪽에서부터 시작해서 오른쪽으로 245 00:13:17.679 --> 00:13:20.599 Event BeginPlay라고 하는 이 노드는 246 00:13:20.599 --> 00:13:24.400 처음 시작할 때 이벤트가 발생하는 것이라고 했었죠 247 00:13:24.400 --> 00:13:29.159 이벤트가 발생하면 다음 Print String을 실행하라고 248 00:13:29.159 --> 00:13:32.080 우리는 연결을 해준 거예요 249 00:13:32.080 --> 00:13:36.400 하지만 이 Print String에서는 데이터는 받지 않았어요 250 00:13:36.400 --> 00:13:39.559 왼쪽 핀은 있어도 데이터는 받지 않았지만 251 00:13:39.559 --> 00:13:42.459 Hello World라고 하는 이 자체적인 데이터를 252 00:13:42.459 --> 00:13:45.599 우리가 입력을 해서 실행하게 했죠 253 00:13:45.599 --> 00:13:48.200 이 프린트 같은 경우에는 254 00:13:48.200 --> 00:13:53.760 데이터가 다음 노드로 빠질 일이 없기 때문에 255 00:13:53.760 --> 00:13:55.610 이런 아웃 핀 256 00:13:55.610 --> 00:14:00.719 밖으로 나가는 출력 핀이 없을 수도 있게 되는 거죠 257 00:14:00.719 --> 00:14:02.679 대신에 다음에 어떤 일을 하게 되라 258 00:14:02.679 --> 00:14:04.760 어떤 다른 기능을 하라고 하면 259 00:14:04.760 --> 00:14:07.000 이런 식으로 실행 핀이 연결돼서 260 00:14:07.000 --> 00:14:10.359 다음 기능을 할 수 있도록 이렇게 할 수 있겠죠 261 00:14:10.359 --> 00:14:12.799 이렇게 연결을 했다면 Print String을 하고 262 00:14:12.799 --> 00:14:15.599 그 다음에 Set Actor Rotation이 작동한다 263 00:14:15.599 --> 00:14:16.954 이렇게 생각하시면 좋을 것 같습니다 264 00:14:17.356 --> 00:14:20.999 데이터 타입 종류 및 블루프린트 사칙 연산 265 00:14:21.320 --> 00:14:26.799 그러면 이 핀에다가 데이터를 한번 입력을 해 볼게요 266 00:14:26.799 --> 00:14:30.719 변수라고 하는 데이터를 만들어서 입력을 해 볼 건데요 267 00:14:30.719 --> 00:14:32.679 변수라고 하는 건 뭐냐면 268 00:14:32.679 --> 00:14:35.559 일반적인 그릇이라고 생각하시면 좋아요 269 00:14:35.559 --> 00:14:40.119 우리가 밥을 먹기 위해서 밥그릇에 밥을 담아 먹죠? 270 00:14:40.119 --> 00:14:42.569 그리고 흙을 담을 때는 271 00:14:42.569 --> 00:14:45.359 화분이라고 하는 그릇에 흙을 담아요 272 00:14:45.359 --> 00:14:47.640 우리는 화분에다가 밥을 담아 먹지는 않을 거예요 273 00:14:47.640 --> 00:14:49.119 그렇죠? 274 00:14:49.119 --> 00:14:51.719 프로그래밍에서도 입력값이라든지 275 00:14:51.719 --> 00:14:55.119 결과값 같은 그런 수많은 데이터들을 처리하고 있고요 276 00:14:55.119 --> 00:14:57.019 그 각각의 데이터들은 277 00:14:57.019 --> 00:15:00.691 저마다 담아놓을 수 있는 그릇에 담겨 있어요 278 00:15:00.691 --> 00:15:03.840 바로 이 그릇을 변수라고 이야기를 합니다 279 00:15:03.840 --> 00:15:07.190 일반적인 그릇이 그렇듯이 변수도 280 00:15:07.190 --> 00:15:10.360 모든 데이터를 다 저장할 수 있는 것이 아니에요 281 00:15:10.360 --> 00:15:12.910 변수를 만들 때마다 담을 수 있는 282 00:15:12.910 --> 00:15:15.600 데이터의 종류를 결정해주는데 283 00:15:15.600 --> 00:15:19.100 이러한 용도 지정을 일컬어서 자료형 284 00:15:19.100 --> 00:15:23.000 즉 데이터 타입이라고 불러요 285 00:15:23.000 --> 00:15:27.320 그렇다면 과연 이 자료형은 몇 개나 있을까요? 286 00:15:27.320 --> 00:15:30.270 이 자료형은 프로그래밍 언어를 만들 때 287 00:15:30.270 --> 00:15:33.799 사전에 미리 정해놓은 기본 자료형과 288 00:15:33.799 --> 00:15:38.349 그리고 개발자가 개발 상황에 따라서 만든 289 00:15:38.349 --> 00:15:40.619 클래스를 담기 위해서 만든 290 00:15:40.619 --> 00:15:45.777 사용자 정의 자료형 두 가지 형태가 있어요 291 00:15:45.777 --> 00:15:49.240 클래스 자료형, 사용자 정의 자료형 같은 경우에는 292 00:15:49.240 --> 00:15:51.940 개발자의 개발 상황에 따라 생산되는 것이기 때문에 293 00:15:51.940 --> 00:15:53.320 수량의 제한이 없어요 294 00:15:53.320 --> 00:15:55.959 그래서 논외로 하고요 295 00:15:55.959 --> 00:15:59.659 이런 기본 자료형만 따져봐도 296 00:15:59.659 --> 00:16:02.040 전부 합하면 수십가지나 되기 때문에 297 00:16:02.040 --> 00:16:04.959 사실상 모두 다 외울 수는 없어요 298 00:16:04.959 --> 00:16:07.809 그래서 우리는 가장 빈번하게 사용하는 299 00:16:07.809 --> 00:16:10.199 네 가지 자료형을 기반으로 300 00:16:10.199 --> 00:16:14.720 변수 노드를 한번 만들어 보는 실습을 해 보도록 하고요 301 00:16:14.720 --> 00:16:18.120 그 외에도 자주 쓰는 노드에 대해서 302 00:16:18.120 --> 00:16:21.370 우리가 이번에 만들 기능에 관련된 303 00:16:21.370 --> 00:16:23.839 노드들도 알아보도록 할게요 304 00:16:23.839 --> 00:16:26.889 그럼 다시 돌아와서 이 Print String에다가 305 00:16:26.889 --> 00:16:28.480 변수를 하나 만들어서 306 00:16:28.480 --> 00:16:32.120 그 변수 값을 출력하도록 그렇게 한번 해 보도록 할게요 307 00:16:32.120 --> 00:16:35.680 변수를 만드는 방법은 왼쪽 아래에 있습니다 308 00:16:35.680 --> 00:16:39.959 왼쪽 아래에 My Blueprint라고 하는 패널이 있어요 309 00:16:39.959 --> 00:16:44.120 이 중에 보시면 VARIABLES라고 하는 항목이 있죠 310 00:16:44.120 --> 00:16:47.231 VARIABLES에 + 버튼을 누르면 311 00:16:47.231 --> 00:16:50.440 이런 식으로 변수가 만들어져요 312 00:16:50.440 --> 00:16:51.639 여기 이름을 한번 만들어 볼게요 313 00:16:51.639 --> 00:16:55.400 이름은 Number1이라고 한번 만들어볼게요 314 00:16:55.400 --> 00:16:56.199 이름을 만들었죠 315 00:16:56.199 --> 00:16:58.080 이건 그릇의 이름이고요 316 00:16:58.080 --> 00:17:02.080 이 그릇이 어떠한 용도로 쓰일 것인지는 317 00:17:02.080 --> 00:17:05.580 이 오른쪽에 빨간색 Boolean이라고 되어 있는 이 항목을 318 00:17:05.580 --> 00:17:06.800 선택해 보면 알 수가 있어요 319 00:17:06.800 --> 00:17:11.160 클릭하면 이렇게 여러가지 항목들이 나오죠 320 00:17:11.160 --> 00:17:16.559 이 항목들이 전부 다 자료형 혹은 데이터 타입의 종류들이에요 321 00:17:16.559 --> 00:17:20.559 되게 많죠? 이 중에서 우리는 네 가지만 해 볼게요 322 00:17:20.559 --> 00:17:23.240 첫번째 Integer를 한번 선택을 해 볼게요 323 00:17:23.240 --> 00:17:27.000 클릭, 그럼 이렇게 Integer로 바뀌어 있죠 324 00:17:27.000 --> 00:17:31.200 Number1이라고 하는 그릇은 Integer라고 하는 데이터를 325 00:17:31.200 --> 00:17:35.320 담는 그릇이야라고 설정을 해 준 거예요 326 00:17:35.320 --> 00:17:36.820 Integer는 뭐냐면 327 00:17:36.820 --> 00:17:40.399 Integer는 일반적인 정수를 의미합니다 328 00:17:40.399 --> 00:17:43.279 Integer는 정수를 의미하고요 329 00:17:43.279 --> 00:17:45.800 이 변수를 선택한 상태에서 Details 창으로 가면 330 00:17:45.800 --> 00:17:48.440 이렇게 Details 창에서 여러가지 설정들을 할 수 있고요 331 00:17:48.440 --> 00:17:52.940 저기 아래쪽에 보면 Default Value라고 하는 항목에서 332 00:17:52.940 --> 00:17:55.800 값을 지정해서 넣을 수가 있어요 333 00:17:55.800 --> 00:17:59.119 지금은 넣을 수가 없죠 Compile을 하라고 하네요 334 00:17:59.119 --> 00:18:01.440 그러면 Compile을 먼저 해 주도록 할게요 335 00:18:01.440 --> 00:18:05.360 Compile을 하고, Compile하면 저장을 하라고 했죠 336 00:18:05.360 --> 00:18:08.910 그러고 나서 보면 이렇게 337 00:18:08.910 --> 00:18:11.800 Number1이라고 하는 변수 이름과 함께 338 00:18:11.800 --> 00:18:14.880 0이라는 숫자가 들어가는 걸 볼 수가 있습니다 339 00:18:14.880 --> 00:18:17.279 여기에 우리가 원하는 숫자를 넣으면 돼요 340 00:18:17.279 --> 00:18:21.520 100이라는 숫자를 한번 넣어 보도록 할게요 341 00:18:21.520 --> 00:18:25.320 Integer니까, 정수를 담는 변수니까 342 00:18:25.320 --> 00:18:27.000 100이라는 숫자 입력이 되죠 343 00:18:27.000 --> 00:18:28.360 만약에 여기다 소수점을 한번 넣어볼게요 344 00:18:28.360 --> 00:18:29.839 소수점은 정수가 아니죠 345 00:18:29.839 --> 00:18:32.639 만약에 100.1이다라고 하면 346 00:18:32.639 --> 00:18:38.520 뒤에 있는 .1은 탈락되게 됩니다 347 00:18:38.520 --> 00:18:43.279 이 상태에서 다시 수정이 됐으니까 Compile, 저장하고 348 00:18:43.279 --> 00:18:48.520 이 변수를 Print String에다가 연결을 해 보도록 할게요 349 00:18:48.520 --> 00:18:53.220 변수를 잡고 이 빈 공간에다가 350 00:18:53.220 --> 00:18:54.399 드래그&드롭을 해 볼게요 351 00:18:54.399 --> 00:18:59.800 드래그&드롭 하면 두 가지 선택지가 나와요 352 00:18:59.800 --> 00:19:04.960 Get Number1은 이 변수를 가지고 올 것이다 353 00:19:04.960 --> 00:19:11.279 Set Number1은 이 변수에 특정한 값을 입력할 것이다 354 00:19:11.279 --> 00:19:13.879 우리는 이 변수의 값을 가져오는 것이니까 355 00:19:13.879 --> 00:19:17.600 Get Number1을 선택하면 되겠죠 356 00:19:17.600 --> 00:19:22.359 그럼 이렇게 캡슐 모양의 노드가 생성이 됩니다 357 00:19:22.359 --> 00:19:24.600 이 캡슐 모양은 데이터 노드 라고 생각하시면 돼요 358 00:19:24.600 --> 00:19:28.519 여기에는 어떤 값들이 담겨 있어요 359 00:19:28.519 --> 00:19:31.920 데이터가 담겨 있으니까 데이터 핀 하나밖에 없죠 360 00:19:31.920 --> 00:19:33.470 그래서 이 데이터 핀을 361 00:19:33.470 --> 00:19:38.480 Print String에다가 연결을 시켜 주도록 할게요 362 00:19:38.480 --> 00:19:44.040 데이터 핀을 빼서 스트링에다가 이렇게 연결을 하겠습니다 363 00:19:44.040 --> 00:19:50.840 연결을 하면 이렇게 중간에 우리가 원하지 않은 364 00:19:50.840 --> 00:19:53.640 노드 하나가 생성되는 걸 볼 수가 있어요 365 00:19:53.640 --> 00:19:57.880 이걸 변환 노드라고 하는데 우리가 만든 변수는 Integer 366 00:19:57.880 --> 00:20:01.640 즉 정수만을 담은 변수에요, 즉 정수 데이터인거죠 367 00:20:01.640 --> 00:20:04.290 하지만 Print String 노드에는 368 00:20:04.290 --> 00:20:06.040 In String이라고 되어 있어요 369 00:20:06.040 --> 00:20:09.440 즉 스트링 변수, 스트링 데이터 타입만 370 00:20:09.440 --> 00:20:12.160 꽂아 넣게끔 되어 있는 것이죠 371 00:20:12.160 --> 00:20:14.542 그래서 서로 데이터가 맞지 않기 때문에 372 00:20:14.542 --> 00:20:16.742 이 데이터를 서로에 맞게끔 373 00:20:16.742 --> 00:20:19.000 변환시켜주는 작업을 해줘야 돼요 374 00:20:19.000 --> 00:20:22.000 그 역할을 하는 게 바로 이 변환 노드고요 375 00:20:22.000 --> 00:20:23.243 언리얼 엔진 같은 경우는 376 00:20:23.243 --> 00:20:25.480 이 변환 노드를 자동적으로 만들어줘서 377 00:20:25.480 --> 00:20:29.679 편리하게 작업할 수 있도록 도와주고 있죠 378 00:20:29.679 --> 00:20:30.760 바로 한번 확인해 볼까요 379 00:20:30.760 --> 00:20:33.260 Compile, 저장하고 380 00:20:33.260 --> 00:20:37.359 다시 레벨에 들어가서 플레이 버튼을 누르면 381 00:20:37.359 --> 00:20:40.309 좌측 상단에 이렇게 100이라는 숫자가 382 00:20:40.309 --> 00:20:42.519 출력이 되는 걸 볼 수가 있습니다 383 00:20:42.519 --> 00:20:45.200 또 다른 변수를 한번 또 만들어 보도록 하죠 384 00:20:45.200 --> 00:20:50.880 이번에는 VARIABLES의 + 버튼을 눌러서 385 00:20:50.880 --> 00:20:56.720 Number2라고 하는 자료형 그릇을 만들고요 386 00:20:56.720 --> 00:21:02.770 이번에는 Integer가 아니라 Float이라는 자료형을 387 00:21:02.770 --> 00:21:05.679 선택을 해 보도록 할게요 388 00:21:05.679 --> 00:21:10.200 Float은 실수를 의미합니다, 실수 389 00:21:10.200 --> 00:21:13.880 실수는 소수점을 포함한 숫자를 의미하죠 390 00:21:13.880 --> 00:21:16.638 당연히 정수 1, 2, 3, 4도 포함되지만 391 00:21:16.638 --> 00:21:18.959 소수점, .5, .14 392 00:21:18.959 --> 00:21:22.959 뭐 이런 소수점 이하의 숫자도 포함되는 393 00:21:22.959 --> 00:21:26.259 정수보다는 조금 더 큰 범위의 숫자라고 하시면 394 00:21:26.259 --> 00:21:26.920 좋을 것 같아요 395 00:21:26.920 --> 00:21:31.519 그래서 Compile, 저장을 하고요 396 00:21:31.519 --> 00:21:33.679 이 Number2 변수를 가져오도록 할게요 397 00:21:33.679 --> 00:21:37.920 드래그&드롭, Get Number2 398 00:21:37.920 --> 00:21:39.519 이 스트링에다가 연결해 볼게요 399 00:21:39.519 --> 00:21:42.959 드래그&드롭으로 이렇게 연결해 보도록 하겠습니다 400 00:21:42.959 --> 00:21:45.959 역시 마찬가지로 자료형이 401 00:21:45.959 --> 00:21:48.000 이 데이터 타입이 다르기 때문에 402 00:21:48.000 --> 00:21:50.959 변환 노드가 자동적으로 생성된 걸 볼 수가 있죠 403 00:21:50.959 --> 00:21:52.559 아 숫자를 입력 안 했군요 404 00:21:52.559 --> 00:21:57.640 숫자는, 기본 숫자는, 이 변수의 기본 값은 405 00:21:57.640 --> 00:21:59.790 보시면 이렇게 0.0으로 406 00:21:59.790 --> 00:22:02.799 소수점도 포함될 수 있어라는 걸 보여주고 있죠 407 00:22:02.799 --> 00:22:03.555 한번 이렇게 써볼게요 408 00:22:03.555 --> 00:22:06.640 3.14라고 이렇게 한번 써볼게요 409 00:22:06.640 --> 00:22:08.992 이 상태에서 Compile, 저장하고 410 00:22:08.992 --> 00:22:11.880 다시 돌아와서 플레이를 해 보면 411 00:22:11.880 --> 00:22:16.640 이렇게 3.14가 출력되는 것을 볼 수가 있습니다 412 00:22:16.640 --> 00:22:19.340 이런 기능들을 추가할 때는 반드시 이 플레이가 413 00:22:19.340 --> 00:22:21.399 정지되어 있는 상태여야 합니다 414 00:22:21.399 --> 00:22:26.839 그래야 제대로 된 기능을 작성할 수가 있어요 415 00:22:26.839 --> 00:22:28.920 변수 하나를 더 만들어 볼게요 416 00:22:28.920 --> 00:22:31.070 + 버튼을 눌러서 이번에는 417 00:22:31.070 --> 00:22:38.600 Text1이라고 하는 이름의 변수를 하나 만들게요 418 00:22:38.600 --> 00:22:42.359 이름에서도 알 수 있듯이 이번에는 글자를 담을 거예요 419 00:22:42.359 --> 00:22:46.359 글자는 우리 Print String에서 잠깐 언급을 했지만 420 00:22:46.359 --> 00:22:50.920 이 String이라는 자료형을 통해서 글자, 문자를 담습니다 421 00:22:50.920 --> 00:22:55.278 드래그&드롭 해서 Get Text1이라고 하는 422 00:22:55.278 --> 00:22:57.720 변수를 꺼내고 연결을 해 볼게요 423 00:22:57.720 --> 00:23:01.270 이렇게 연결을 하면 같은 스트링이기 때문에 424 00:23:01.270 --> 00:23:03.239 중간에 변화 노드가 없죠 425 00:23:03.239 --> 00:23:06.119 바로 연결되는 걸 볼 수가 있을 거에요 426 00:23:06.119 --> 00:23:08.469 그런데 이 연결되어 있는 선이 427 00:23:08.469 --> 00:23:11.040 이 변환 노드들을 가로질러 좀 지저분하죠 428 00:23:11.040 --> 00:23:13.640 그래서 이 선을 정리 좀 해 볼게요 429 00:23:13.640 --> 00:23:18.399 옆으로 살짝 빼서 이 선 사이에 마우스를 올려 놓고 430 00:23:18.399 --> 00:23:21.149 더블 클릭을 하면, 따닥 클릭을 하면 431 00:23:21.149 --> 00:23:24.200 새로운 점이 하나 생깁니다 432 00:23:24.200 --> 00:23:26.279 새로운 핀이 하나 생기게 되고요 433 00:23:26.279 --> 00:23:28.559 이 핀을 잡고 이동할 수가 있어요 434 00:23:28.559 --> 00:23:32.919 이렇게 옮기게 되면 복잡하지 않게 정리할 수 있게 돼요 435 00:23:32.919 --> 00:23:37.159 이 Text에 아직 우리가 값을 정하지 않았네요 436 00:23:37.159 --> 00:23:40.409 그래서 Compile, 저장하고 437 00:23:40.409 --> 00:23:44.989 언리얼 엔진이라고 할까요? 언리얼 엔진 438 00:23:44.989 --> 00:23:50.280 이 문자열은 한글도 입력이 가능합니다 439 00:23:50.280 --> 00:23:52.580 이 상태에서 Compile을 하고 440 00:23:52.580 --> 00:23:54.599 다시 저장을 하고요 441 00:23:54.599 --> 00:23:57.999 다시 플레이를 하면 이런 식으로 442 00:23:57.999 --> 00:24:00.349 언리얼 엔진이라는 문구가 443 00:24:00.349 --> 00:24:03.599 출력이 되는 걸 알 수가 있습니다 444 00:24:03.599 --> 00:24:11.520 이번에는 참과 거짓을 판별하는 논리 자료형이 있어요 445 00:24:11.520 --> 00:24:14.520 사람입니까? 사람이 아닙니까? 이런 것들 446 00:24:14.520 --> 00:24:18.119 플레이 중입니까? 플레이가 아닙니까? 라고 하는 447 00:24:18.119 --> 00:24:21.769 참과 거짓을, 기다 아니다를 알려주는 448 00:24:21.769 --> 00:24:25.239 그런 정보값을 담는 그런 변수가 있어요 449 00:24:25.239 --> 00:24:28.440 논리 자료형인데 450 00:24:28.440 --> 00:24:35.239 그래서 이름을 is, 사람입니까? man이라고 할게요 451 00:24:35.239 --> 00:24:39.400 이 논리 자료형은 뭐냐면 위에 있는 Boolean입니다 452 00:24:39.400 --> 00:24:42.840 우리 맨 처음에 변수 만들 때 Boolean을 잠깐 봤었죠 453 00:24:42.840 --> 00:24:45.090 이 Boolean이 바로 아까 얘기했던 454 00:24:45.090 --> 00:24:50.239 참과 거짓을 담는 변수에요 455 00:24:50.239 --> 00:24:52.639 그래서 이 내용하고는 상관이 없이 456 00:24:52.639 --> 00:24:54.599 이게 뭐 사람이냐 사람이 아니냐 457 00:24:54.599 --> 00:24:56.144 플레이 중이냐 플레이 중이 아니냐 458 00:24:56.144 --> 00:24:57.760 뭐 이런 것과는 상관이 없이 459 00:24:57.760 --> 00:25:02.039 맞다 아니다의 정보만 이 안에다가 담는 거예요 460 00:25:02.039 --> 00:25:05.880 Compile을 해서 분류값을 보면 461 00:25:05.880 --> 00:25:07.559 Is Man이라고 하는 변수 이름이 있고요 462 00:25:07.559 --> 00:25:10.760 오른쪽에 보면 체크 박스가 이렇게 있는 걸 볼 수가 있습니다 463 00:25:10.760 --> 00:25:16.000 그래서 비활성화되어 있다면 False, 거짓을 의미하고요 464 00:25:16.000 --> 00:25:22.440 체크가 되어 있다면 True, 참을 저장을 한 거예요 465 00:25:22.440 --> 00:25:24.140 이 변수에다가 466 00:25:24.140 --> 00:25:25.880 그래서 지금 체크를 했으니까 467 00:25:25.880 --> 00:25:29.640 True, 참 값이 변수에 저장이 된 거죠 468 00:25:29.640 --> 00:25:35.640 이렇게 해놓고 이 변수를 가지고 와서 469 00:25:35.640 --> 00:25:37.479 연결을 해 보도록 할게요 470 00:25:37.479 --> 00:25:43.599 Bool값이니까 이런 식으로 변환 노드가 나오게 되고요 471 00:25:43.599 --> 00:25:46.719 이 상태에서 Compile, 저장하고 플레이를 해 보면 472 00:25:46.719 --> 00:25:50.520 이런 식으로 True 값이 출력이 되는 걸 볼 수가 있습니다 473 00:25:50.520 --> 00:25:52.080 아까 우리가 체크를 했었죠 474 00:25:52.080 --> 00:25:56.840 체크는 곧 True, 참이다라고 얘기를 했었어요 475 00:25:56.840 --> 00:26:00.840 반면에 이 변수의 값을 476 00:26:00.840 --> 00:26:03.799 체크를 취소해서 False로 만들어 준다면 477 00:26:03.799 --> 00:26:07.080 Compile, 저장, 플레이를 해 보면 478 00:26:07.080 --> 00:26:11.599 이런 식으로 False라고 하는 값이 출력이 됩니다 479 00:26:11.599 --> 00:26:14.280 네 가지 변수에 대해서 알아 봤는데요 480 00:26:14.280 --> 00:26:16.830 이 네 가지 변수만 알아도 우리는 481 00:26:16.830 --> 00:26:20.280 많은 작업들을 할 수가 있게 됩니다 482 00:26:20.280 --> 00:26:24.679 이번에는 변수 말고, 이 변수를 활용해서 483 00:26:24.679 --> 00:26:26.330 어떤 기능들을 만들 수 있는 484 00:26:26.330 --> 00:26:29.119 어떤 제어문들에 대해서 알아보도록 할 거예요 485 00:26:29.119 --> 00:26:32.236 제어를 한다는 것은 이 변수들을 가지고 486 00:26:32.236 --> 00:26:34.159 지지고 볶고 한다는 얘기죠 487 00:26:34.159 --> 00:26:36.559 그래서 일단 가장 간단한 488 00:26:36.559 --> 00:26:39.960 사칙 연산부터 좀 해 보도록 할게요 489 00:26:39.960 --> 00:26:43.039 이 변수들은 소개를 위해서 만들었으니까 490 00:26:43.039 --> 00:26:48.280 새롭게 변수를 만들면서 시작을 해 보도록 하겠습니다 491 00:26:48.280 --> 00:26:49.719 일단 + 버튼을 누르고 492 00:26:49.719 --> 00:26:52.159 이번에는, Number를 먼저 썼군요 493 00:26:52.159 --> 00:26:56.280 Num이라고 하는, 숫자 01로 이름을 새로 만들고 494 00:26:56.280 --> 00:27:00.980 이것은 자료형을 Integer 495 00:27:00.980 --> 00:27:02.520 정수가 조금 개선하기 편하니까 496 00:27:02.520 --> 00:27:05.159 Integer로 만들어 보도록 하겠습니다 497 00:27:05.159 --> 00:27:08.709 Compile을 하고 이 숫자에는 498 00:27:08.709 --> 00:27:11.840 100이라는 숫자를 입력을 할게요 499 00:27:11.840 --> 00:27:13.599 그리고 변수 하나를 더 만들게요 500 00:27:13.599 --> 00:27:19.771 VARIABLES 클릭, 이름은 Num02라고 할게요 501 00:27:19.771 --> 00:27:24.760 역시 마찬가지 Integer로 하도록 하겠습니다 502 00:27:24.760 --> 00:27:27.280 역시 마찬가지로 Compile 버튼을 누르고 503 00:27:27.280 --> 00:27:32.719 이 변수에는 50이라는 숫자를 한번 담아보도록 할게요 504 00:27:32.719 --> 00:27:35.599 사칙 연산 중에 더하기를 하게 되면 150이 되겠죠 505 00:27:35.599 --> 00:27:39.840 이런 식으로 편하게 하기 위해서 506 00:27:39.840 --> 00:27:45.280 그러면 여기에 있는 이 두 변수를 가지고 와 볼게요 507 00:27:45.280 --> 00:27:50.080 드래그&드롭해서 Get Number1, Get Number2를 508 00:27:50.080 --> 00:27:53.960 가져오도록 하겠습니다 509 00:27:53.960 --> 00:27:57.039 이 두 숫자를 더해 볼게요 510 00:27:57.039 --> 00:28:01.789 어떻게 더하냐면 빈 곳에 우클릭을 해서 511 00:28:01.789 --> 00:28:04.440 add라고 검색을 하게 되면 512 00:28:04.440 --> 00:28:05.990 Operators 라고 하는 것 중에 513 00:28:05.990 --> 00:28:08.280 Add라고 하는 노드가 있어요 514 00:28:08.280 --> 00:28:11.039 Add를 선택을 하면 이런 노드가 있죠 515 00:28:11.039 --> 00:28:15.000 이 노드는 이 왼쪽에 있는 입력 핀을 더해서 516 00:28:15.000 --> 00:28:17.600 더한 결과 값을 내보내주는 517 00:28:17.600 --> 00:28:19.880 그런 노드라고 생각하시면 좋아요 518 00:28:19.880 --> 00:28:23.372 그래서 왼쪽 위에 Num01, Num02 519 00:28:23.372 --> 00:28:26.679 아래쪽에 Num02를 이렇게 입력하면 되겠죠 520 00:28:26.679 --> 00:28:28.879 그리고 이 결과물을 다시 521 00:28:28.879 --> 00:28:31.320 Print String에 이렇게 연결을 하면 522 00:28:31.320 --> 00:28:36.479 이렇게 변환을 통해서 523 00:28:36.479 --> 00:28:39.960 Print String에 연결되는 걸 볼 수가 있어요 524 00:28:39.960 --> 00:28:42.359 Compile을 하고 확인해 볼까요 525 00:28:42.359 --> 00:28:44.609 더하기를 했으니까, 100+50이니까 526 00:28:44.609 --> 00:28:46.679 150이 출력이 될 거예요 527 00:28:46.679 --> 00:28:50.320 봅시다, 플레이를 해 봅시다 528 00:28:50.320 --> 00:28:54.320 어때요? 150이 출력이 되죠 529 00:28:54.320 --> 00:28:57.039 우리는 더하기를 해 본 거예요, 간단하죠? 530 00:28:57.039 --> 00:28:59.828 이 외에도 더하기 노드는 531 00:28:59.828 --> 00:29:01.479 더하기를 하면 더하기가 되는 거고요 532 00:29:01.479 --> 00:29:03.559 똑같아요 533 00:29:03.559 --> 00:29:05.719 마이너스, 영어로는 subtract죠 534 00:29:05.719 --> 00:29:08.119 subtract라고 검색을 하면 이런 식으로 535 00:29:08.119 --> 00:29:10.799 마이너스 노드 사용법은 똑같습니다 536 00:29:10.799 --> 00:29:14.599 마이너스 노드도 연결해서 출력이 가능하고 537 00:29:14.599 --> 00:29:16.039 곱하기도 마찬가지예요 538 00:29:16.039 --> 00:29:21.159 multiply라고 검색을 하면 이런 식으로 539 00:29:21.159 --> 00:29:24.880 Multiply, 곱하기 노드도 꺼내서 사용할 수 있게 됩니다 540 00:29:24.880 --> 00:29:27.239 방법은 역시 똑같아요 541 00:29:27.239 --> 00:29:28.599 나누기도 마찬가지겠죠 542 00:29:28.599 --> 00:29:31.679 우클릭해서 divide라고 검색을 하면 543 00:29:31.679 --> 00:29:34.440 이런 식으로 나누기 노드가 생성이 되고 544 00:29:34.440 --> 00:29:40.320 똑같은 방식으로 두 변수를 나눈 결과 값을 연결해서 545 00:29:40.320 --> 00:29:42.599 최종 결과물을 볼 수가 있게 됩니다 546 00:29:42.599 --> 00:29:46.400 여기서 이제 중요한 것은 더하기 노드를 만들어서 547 00:29:46.400 --> 00:29:47.880 결과물을 보고 싶은데 548 00:29:47.880 --> 00:29:50.320 지금 같은 경우에 들어와서 이 변수에다가 549 00:29:50.320 --> 00:29:58.722 지금 102번에는 50이라는 변수의 숫자를 넣었는데 550 00:29:58.722 --> 00:30:00.841 Compile하고 저장하고 551 00:30:00.841 --> 00:30:05.180 플레이를 해보고 하는 과정들이 조금은 복잡하죠 552 00:30:05.180 --> 00:30:08.780 그냥 이 레벨 안에서 바로 설정을 하고 553 00:30:08.780 --> 00:30:10.940 바로 결과값을 봤으면 좋겠는데 554 00:30:10.940 --> 00:30:14.390 보려면 또 블루프린트 안으로 들어가서 555 00:30:14.390 --> 00:30:17.125 설정해주고 Compile해주고 왔다갔다하기가 556 00:30:17.125 --> 00:30:20.420 여간 번거로운 게 아닐 겁니다 557 00:30:20.420 --> 00:30:25.370 그래서 이 노드를 이 외부에다가 노출시키는 558 00:30:25.370 --> 00:30:28.420 그런 기능을 제공하고 있어요 559 00:30:28.420 --> 00:30:31.601 보시면 560 00:30:31.601 --> 00:30:32.951 우리는 더하기에 지금 561 00:30:32.951 --> 00:30:36.240 Num01과 Num02 변수를 사용하고 있죠 562 00:30:36.240 --> 00:30:40.759 오른쪽에 보시면 여기 눈을 감은 표시가 있죠 563 00:30:40.759 --> 00:30:42.693 이 아이콘을 클릭을 하면 이렇게 564 00:30:42.693 --> 00:30:48.232 눈을 뜬 표시로 바뀌게 됩니다 565 00:30:48.232 --> 00:30:50.132 이렇게 되면 어떻게 되냐면 566 00:30:50.132 --> 00:30:53.219 Compile해서 저장해서 보시면 567 00:30:53.219 --> 00:30:55.119 우리가 올려놓아 있는 568 00:30:55.119 --> 00:30:59.060 BP_Basic이라고 하는 이 액터를 선택해서 569 00:30:59.060 --> 00:31:01.410 이 Details 창을 보시면 이렇게 570 00:31:01.410 --> 00:31:03.540 Default라고 하는 항목에 571 00:31:03.540 --> 00:31:05.890 Num01이라고 하는 변수가 572 00:31:05.890 --> 00:31:08.059 노출되어 있는 걸 볼 수가 있어요 573 00:31:08.059 --> 00:31:10.259 값도 100 이라는 숫자가 들어가 있는 걸 574 00:31:10.259 --> 00:31:14.081 확인해 볼 수가 있죠 575 00:31:14.081 --> 00:31:18.190 간단하죠? 그럼 두 번째도 한번 노출시켜 볼게요 576 00:31:18.190 --> 00:31:24.480 이 버튼을 클릭, 혹은 이 버튼은 Details 창에 보시면 577 00:31:24.480 --> 00:31:26.580 이 변수를 선택하고 나서 578 00:31:26.580 --> 00:31:29.120 이 블루프린트 창의 Details 창을 보시면 579 00:31:29.120 --> 00:31:32.360 Instance Editable이라고 하는 항목이 있을 겁니다 580 00:31:32.360 --> 00:31:35.760 여기가 체크된 걸 볼 수가 있어요 581 00:31:35.760 --> 00:31:41.720 눈을 감으면 체크가 풀린 걸 볼 수 있죠 582 00:31:41.720 --> 00:31:43.789 반대로 여기를 체크를 하면 583 00:31:43.789 --> 00:31:46.000 이렇게 눈이 켜져 있는 걸 볼 수가 있을 겁니다 584 00:31:46.000 --> 00:31:50.699 여기에 있는 이 항목이 외부에 노출시켜 줄 수 있는 585 00:31:50.699 --> 00:31:53.260 그런 항목이라고 보시면 돼요 586 00:31:53.260 --> 00:31:55.500 그래서 Compile하고 저장해서 보시면 587 00:31:55.500 --> 00:31:59.300 이제 우리가 올려놓은 이 액터를 선택하면 588 00:31:59.300 --> 00:32:01.750 이 Details 창에 이렇게 두 가지 변수의 값이 589 00:32:01.750 --> 00:32:04.379 노출된 걸 볼 수가 있습니다 590 00:32:04.379 --> 00:32:06.139 한번 바꿔볼까요? 591 00:32:06.139 --> 00:32:08.979 얘를 300 이라고 한번 해볼게요 592 00:32:08.979 --> 00:32:10.300 그럼 얼마가 될까요 593 00:32:10.300 --> 00:32:13.217 지금 더하기 노드가 되어 있으니까 400이 되겠네요 594 00:32:13.217 --> 00:32:16.767 플레이를 해보면 이렇게 400이라는 숫자가 595 00:32:16.767 --> 00:32:18.199 출력이 되는 걸 볼 수가 있죠 596 00:32:18.199 --> 00:32:20.399 간편하죠 597 00:32:20.399 --> 00:32:23.119 변수를 이용해서 사칙 연산을 해봤죠 598 00:32:23.119 --> 00:32:27.240 이번에는 조건문에 대해서 알아보도록 할게요 599 00:32:27.240 --> 00:32:31.119 조건문은 만일 ~~하면 ~~한다라는 구조로 600 00:32:31.119 --> 00:32:35.360 대부분의 프로그래밍은 사칙 연산들처럼 601 00:32:35.360 --> 00:32:37.160 무조건 실행하는 경우보다는 602 00:32:37.160 --> 00:32:40.104 특정한 조건이 충족이 될 때만 603 00:32:40.104 --> 00:32:42.110 실행하는 경우가 훨씬 많아요 604 00:32:42.110 --> 00:32:45.500 예를 들면 그냥 문이 열렸다가 아니라 605 00:32:45.500 --> 00:32:48.660 버튼을 눌렀을 때 문이 열렸다 606 00:32:48.660 --> 00:32:51.779 혹은 무조건 적을 이렇게 생성하는 것이 아니라 607 00:32:51.779 --> 00:32:54.339 2초가 되면 적이 생성되라 608 00:32:54.339 --> 00:32:56.699 뭐 이런 경우죠 609 00:32:56.699 --> 00:33:00.580 그래서 간단하게 조건문 예제를 한번 만들어서 610 00:33:00.580 --> 00:33:02.779 그거대로 한번 만들어 보도록 할게요 611 00:33:02.779 --> 00:33:04.779 우리는 어떻게 할 거냐면 612 00:33:04.779 --> 00:33:09.820 Num01이라는 변수와 Num02라는 변수를 비교해서 613 00:33:09.820 --> 00:33:13.120 만일 Num01이라고 하는 숫자가 614 00:33:13.120 --> 00:33:16.800 Num02보다 훨씬 더 크다면 615 00:33:16.800 --> 00:33:20.279 Num01이 더 큽니다라는 메시지를 출력을 하고요 616 00:33:20.279 --> 00:33:24.600 그렇지 않고 Num02가 크다면 617 00:33:24.600 --> 00:33:27.479 비교해서 Num02가 더 크다면 618 00:33:27.479 --> 00:33:31.240 즉 Num01이 Num02보다 크지 않다면 619 00:33:31.240 --> 00:33:34.440 2번이 더 큽니다를 출력하도록 620 00:33:34.440 --> 00:33:38.611 이런 조건을 한번 붙여 보도록 할 거예요 621 00:33:38.611 --> 00:33:41.229 그러기 위해서는 일단은 622 00:33:41.229 --> 00:33:43.820 앞에 있는 더하기는 지우도록 하고요 623 00:33:43.820 --> 00:33:46.139 이 두 변수를 비교해서 624 00:33:46.139 --> 00:33:51.020 그 결과물에 따라서 다른 것을 출력하도록 하는 거니까 625 00:33:51.020 --> 00:33:54.100 어쨌거나 비교를 해야겠죠 626 00:33:54.100 --> 00:33:57.339 이 두 변수를 비교해야 됩니다 627 00:33:57.339 --> 00:34:02.100 그래서 두 변수를 비교하는 노드를 꺼내줄게요 628 00:34:02.100 --> 00:34:06.940 우클릭해서, 우리는 아마 수학시간에서 배웠을 거예요 629 00:34:06.940 --> 00:34:10.000 비교하는 것, 무엇무엇보다 크다 630 00:34:10.000 --> 00:34:13.320 혹은 무엇보다 작다, 꺽쇠로 표현하죠 631 00:34:13.320 --> 00:34:16.225 키보드에 꺽쇠를 이렇게 누르면 이런 식으로 632 00:34:16.225 --> 00:34:20.160 Greater라고 하는 노드를 꺼낼 수가 있게 됩니다 633 00:34:20.160 --> 00:34:22.679 이렇게요 634 00:34:22.679 --> 00:34:25.640 그래서 위에 있는 핀에 Num01을 이렇게 넣고 635 00:34:25.640 --> 00:34:28.920 아래쪽에다가 밑에 있는 변수를 이렇게 넣으면 636 00:34:28.920 --> 00:34:33.920 Num01이 Num02보다 큽니까라는 637 00:34:33.920 --> 00:34:37.700 그런 노드가 만들어진 거예요 638 00:34:37.700 --> 00:34:40.619 이것을 비교 연산자라고 이야기합니다 639 00:34:40.619 --> 00:34:43.260 그래서 크다도 있겠지만 640 00:34:43.260 --> 00:34:46.459 우리 수학시간에 배우는 것처럼 작다도 있고요 641 00:34:46.459 --> 00:34:47.619 Less가 있죠 642 00:34:47.619 --> 00:34:49.540 이렇게 작다도 있고 643 00:34:49.540 --> 00:34:52.059 그 다음에 크거나 같다 이런 것도 있었죠 644 00:34:52.059 --> 00:34:55.820 크거나 같다, Greater, Equal 이런 것도 있죠 645 00:34:55.820 --> 00:34:57.981 작거나 같다도 있겠죠 646 00:34:57.981 --> 00:34:59.559 그리고 이런 것도 있을 거에요 647 00:34:59.559 --> 00:35:01.079 같다도 있을 거에요 648 00:35:01.079 --> 00:35:05.720 같다는 우리는 일반적으로 = 이렇게 표현을 하지만 649 00:35:05.720 --> 00:35:09.160 일반적으로 코딩에서는 =은 대입 연산자라고 해서 650 00:35:09.160 --> 00:35:11.040 값을 집어넣는 것으로 사용합니다 651 00:35:11.040 --> 00:35:14.959 그래서 코딩은 같다라는 걸 표현하기에는 652 00:35:14.959 --> 00:35:16.839 ==이라는 것으로 표현합니다 653 00:35:16.839 --> 00:35:18.920 그래서 Equal이라는 노드가 이렇게 나와요 654 00:35:18.920 --> 00:35:21.920 ==이 나와요, == 655 00:35:21.920 --> 00:35:27.160 같다라는 것이 있다면 같지 않다라는 것도 있겠죠 656 00:35:27.160 --> 00:35:31.380 코드에서는 앞에 느낌표를 붙여요 657 00:35:31.380 --> 00:35:35.500 != 이라고 쓰면 658 00:35:35.500 --> 00:35:40.359 이게 not Equal, 같지 않다를 의미하게 됩니다 659 00:35:40.359 --> 00:35:45.500 이렇게 서로 두 정보를 비교할 수 있어요 660 00:35:45.500 --> 00:35:48.420 우리가 원하는 것은 이 앞에 있는 변수 661 00:35:48.420 --> 00:35:52.820 Num01 변수가 Num02 변수보다 크니?라는 걸 원하니까 662 00:35:52.820 --> 00:35:55.940 Greater 노드를 이용했어요 663 00:35:55.940 --> 00:35:58.760 이제 변수 두 개를 비교를 했죠 664 00:35:58.760 --> 00:36:00.480 그럼 이제 해야 될 것은 뭐냐면 665 00:36:00.480 --> 00:36:02.880 이 두 변수의 결과 값에 따라서 666 00:36:02.880 --> 00:36:06.760 Num01 변수가 크면 Num01이 크다를 출력하고 667 00:36:06.760 --> 00:36:09.610 Num02가 크다면 Num02가 크다라는 668 00:36:09.610 --> 00:36:11.600 문구를 출력해야 되는 669 00:36:11.600 --> 00:36:13.000 그런 작업을 해야 돼요 670 00:36:13.000 --> 00:36:15.650 그래서 이 비교 연산자를 통해서 나온 671 00:36:15.650 --> 00:36:17.200 이 결과 값을 통해서 672 00:36:17.200 --> 00:36:19.760 두 분기로 나눠지기 때문에 673 00:36:19.760 --> 00:36:22.579 또 하나의 노드가 필요하게 됩니다 674 00:36:22.579 --> 00:36:25.420 이때 필요한 노드가 뭐냐면 675 00:36:25.420 --> 00:36:31.179 Branch라고 하는 노드가 있어요 676 00:36:31.179 --> 00:36:32.980 그래서 Branch 노드를 꺼내고 677 00:36:32.980 --> 00:36:36.779 이 Branch 노드를 BeginPlay에서 실행해서 678 00:36:36.779 --> 00:36:40.579 바로 Branch에다가 연결을 해주는 거예요 679 00:36:40.579 --> 00:36:42.621 먼저 검사해, 무엇을? 680 00:36:42.621 --> 00:36:49.420 Num01과 Num02를 비교한 결과 값을 이렇게 검사해 681 00:36:49.420 --> 00:36:52.170 라고 해서 결과값을 이렇게 컨디션에다가 연결을 해줍니다 682 00:36:52.170 --> 00:36:55.640 그랬을 때 이 결과 값이 참이라면 683 00:36:55.640 --> 00:36:57.200 참이라는 얘기는 뭐냐면 684 00:36:57.200 --> 00:37:00.679 Num01이 Num02보다 크다 685 00:37:00.679 --> 00:37:03.040 어 맞아, 참이야 686 00:37:03.040 --> 00:37:10.079 Num01이 커 라고 하면 True로 가는 거고요 687 00:37:10.079 --> 00:37:15.119 Num01이 크지 않아라고 했으면 False, 거짓이구나 688 00:37:15.119 --> 00:37:16.519 False로 가게 되는 689 00:37:16.519 --> 00:37:18.519 그런 분기를 타게 되는 거라고 보시면 돼요 690 00:37:18.519 --> 00:37:20.480 그러면 이렇게 하면 되죠 691 00:37:20.480 --> 00:37:22.930 만약에 True, 맞아 692 00:37:22.930 --> 00:37:25.059 Num01과 Num02가 비교했을 때 693 00:37:25.059 --> 00:37:28.380 Num01이 더 큰게 맞아라고 하면 694 00:37:28.380 --> 00:37:31.270 이 True를 Print String으로 연결을 하는 겁니다 695 00:37:31.270 --> 00:37:33.179 이때 무엇을 출력하냐면 696 00:37:33.179 --> 00:37:40.779 Num01이 크다라는 걸 출력하는 거죠 697 00:37:40.779 --> 00:37:41.726 스펠링이 틀렸네요 698 00:37:48.132 --> 00:37:52.000 그리고 두 노드를 비교해서 699 00:37:52.000 --> 00:37:57.799 1보다 2가 더 크니? 아니, 2가 더 커라고 했을 때 700 00:37:57.799 --> 00:37:59.480 False가 나와야 되겠죠 701 00:37:59.480 --> 00:38:03.880 이 False 때는 Num02가 더 크다라는 걸 702 00:38:03.880 --> 00:38:05.559 출력을 하는 거니까 703 00:38:05.559 --> 00:38:07.399 이 노드를 그대로 복사해서 704 00:38:07.399 --> 00:38:09.949 Ctrl+C, Ctrl+V를 해서 705 00:38:09.949 --> 00:38:12.160 두 번째 노드에 연결을 해주고 706 00:38:12.160 --> 00:38:17.110 여기는 아니, Num02가 더 커 707 00:38:17.110 --> 00:38:21.059 이런 식으로 연결을 해줍니다 708 00:38:21.059 --> 00:38:24.859 이게 조건문이에요 709 00:38:24.859 --> 00:38:26.309 Branch를 이용해서 710 00:38:26.309 --> 00:38:29.500 앞에 있는 조건식에 있는 결과에 따라서 711 00:38:29.500 --> 00:38:33.619 그 결과의 값이 참이라면 True 실행 핀으로 연결해서 712 00:38:33.619 --> 00:38:35.619 이쪽을 실행하게 되고 713 00:38:35.619 --> 00:38:39.020 만약에 이 결과의 값이 거짓이라면 714 00:38:39.020 --> 00:38:41.940 이 밑에 있는 False의 실행 핀을 이용해서 715 00:38:41.940 --> 00:38:45.599 이 아래쪽에 있는 것은 실행하라 이렇게 되는 거죠 716 00:38:45.599 --> 00:38:48.559 Compile하고 저장하고 717 00:38:48.559 --> 00:38:50.320 지금 같은 경우에 보세요 718 00:38:50.320 --> 00:38:54.760 Num01에 100, Num02는 300이라는 숫자가 있으니까 719 00:38:54.760 --> 00:38:56.840 1하고 2하고 비교했을 때 720 00:38:56.840 --> 00:38:59.919 Num01이 Num02보다 크니?라고 물어봤는데 721 00:38:59.919 --> 00:39:01.919 지금 보면 아니죠 722 00:39:01.919 --> 00:39:03.239 거짓이죠? 723 00:39:03.239 --> 00:39:05.359 그러면 거짓 라인을 탈 거예요 724 00:39:05.359 --> 00:39:06.980 거짓 실행 핀을 탈 거니까 725 00:39:06.980 --> 00:39:10.130 아니, Num02가 더 커 726 00:39:10.130 --> 00:39:12.419 라는 게 아마 출력이 될 거예요 727 00:39:12.419 --> 00:39:15.700 봅시다, 플레이를 해 볼게요 728 00:39:15.700 --> 00:39:22.419 어때요? Num02가 더 크다라고 나오죠 729 00:39:22.419 --> 00:39:24.020 이번엔 반대로 해 볼게요 730 00:39:24.020 --> 00:39:27.900 100이 아니라 500으로 가 볼게요 731 00:39:27.900 --> 00:39:29.460 Num01이 더 크죠? 732 00:39:29.460 --> 00:39:30.940 Num02보다 Num01이 더 크니까 733 00:39:30.940 --> 00:39:33.739 이번에는 참이 나올 거예요 734 00:39:33.739 --> 00:39:35.140 플레이를 해 볼게요 735 00:39:35.140 --> 00:39:42.440 그러면 이렇게 Num01이 더 크다라고 나오네요 736 00:39:42.440 --> 00:39:48.599 어떠한 계산 결과가 그 값이 참이냐 거짓이냐에 따라서 737 00:39:48.599 --> 00:39:55.719 분기로 나누어지는 이런 구조, 조건문이었습니다 738 00:39:55.719 --> 00:40:00.559 그러면 사칙 연산도 알아봤고 739 00:40:00.559 --> 00:40:01.880 조건문에 대해서도 알아봤고요 740 00:40:02.389 --> 00:40:06.033 이벤트 그래프 실행 순서 741 00:40:06.683 --> 00:40:08.320 노드에 대해서도 알아봤는데 742 00:40:08.320 --> 00:40:12.840 이번에는 마지막으로 빨간색 노드에 대해서 알아보려고 해요 743 00:40:12.840 --> 00:40:16.159 이 빨간색 노드, 이벤트 노드라고 했었죠 744 00:40:16.159 --> 00:40:20.320 이벤트 노드는 아마 여러분들이 처음 745 00:40:20.320 --> 00:40:23.599 블루프린트 이벤트 그래프를 열었을 때 746 00:40:23.599 --> 00:40:28.320 이 3개의 노드가 만들어졌던 것을 기억하실 거예요 747 00:40:28.320 --> 00:40:32.330 이 노드는 전부 다 이벤트 노드라고 부르고요 748 00:40:32.330 --> 00:40:35.419 일반적인 노드는 왼쪽에서 실행 핀에 의해서 749 00:40:35.419 --> 00:40:39.140 이렇게 왼쪽에서 실행 핀에 의해서 호출돼서 750 00:40:39.140 --> 00:40:42.690 실행할 순서가 되면 오른쪽으로 이렇게 751 00:40:42.690 --> 00:40:44.820 실행되는 것에 반해서 752 00:40:44.820 --> 00:40:48.140 이런 이벤트 노드들은 왼쪽에 실행 핀이 없고 753 00:40:48.140 --> 00:40:54.219 언리얼 엔진 시스템에 의해서 자동적으로 실행이 돼요 754 00:40:54.219 --> 00:40:58.361 그럼 언제 이런 이벤트가 발생을 하게 되는 걸까요 755 00:40:58.361 --> 00:41:01.761 여기에는 이 사람과 연결을 좀 지으면 756 00:41:01.761 --> 00:41:03.359 이해하기가 좀 쉬울 거예요 757 00:41:03.359 --> 00:41:05.080 무슨 얘기냐 758 00:41:05.080 --> 00:41:09.679 사람은 태어나서 살다가 죽습니다 759 00:41:09.679 --> 00:41:12.799 보통 이런 사람의 생애에 대한 일련의 과정을 760 00:41:12.799 --> 00:41:17.000 생애 주기, Life Cycle이라고 불러요 761 00:41:17.000 --> 00:41:19.960 프로그래밍 엔진에서도 객체를 생성하면 762 00:41:19.960 --> 00:41:24.281 생성된 객체마다 이런 생애 주기, Life Cycle에 따라서 763 00:41:24.281 --> 00:41:27.691 특정 이벤트를 호출을 합니다 764 00:41:27.691 --> 00:41:30.419 그래서 객체가 최초로 생성되었을 때 765 00:41:30.419 --> 00:41:33.619 사람으로 치면 처음 태어났을 때죠 766 00:41:33.619 --> 00:41:37.179 딱 한 번, 한 번 호출되는 노드가 바로 767 00:41:37.179 --> 00:41:40.179 Event BeginPlay 노드예요 768 00:41:40.179 --> 00:41:44.260 그래서 최초 한 번 호출이 되죠 769 00:41:44.260 --> 00:41:48.820 그리고 반면에 객체가 파괴되지 않고 유지되는 동안 770 00:41:48.820 --> 00:41:50.913 사람으로 치면 태어난 이후에 771 00:41:50.913 --> 00:41:53.460 계속 살아가는 내내가 되겠죠 772 00:41:53.460 --> 00:41:56.059 이렇게 파괴되지 않고 유지되는 동안 773 00:41:56.059 --> 00:42:01.119 살아있는 동안 한 프레임마다 반복해서 호출되는 774 00:42:01.119 --> 00:42:04.039 이 Event Tick 노드가 있어요 775 00:42:04.039 --> 00:42:06.760 매 프레임마다 전체적인 코드를 다 계산하고 776 00:42:06.760 --> 00:42:09.479 매 프레임마다 계속 새로 갱신된 이미지를 777 00:42:09.479 --> 00:42:11.520 계속 보여주게 될 거예요 778 00:42:11.520 --> 00:42:17.479 그래서 우리는, 사용자는 움직임을 인지하게 되는 겁니다 779 00:42:17.479 --> 00:42:19.359 보통 움직인다고 얘기하는 것은 780 00:42:19.359 --> 00:42:22.209 Event Tick 호출을 통해서 781 00:42:22.209 --> 00:42:25.041 발현된다고 생각하시면 좋아요 782 00:42:25.041 --> 00:42:28.419 그리고 사람으로 치면 사망에 해당하는 783 00:42:28.419 --> 00:42:33.712 이런 객체가 파괴되기 직전에 호출되는 이런 노드는 784 00:42:33.712 --> 00:42:38.739 Event Destroyed라고 하는 노드가 있습니다 785 00:42:38.739 --> 00:42:41.340 이렇게 우리가 실습할 때는 786 00:42:41.340 --> 00:42:43.460 한 번만 실행하도록 하기 위해서 787 00:42:43.460 --> 00:42:46.700 이렇게 Event BeginPlay 노드에 788 00:42:46.700 --> 00:42:50.500 이런 실행 핀을, 다음 실행 핀을 연결을 했어요 789 00:42:50.500 --> 00:42:54.659 만약에 처음 호출되는 이런 BeginPlay가 아니라 790 00:42:54.679 --> 00:42:56.840 Event Tick, 저기 아래 있죠 791 00:42:56.840 --> 00:43:00.920 여기 Event Tick에다가 연결이 되면 어떨까요 792 00:43:00.920 --> 00:43:03.201 한번 가까이 볼까요 793 00:43:03.201 --> 00:43:06.679 이거는 잠시 끊고요 794 00:43:06.679 --> 00:43:13.500 잠시 끊고 이벤트 노드에다가 795 00:43:13.500 --> 00:43:16.200 Event BeginPlay는 796 00:43:23.123 --> 00:43:26.659 호출 되었습니다 797 00:43:26.659 --> 00:43:30.490 라고 하는 이 문구를 연결시켜 볼게요 798 00:43:30.490 --> 00:43:34.140 아마 처음에 우리는 Hello World라는 문구를 799 00:43:34.140 --> 00:43:35.859 한번 실행해 본 걸 기억할 거예요 800 00:43:35.859 --> 00:43:38.460 BeginPlay를 하면 한 번만 호출이 되겠죠 801 00:43:38.460 --> 00:43:41.202 Compile하고 저장하고 플레이를 해보면 802 00:43:41.202 --> 00:43:44.877 이렇게 한번 호출 되었습니다라고 803 00:43:44.877 --> 00:43:48.440 한번 호출이 되는 걸 볼 수가 있습니다 804 00:43:48.440 --> 00:43:53.200 이것을 Event Tick에다가 한번 연결해 볼게요 805 00:43:53.200 --> 00:43:56.359 어떤 일이 벌어지냐 806 00:43:56.359 --> 00:44:00.080 Compile하고 저장하고 플레이를 해보면 807 00:44:00.080 --> 00:44:02.280 왼쪽에 호출 되었습니다가 808 00:44:02.280 --> 00:44:04.919 계속 출력이 되는 걸 볼 수 있어요 809 00:44:04.919 --> 00:44:08.431 여기서 계속 누적이 되고 있는 거예요 810 00:44:08.431 --> 00:44:10.500 가장 위에 있는 호출 되었습니다가 811 00:44:10.500 --> 00:44:13.539 가장 마지막에 계산되었다고 보시면 될 거예요 812 00:44:13.539 --> 00:44:15.820 여기서부터 여기까지 지금 보시면 813 00:44:15.820 --> 00:44:18.700 지금 이렇게 읽고 있군요 814 00:44:18.700 --> 00:44:20.619 계속 이렇게 읽고 있는 걸 볼 수가 있죠 815 00:44:20.619 --> 00:44:23.900 한번 읽었으면 다시 또 돌아와서 또 한번 읽고 816 00:44:23.900 --> 00:44:29.780 또 한번 읽고 또 한번 읽고를 계속 하고 있다라는 것이 817 00:44:29.780 --> 00:44:33.600 이게 바로 Event Tick이라고 합니다 818 00:44:33.600 --> 00:44:37.000 그리고 보시면 이렇게 이벤트 819 00:44:37.000 --> 00:44:39.039 여기서 멈추고요 820 00:44:39.039 --> 00:44:41.589 Event ActorBeginOverlap이라고 821 00:44:41.589 --> 00:44:42.559 이야기하는 게 있는데 822 00:44:42.559 --> 00:44:46.000 이거는 충돌에 관련된 얘기에요 823 00:44:46.000 --> 00:44:50.960 Begin과 Tick 그 다음에 충돌에 관련된 이벤트는 824 00:44:50.960 --> 00:44:54.080 객체가 쭉 살아가기 때문에 기본적으로 있는 거예요 825 00:44:54.080 --> 00:44:55.760 언제든 충돌할 수도 있고 826 00:44:55.760 --> 00:44:58.100 살다보면 어떻게 부딪힐 수도 있고 하잖아요 827 00:44:58.100 --> 00:45:00.940 그래서 이 세 가지 이벤트 노드는 828 00:45:00.940 --> 00:45:04.380 항상 이렇게 먼저 나오게 됩니다 829 00:45:04.380 --> 00:45:06.619 하지만 보시면 알겠지만 Destroyed는 없어요 830 00:45:06.619 --> 00:45:11.179 왜냐하면 이 객체가 언제 사라질지 모르기 때문에 831 00:45:11.179 --> 00:45:12.739 부딪혀서 사라질 수도 있지만 832 00:45:12.739 --> 00:45:14.419 사라지지 않을 수도 있고요 833 00:45:14.419 --> 00:45:17.179 혹은 평생 사라지지 않을 수도 있기 때문에 834 00:45:17.179 --> 00:45:18.700 이 Destroyed 같은 경우는 835 00:45:18.700 --> 00:45:23.500 개발자가 원할 때 꺼내라고 되어 있어서 836 00:45:23.500 --> 00:45:27.490 기본적으로는 먼저 나와 있지는 않아요 837 00:45:27.490 --> 00:45:30.880 그래서 이렇게 세 가지가 나오게 되는 겁니다 838 00:45:30.880 --> 00:45:31.880 이제 아시겠죠? 839 00:45:31.880 --> 00:45:35.119 그럼 이제 블루프린트의 기초적인 이론은 840 00:45:35.119 --> 00:45:37.080 어느 정도는 다 다뤄본 것 같아요 841 00:45:37.080 --> 00:45:39.400 이 정도 기본 이론을 가지고 있으면 842 00:45:39.400 --> 00:45:41.520 웬만한 기능들은 만들어볼 수 있으니까 843 00:45:41.520 --> 00:45:45.239 다음 영상에서 간단한 기능들을 844 00:45:45.239 --> 00:45:48.599 이 이론을 토대로 해서 만들어보도록 할 거예요 845 00:45:48.599 --> 00:45:51.559 그럼 이번 시간에 학습한 내용을 정리해 보겠습니다 846 00:45:53.282 --> 00:45:54.132 블루프린트 및 블루프린트 스크립팅의 이해 블루프린트 복잡한 액터를 설계하도록 고안된 언리얼 고유의 설계 시스템 비주얼 스크립팅 시스템 847 00:45:54.132 --> 00:45:54.932 블루프린트 스크립팅 Content 폴더에 새 폴더 생성 후 BP로 저장 BP 폴더의 빈 공간에 마우스 우클릭 후 Blueprint Class 선택 848 00:45:54.932 --> 00:45:55.682 Actor 클래스 선택 후 BP_Basic으로 블루프린트 클래스 이름 설정 Event Graph 패널로 이동 후 빈 공간에 마우스 우클릭해 Print String 노드 생성 849 00:45:55.682 --> 00:45:56.482 Print String 노드에 Hello World 입력 후 Event BeginPlay 노드 실행 핀과 연결 BP_Basic 블루프린트 클래스를 드래그해 월드에 배치 850 00:45:56.482 --> 00:45:57.282 실행 시 뷰포트 좌측 상단에 'Hello World' 문구 제시되는 것 확인 노드의 구조 및 흐름 851 00:45:57.282 --> 00:45:58.104 블루프린트 노드 구성: 실행 핀(Excute Pin), 입력 핀(Input Pin), 출력 핀(Output Pin) 데이터 흐름은 좌에서 우로 실행 852 00:45:58.104 --> 00:45:58.854 데이터 타입 종류 및 블루프린트 사칙 연산 변수 각각의 데이터를 담아 놓을 수 있는 그릇 자료형(Data Type): 변수가 가질 수 있는 데이터의 종류 853 00:45:58.854 --> 00:45:59.754 기본 자료형: 프로그래밍 언어 제작 시 정해놓은 자료형 사용자 정의 자료형: 개발 상황에 따라 제작되는 자료형 854 00:45:59.754 --> 00:46:00.604 가장 많이 사용하는 기본 자료형: Float(실수), Integer(정수), String(문자열), Boolean(논리형) 855 00:46:00.604 --> 00:46:01.404 변수 입력하기 Variables 항목 [+] 버튼을 이용해 정수형 변수 Number1 선언하고 컴파일/저장 Number1 변수에 100 값 넣기 856 00:46:01.404 --> 00:46:02.254 Number1을 Event Graph에 Get Number1 변수를 드래그 앤 드롭 Number1의 출력 핀을 Print String의 In String 입력 핀에 연결 857 00:46:02.254 --> 00:46:03.123 컴파일/저장 후 실행해 좌측 상단에 '100'이 출력되는 것 확인 858 00:46:03.123 --> 00:46:04.373 블루프린트 사칙 연산 Variables 항목 [+] 버튼을 이용해 integer 자료형 Num01, Num02 변수 선언 Add 노드 추가 859 00:46:04.373 --> 00:46:05.623 입력 핀에 정수형 변수 Num01, Num02 추가 후 출력 핀을 In String 핀에 연결 빼기(Subtract), 곱하기(Multiply), 나누기(Divide)도 같은 방식 860 00:46:05.623 --> 00:46:06.873 조건문 '만일 ~하면 ~한다.'의 구조 (영어의 'if') 861 00:46:06.873 --> 00:46:08.078 Branch 노드 - 조건식의 결과에 따라 True/False로 실행의 흐름이 나뉘게 됨 두 값을 비교해서 어느 쪽이 큰지 출력하기 862 00:46:08.082 --> 00:46:09.782 이벤트 그래프 실행 순서 이벤트 그래프 실행 순서 생애주기(Life Cycle): 태어나서 살다가 죽는 주기 863 00:46:09.782 --> 00:46:11.382 생성된 객체마다 라이프 사이클에 따라 특정 이벤트를 호출함 처음 태어났을 때: [Event Begin Play] - 최초 1회 발생 864 00:46:11.382 --> 00:46:12.963 사는 동안: [Event Tick] - 1프레임마다 반복해서 호출, 매 프레임마다 갱신된 이미지를 계속 보여줌 죽을 때: [Event Destroyed] - 객체 파괴