[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.00,0:00:04.30,Default,,0000,0000,0000,,Unity 4.3에서 첫 2D 기능을 소개합니다. Dialogue: 0,0:00:04.30,0:00:06.30,Default,,0000,0000,0000,,이를 알아보기 위해 이 툴을 이용하여 Dialogue: 0,0:00:06.30,0:00:08.30,Default,,0000,0000,0000,,데모 프로젝트를 만들어봤습니다. Dialogue: 0,0:00:08.30,0:00:11.53,Default,,0000,0000,0000,,이 2D 플랫폼 게임은 Tower Bridge Defence라고 합니다. Dialogue: 0,0:00:11.53,0:00:13.78,Default,,0000,0000,0000,,외계인의 습격을 받은 영국의 타워 브리지를 Dialogue: 0,0:00:13.78,0:00:15.56,Default,,0000,0000,0000,,묘사하고 있습니다. Dialogue: 0,0:00:15.56,0:00:17.96,Default,,0000,0000,0000,,이는 스프라이트 및 물리 기반의 2D 샘플 레벨로 Dialogue: 0,0:00:17.96,0:00:20.22,Default,,0000,0000,0000,,유니티를 통해 어떻게 2D 게임을 만들 수 있는지 Dialogue: 0,0:00:20.22,0:00:23.47,Default,,0000,0000,0000,,보여드리고자 합니다. Dialogue: 0,0:00:23.47,0:00:25.47,Default,,0000,0000,0000,,이 비디오를 통해 데모에서 사용된 Dialogue: 0,0:00:25.47,0:00:28.18,Default,,0000,0000,0000,,배경과 전경 제작, 캐릭터, 효과, 카메라 추적, Dialogue: 0,0:00:28.18,0:00:30.18,Default,,0000,0000,0000,,애니메이션 및 스크립팅에 대해 Dialogue: 0,0:00:30.18,0:00:31.64,Default,,0000,0000,0000,,설명하겠습니다. Dialogue: 0,0:00:31.64,0:00:33.64,Default,,0000,0000,0000,,우선 유니티에서 2D를 어떻게 Dialogue: 0,0:00:33.65,0:00:36.14,Default,,0000,0000,0000,,사용하는지 기초부터 알아보겠습니다. Dialogue: 0,0:00:36.86,0:00:39.29,Default,,0000,0000,0000,,2D 작업을 위해서 가장 먼저 여러 설정에서 Dialogue: 0,0:00:39.29,0:00:41.22,Default,,0000,0000,0000,,Editor Behaviour Mode를 Dialogue: 0,0:00:41.22,0:00:43.04,Default,,0000,0000,0000,,2D로 설정해야 합니다. Dialogue: 0,0:00:43.04,0:00:45.04,Default,,0000,0000,0000,,이는 프로젝트 마법사의 드롭다운 메뉴를 사용하여 Dialogue: 0,0:00:45.04,0:00:47.04,Default,,0000,0000,0000,,새로운 프로젝트를 만들 때 설정하거나, 작업 중에 Dialogue: 0,0:00:47.04,0:00:49.54,Default,,0000,0000,0000,,상단 메뉴에서 Edit - Project Settings - Editor를 Dialogue: 0,0:00:49.54,0:00:53.17,Default,,0000,0000,0000,,선택하여 설정할 수 있습니다. Dialogue: 0,0:00:53.17,0:00:55.17,Default,,0000,0000,0000,,이렇게 하면 기본적으로 텍스처를 Dialogue: 0,0:00:55.17,0:00:57.17,Default,,0000,0000,0000,,스프라이트로 가져오게 되고 Dialogue: 0,0:00:57.17,0:00:59.63,Default,,0000,0000,0000,,Scene View는 2D 모드로 기본 설정됩니다. Dialogue: 0,0:00:59.63,0:01:01.63,Default,,0000,0000,0000,,이 설정으로 2D 게임 제작에 필요한 완전한 직교 뷰 Dialogue: 0,0:01:01.63,0:01:04.42,Default,,0000,0000,0000,,(orthographic view)가 제공됩니다. Dialogue: 0,0:01:04.42,0:01:06.81,Default,,0000,0000,0000,,또한 화면의 오른쪽 상단에 일반적으로 위치한 Dialogue: 0,0:01:06.81,0:01:09.20,Default,,0000,0000,0000,,3D 기즈모를 숨겨 더 넓은 작업 공간을 확보할 수 Dialogue: 0,0:01:09.20,0:01:11.94,Default,,0000,0000,0000,,있습니다. 이러한 설정 이외에도 2D 워크플로우는 Dialogue: 0,0:01:11.94,0:01:14.24,Default,,0000,0000,0000,,유니티의 기존 3D 게임 제작 방식을 Dialogue: 0,0:01:14.24,0:01:17.04,Default,,0000,0000,0000,,그대로 반영하도록 설계되었습니다. Dialogue: 0,0:01:17.04,0:01:19.04,Default,,0000,0000,0000,,즉, 이미 유니티에 대해 알고 있는 사용자라면 Dialogue: 0,0:01:19.04,0:01:21.04,Default,,0000,0000,0000,,2D 게임 제작을 바로 시작할 수 있는 유리한 위치를 Dialogue: 0,0:01:21.04,0:01:22.93,Default,,0000,0000,0000,,선점하신 겁니다. Dialogue: 0,0:01:22.93,0:01:24.93,Default,,0000,0000,0000,,유니티에서는 2D와 3D를 함께 섞어 사용할 수 있다는 점에 Dialogue: 0,0:01:24.93,0:01:27.22,Default,,0000,0000,0000,,주목할 필요가 있습니다. 예를 들어 Dialogue: 0,0:01:27.22,0:01:29.72,Default,,0000,0000,0000,,2D 게임에 3D 요소를 추가하고 싶다면(반대의 경우도 마찬가지) Dialogue: 0,0:01:29.72,0:01:32.87,Default,,0000,0000,0000,,아무런 문제 없이 진행할 수 있습니다. Dialogue: 0,0:01:33.37,0:01:35.50,Default,,0000,0000,0000,,데모 프로젝트를 살펴보면서 어떻게 완성되는지 Dialogue: 0,0:01:35.50,0:01:38.31,Default,,0000,0000,0000,,하나씩 살펴보도록 하죠. Dialogue: 0,0:01:38.81,0:01:40.81,Default,,0000,0000,0000,,우선은 샘플 레벨의 레벨 디자인을 Dialogue: 0,0:01:40.81,0:01:42.81,Default,,0000,0000,0000,,스케치하는 것으로 시작하여 Dialogue: 0,0:01:42.81,0:01:44.81,Default,,0000,0000,0000,,포토샵에서 레이아웃을 만드는 작업을 거칩니다. Dialogue: 0,0:01:45.31,0:01:47.31,Default,,0000,0000,0000,,만들어서 내보낸 레이어는 Dialogue: 0,0:01:47.31,0:01:49.31,Default,,0000,0000,0000,,새로운 스프라이트 유형으로 Dialogue: 0,0:01:49.31,0:01:51.31,Default,,0000,0000,0000,,유니티에 가져올 수 있습니다. Dialogue: 0,0:01:58.37,0:02:01.31,Default,,0000,0000,0000,,나중에 배경에 시차(parallax)를 생성하려면 Dialogue: 0,0:02:01.31,0:02:03.67,Default,,0000,0000,0000,,배경 요소의 일부를 분리해서 Dialogue: 0,0:02:03.67,0:02:06.52,Default,,0000,0000,0000,,Background Sorting Layer에 위치시킵니다. Dialogue: 0,0:02:06.52,0:02:09.66,Default,,0000,0000,0000,,유니티의 또 다른 2D 개발 기능입니다. Dialogue: 0,0:02:10.16,0:02:12.84,Default,,0000,0000,0000,,이 레이어에 모든 배경을 할당한 다음에는 Dialogue: 0,0:02:12.84,0:02:15.16,Default,,0000,0000,0000,,Sprite Renderer의 Order In Layer 속성을 이용하여 Dialogue: 0,0:02:15.16,0:02:17.38,Default,,0000,0000,0000,,정렬할 수 있습니다. Dialogue: 0,0:02:17.38,0:02:19.38,Default,,0000,0000,0000,,모든 위치가 지정되면 Dialogue: 0,0:02:19.38,0:02:21.38,Default,,0000,0000,0000,,Background Sorting Layer를 잠글 수 있습니다. Dialogue: 0,0:02:21.38,0:02:23.38,Default,,0000,0000,0000,,이를 잠금으로써 전경 요소 추가 시 Dialogue: 0,0:02:23.38,0:02:25.38,Default,,0000,0000,0000,,실수로 배경 요소를 드래그할지도 모른다는 Dialogue: 0,0:02:25.38,0:02:27.75,Default,,0000,0000,0000,,걱정에서 벗어날 수 있습니다. Dialogue: 0,0:02:27.75,0:02:29.75,Default,,0000,0000,0000,,이는 인터페이스 오른쪽 상단의 풀다운 메뉴인 Dialogue: 0,0:02:29.75,0:02:31.75,Default,,0000,0000,0000,,Layers에서 실시할 수 있습니다. Dialogue: 0,0:02:32.82,0:02:35.53,Default,,0000,0000,0000,,배경 요소는 순전히 장식용이기 때문에 Dialogue: 0,0:02:35.53,0:02:37.53,Default,,0000,0000,0000,,스프라이트 게임 오브젝트에는 Dialogue: 0,0:02:37.53,0:02:39.53,Default,,0000,0000,0000,,추가 요소가 필요 없습니다. Dialogue: 0,0:02:39.53,0:02:41.53,Default,,0000,0000,0000,,이들은 BackgroundParallax라고 불리는 Dialogue: 0,0:02:41.53,0:02:44.20,Default,,0000,0000,0000,,시차 조절을 위한 단순한 스크립트가 포함된 빈 게임 오브젝트에 Dialogue: 0,0:02:44.20,0:02:46.20,Default,,0000,0000,0000,,하위(child) 관계로 지정되었습니다. Dialogue: 0,0:02:46.20,0:02:48.64,Default,,0000,0000,0000,,이 스크립트는 Scripts 폴더에서 확인할 수 있습니다. Dialogue: 0,0:02:48.64,0:02:50.64,Default,,0000,0000,0000,,아주 자세한 주석과 함께 설명되어 있습니다. Dialogue: 0,0:02:54.91,0:02:56.91,Default,,0000,0000,0000,,이제 캐릭터들이 실제로 뛰어다닐 Dialogue: 0,0:02:56.91,0:02:59.40,Default,,0000,0000,0000,,전경 요소를 생성할 차례입니다. Dialogue: 0,0:02:59.79,0:03:02.28,Default,,0000,0000,0000,,런던 타워 브리지에 가운데에 UFO가 착륙한 모습을 Dialogue: 0,0:03:02.28,0:03:03.47,Default,,0000,0000,0000,,디자인했습니다. Dialogue: 0,0:03:03.47,0:03:05.47,Default,,0000,0000,0000,,캐릭터는 하늘에서 나타나는 적을 피해 배경에서 Dialogue: 0,0:03:05.47,0:03:07.47,Default,,0000,0000,0000,,자유롭게 돌아다니면서 다음 레벨로 Dialogue: 0,0:03:07.47,0:03:09.22,Default,,0000,0000,0000,,진행해 나갑니다. Dialogue: 0,0:03:09.22,0:03:11.22,Default,,0000,0000,0000,,그러므로 각각의 전경에는 캐릭터가 걸음을 디딜 수 있는 Dialogue: 0,0:03:11.22,0:03:13.63,Default,,0000,0000,0000,,충돌체가 필요합니다. Dialogue: 0,0:03:13.63,0:03:15.63,Default,,0000,0000,0000,,효율성을 위해 대부분의 배경에는 Dialogue: 0,0:03:15.63,0:03:17.63,Default,,0000,0000,0000,,2D 박스 충돌체(Box Collider)를 사용하지만 Dialogue: 0,0:03:17.63,0:03:21.24,Default,,0000,0000,0000,,UFO는 복잡한 형태를 지니고 있습니다. Dialogue: 0,0:03:22.50,0:03:24.50,Default,,0000,0000,0000,,유니티의 폴리곤 충돌체(Polygon Collider)를 사용하면 Dialogue: 0,0:03:24.50,0:03:26.88,Default,,0000,0000,0000,,스프라이트의 형태를 기반으로 Dialogue: 0,0:03:26.88,0:03:28.72,Default,,0000,0000,0000,,충돌체가 자동으로 생성됩니다. Dialogue: 0,0:03:28.72,0:03:30.72,Default,,0000,0000,0000,,이는 나중에 충돌체의 형태를 변경할 수도 있음을 Dialogue: 0,0:03:30.72,0:03:32.05,Default,,0000,0000,0000,,의미합니다. Dialogue: 0,0:03:32.05,0:03:34.16,Default,,0000,0000,0000,,충돌체 형태의 포인트들을 이동, 추가 또는 빼서 Dialogue: 0,0:03:34.16,0:03:36.16,Default,,0000,0000,0000,,걸어 다니기에 더 적합하게 Dialogue: 0,0:03:36.16,0:03:38.16,Default,,0000,0000,0000,,만들 수 있습니다. Dialogue: 0,0:03:38.66,0:03:40.66,Default,,0000,0000,0000,,이러한 전경을 분류하기 위해 Dialogue: 0,0:03:40.66,0:03:43.15,Default,,0000,0000,0000,,Foregrounds Sorting Layer를 생성합니다. Dialogue: 0,0:03:43.15,0:03:45.60,Default,,0000,0000,0000,,이 레이어는 Tags And Layers 관리자의 배경에 앞서게 위치시킵니다. Dialogue: 0,0:03:48.88,0:03:50.88,Default,,0000,0000,0000,,다음으로 우리의 주인공을 살펴보죠. Dialogue: 0,0:03:53.71,0:03:55.60,Default,,0000,0000,0000,,플레이어 캐릭터도 포토샵에서 디자인되었는데 Dialogue: 0,0:03:55.60,0:03:57.60,Default,,0000,0000,0000,,이 데모에서는 Dialogue: 0,0:03:57.60,0:03:59.60,Default,,0000,0000,0000,,2D 대작 게임의 주인공인 Rayman 같은 Dialogue: 0,0:03:59.60,0:04:01.60,Default,,0000,0000,0000,,독립적인 팔다리와 기능을 가진 Dialogue: 0,0:04:01.60,0:04:03.60,Default,,0000,0000,0000,,캐릭터를 만들기로 했습니다. Dialogue: 0,0:04:03.60,0:04:05.60,Default,,0000,0000,0000,,또 다른 방법으로 스프라이트 시트 기반의 Dialogue: 0,0:04:05.60,0:04:08.14,Default,,0000,0000,0000,,애니메이션으로 포토샵에서 개별 프레임을 Dialogue: 0,0:04:08.14,0:04:09.64,Default,,0000,0000,0000,,디자인할 수도 있습니다. Dialogue: 0,0:04:09.64,0:04:12.36,Default,,0000,0000,0000,,이는 나중에 배경에 있는 백조에 사용하게 될 방법으로 Dialogue: 0,0:04:12.36,0:04:14.36,Default,,0000,0000,0000,,본 비디오 후반에 설명하도록 하겠습니다. Dialogue: 0,0:04:15.07,0:04:17.07,Default,,0000,0000,0000,,여기서 캐릭터의 개별 요소를 움직이게 하려면 Dialogue: 0,0:04:17.07,0:04:20.20,Default,,0000,0000,0000,,디자인을 완성한 뒤 신체 요소들을 Dialogue: 0,0:04:20.20,0:04:22.20,Default,,0000,0000,0000,,캔버스의 별도 공간으로 이동시켜 Dialogue: 0,0:04:22.20,0:04:25.41,Default,,0000,0000,0000,,유니티가 이들을 Importer에서 개별 스프라이트로 Dialogue: 0,0:04:25.41,0:04:27.96,Default,,0000,0000,0000,,분리시키도록 합니다. Dialogue: 0,0:04:28.76,0:04:30.76,Default,,0000,0000,0000,,이는 모든 스트라이트를 움직이는 개별 요소들로 Dialogue: 0,0:04:30.76,0:04:33.10,Default,,0000,0000,0000,,정할 수 있다는 뜻입니다. Dialogue: 0,0:04:33.10,0:04:35.50,Default,,0000,0000,0000,,이 요소들을 방금 생성한 Character Sorting Layer에 Dialogue: 0,0:04:35.50,0:04:38.17,Default,,0000,0000,0000,,위치시키고 Transform(변환) 내 Z값을 조절해 Dialogue: 0,0:04:38.17,0:04:40.92,Default,,0000,0000,0000,,원하는 렌더링 깊이로 정렬합니다. Dialogue: 0,0:04:48.81,0:04:50.81,Default,,0000,0000,0000,,이제 이 모든 스프라이트는 Dialogue: 0,0:04:50.81,0:04:52.81,Default,,0000,0000,0000,,컨트롤 스크립팅, 충돌체, 물리 등이 모두 Dialogue: 0,0:04:52.81,0:04:56.59,Default,,0000,0000,0000,,포함되어 있는 빈 게임 오브젝트 내에 정렬됩니다. Dialogue: 0,0:04:56.59,0:04:58.59,Default,,0000,0000,0000,,여기까지 완성되면 캐릭터의 각각의 스프라이트를 애니메이팅하여 Dialogue: 0,0:04:58.59,0:05:01.04,Default,,0000,0000,0000,,Idle, Run, Jump, Shoot 및 Death 애니메이션을 Dialogue: 0,0:05:01.04,0:05:03.91,Default,,0000,0000,0000,,만들 수 있는 업그레이드된 애니메이션 창을 Dialogue: 0,0:05:03.91,0:05:07.10,Default,,0000,0000,0000,,사용할 수 있게 됩니다. Dialogue: 0,0:05:07.10,0:05:09.80,Default,,0000,0000,0000,,애니메이션 창의 새로운 도프시트 보기 덕분에 Dialogue: 0,0:05:09.80,0:05:11.80,Default,,0000,0000,0000,,이 작업이 정말 편해졌습니다. Dialogue: 0,0:05:13.41,0:05:16.01,Default,,0000,0000,0000,,애니메이션을 상위(parent) 오브젝트에 추가하고 Dialogue: 0,0:05:16.01,0:05:19.40,Default,,0000,0000,0000,,하위(child) 오브젝트의 키프레임을 생성하면 됩니다. Dialogue: 0,0:05:19.40,0:05:21.40,Default,,0000,0000,0000,,원하는 곳으로 플레이헤드를 옮긴 후 Dialogue: 0,0:05:21.40,0:05:23.40,Default,,0000,0000,0000,,캐릭터의 여러 부분을 옮기면 Dialogue: 0,0:05:23.40,0:05:25.40,Default,,0000,0000,0000,,키프레임 애니메이션이 자동으로 만들어집니다. Dialogue: 0,0:05:27.31,0:05:29.64,Default,,0000,0000,0000,,애니메이션을 커브와 도프시트 사이에서 Dialogue: 0,0:05:29.64,0:05:32.45,Default,,0000,0000,0000,,전환하여 볼 수 있기 때문에 타이밍과 디자인 조절이 Dialogue: 0,0:05:32.45,0:05:35.06,Default,,0000,0000,0000,,정말 쉬워졌습니다. Dialogue: 0,0:05:36.73,0:05:38.73,Default,,0000,0000,0000,,이렇게 생성된 애니메이션으로 Dialogue: 0,0:05:38.73,0:05:41.37,Default,,0000,0000,0000,,캐릭터의 상태 머신을 디자인하면 Dialogue: 0,0:05:41.37,0:05:43.80,Default,,0000,0000,0000,,코드가 호출되었을 때 여러 가지 애니메이션을 Dialogue: 0,0:05:43.80,0:05:45.28,Default,,0000,0000,0000,,재생할 수 있습니다. Dialogue: 0,0:05:45.28,0:05:47.28,Default,,0000,0000,0000,,캐릭터의 애니메이터 컨트롤러는 Dialogue: 0,0:05:47.28,0:05:50.57,Default,,0000,0000,0000,,3D 바이패드로 구동되는 것이 아니므로 Dialogue: 0,0:05:50.57,0:05:53.67,Default,,0000,0000,0000,,물리 엔진에 맞춰 애니메이션을 구동하려면 Dialogue: 0,0:05:53.67,0:05:55.67,Default,,0000,0000,0000,,Apply Root Motion의 선택을 해제하고 Dialogue: 0,0:05:55.67,0:05:57.29,Default,,0000,0000,0000,,Animate Physics를 선택합니다. Dialogue: 0,0:05:57.29,0:05:59.86,Default,,0000,0000,0000,,배경에서 움직이게 하려면 주인공의 발에는 Dialogue: 0,0:05:59.86,0:06:02.23,Default,,0000,0000,0000,,원형 충돌체를 지정하고 나머지 몸통 부분에는 Dialogue: 0,0:06:02.23,0:06:04.56,Default,,0000,0000,0000,,박스 충돌체를 지정합니다. Dialogue: 0,0:06:04.56,0:06:07.07,Default,,0000,0000,0000,,이를 통해 주인공은 오르막을 자연스럽게 오르내릴 수 있고, Dialogue: 0,0:06:07.07,0:06:09.45,Default,,0000,0000,0000,,점프하면 천장에 머리가 닿게 됩니다. Dialogue: 0,0:06:09.80,0:06:12.54,Default,,0000,0000,0000,,캐릭터와 캐릭터 움직임을 제어하기 위해 Dialogue: 0,0:06:12.54,0:06:16.04,Default,,0000,0000,0000,,2D 물리 포스 내에서 움직이도록 스크립트를 작성했습니다. Dialogue: 0,0:06:16.04,0:06:18.04,Default,,0000,0000,0000,,이를 통해 게임 중 물리를 주인공과 적에게 Dialogue: 0,0:06:18.04,0:06:20.04,Default,,0000,0000,0000,,적용할 수 있어 더욱 역동적인 게임 플레이가 Dialogue: 0,0:06:20.04,0:06:21.43,Default,,0000,0000,0000,,가능합니다. Dialogue: 0,0:06:21.43,0:06:23.81,Default,,0000,0000,0000,,캐릭터의 PlayerControl 스크립트에서 Dialogue: 0,0:06:23.81,0:06:25.81,Default,,0000,0000,0000,,플레이어의 입력(input)을 확인합니다. Dialogue: 0,0:06:25.81,0:06:27.81,Default,,0000,0000,0000,,이를 사용하여 물리 포스를 움직임에 적용하고 Dialogue: 0,0:06:27.81,0:06:30.77,Default,,0000,0000,0000,,입력 값을 애니메이터에게 전송함으로써 Dialogue: 0,0:06:30.77,0:06:33.49,Default,,0000,0000,0000,,어떤 애니메이션이 재생될지 정의하고 Dialogue: 0,0:06:33.49,0:06:36.48,Default,,0000,0000,0000,,상태(state)로 생성한 Dialogue: 0,0:06:36.48,0:06:38.48,Default,,0000,0000,0000,,여러 가지 애니메이션 클립 간의 Dialogue: 0,0:06:38.48,0:06:40.48,Default,,0000,0000,0000,,매끄러운 전환이 가능해집니다. Dialogue: 0,0:06:40.48,0:06:42.48,Default,,0000,0000,0000,,애니메이션 클립에서 상태를 생성할 수 있는 Dialogue: 0,0:06:42.48,0:06:44.48,Default,,0000,0000,0000,,애니메이터를 사용해서 가장 좋은 점은 Dialogue: 0,0:06:44.48,0:06:46.86,Default,,0000,0000,0000,,다시 애니메이션 작업을 하지 않아도 물리 속도에 맞게 Dialogue: 0,0:06:46.86,0:06:48.86,Default,,0000,0000,0000,,애니메이션의 속도를 Dialogue: 0,0:06:48.86,0:06:51.28,Default,,0000,0000,0000,,조절할 수 있다는 것입니다. Dialogue: 0,0:07:23.13,0:07:25.13,Default,,0000,0000,0000,,FixedUpdate 함수는 각 물리 단계를 평가한 다음 Dialogue: 0,0:07:25.13,0:07:27.59,Default,,0000,0000,0000,,가장 먼저 하는 것은 Dialogue: 0,0:07:27.59,0:07:29.59,Default,,0000,0000,0000,,Horizontal 입력 값을 애니메이터의 Dialogue: 0,0:07:29.59,0:07:32.99,Default,,0000,0000,0000,,Speed 매개변수에 공급하는 것입니다. Dialogue: 0,0:07:33.95,0:07:35.95,Default,,0000,0000,0000,,단순한 상태 머신에서 Idle과 Run 간에 Dialogue: 0,0:07:35.95,0:07:37.95,Default,,0000,0000,0000,,전환하려면 Speed 매개변수가 Dialogue: 0,0:07:37.95,0:07:41.72,Default,,0000,0000,0000,,0.1 이상이어야 합니다. Dialogue: 0,0:07:41.72,0:07:44.02,Default,,0000,0000,0000,,그렇게 되면 애니메이터는 Idle에서 Run 상태로 Dialogue: 0,0:07:44.02,0:07:46.02,Default,,0000,0000,0000,,블렌딩합니다. Dialogue: 0,0:07:51.86,0:07:53.86,Default,,0000,0000,0000,,그리고 나서 움직이도록 하려면 Dialogue: 0,0:07:53.86,0:07:57.18,Default,,0000,0000,0000,,플레이어의 2D 물리 요소인 rigidbody2D에 Dialogue: 0,0:07:57.18,0:07:58.82,Default,,0000,0000,0000,,포스를 추가합니다. Dialogue: 0,0:07:59.63,0:08:02.52,Default,,0000,0000,0000,,또한 Horizontal 입력 값이 0 보다 높은지 낮은지 확인하여 Dialogue: 0,0:08:02.52,0:08:04.70,Default,,0000,0000,0000,,캐릭터가 어느 방향을 바라보게 만들지 Dialogue: 0,0:08:04.70,0:08:07.71,Default,,0000,0000,0000,,결정합니다. Dialogue: 0,0:08:07.71,0:08:10.56,Default,,0000,0000,0000,,그 원리는 유니티 내에서 왼쪽 입력 키를 누르면 Dialogue: 0,0:08:10.56,0:08:14.57,Default,,0000,0000,0000,,-1 값이 되고 오른쪽 입력 키는 +1 값이 되기 때문입니다. Dialogue: 0,0:08:15.07,0:08:18.70,Default,,0000,0000,0000,,입력에 따라 캐릭터의 X축을 역전시켜 Dialogue: 0,0:08:18.70,0:08:21.48,Default,,0000,0000,0000,,캐릭터를 반대 방향으로 바꾸는 Dialogue: 0,0:08:21.48,0:08:24.57,Default,,0000,0000,0000,,뒤집기 함수를 호출합니다. Dialogue: 0,0:08:26.85,0:08:28.85,Default,,0000,0000,0000,,플레이어가 지상에 있도록 정하려면 Dialogue: 0,0:08:28.85,0:08:31.60,Default,,0000,0000,0000,,Ground라고 하는 유니티 레이어를 추가하고 Dialogue: 0,0:08:31.60,0:08:34.98,Default,,0000,0000,0000,,캐릭터가 걸어 다닐 수 있는 전경 표면 전체에 적용합니다. Dialogue: 0,0:08:43.40,0:08:45.97,Default,,0000,0000,0000,,2D의 Linecast 함수를 사용하면 Dialogue: 0,0:08:45.97,0:08:47.97,Default,,0000,0000,0000,,Ground 레이어에 속한 요소 중 캐릭터의 발밑에 위치한 것이 있는지 Dialogue: 0,0:08:47.97,0:08:50.23,Default,,0000,0000,0000,,확인할 수 있습니다. Dialogue: 0,0:08:50.23,0:08:52.78,Default,,0000,0000,0000,,이를 더 손쉽게 커스터마이징하기 위해 Dialogue: 0,0:08:52.78,0:08:54.78,Default,,0000,0000,0000,,지상을 확인할 수 있는 포인트로 사용할 Dialogue: 0,0:08:54.78,0:08:56.78,Default,,0000,0000,0000,,빈 게임 오브젝트를 생성합니다. Dialogue: 0,0:08:56.78,0:08:59.08,Default,,0000,0000,0000,,이 빈 오브젝트에 기즈모를 추가하면 Dialogue: 0,0:08:59.08,0:09:01.08,Default,,0000,0000,0000,,캐릭터 아래로 얼마나 먼지 조종할 수 있어 Dialogue: 0,0:09:01.08,0:09:03.08,Default,,0000,0000,0000,,지상을 확인할 수 있습니다. Dialogue: 0,0:09:03.08,0:09:05.49,Default,,0000,0000,0000,,이것은 게임플레이 측면에서 보면 캐릭터가 Dialogue: 0,0:09:05.49,0:09:07.96,Default,,0000,0000,0000,,지상에 있을 때만 점프할 수 있다는 뜻이 됩니다. Dialogue: 0,0:09:08.46,0:09:10.46,Default,,0000,0000,0000,,플레이어 제어에 대한 자세한 정보는 스크립트의 Dialogue: 0,0:09:10.46,0:09:12.65,Default,,0000,0000,0000,,다른 코멘트를 확인하십시오. Dialogue: 0,0:09:12.65,0:09:14.65,Default,,0000,0000,0000,,플레이어의 무기는 비디오 후반에 Dialogue: 0,0:09:14.65,0:09:15.88,Default,,0000,0000,0000,,살펴보겠습니다. Dialogue: 0,0:09:15.88,0:09:17.88,Default,,0000,0000,0000,,이제 데모에서 카메라가 어떻게 플레이어를 Dialogue: 0,0:09:17.88,0:09:19.88,Default,,0000,0000,0000,,추적하는지 알아보겠습니다. Dialogue: 0,0:09:21.29,0:09:24.35,Default,,0000,0000,0000,,3D 게임과 마찬가지로 2D 게임에서도 Dialogue: 0,0:09:24.35,0:09:26.35,Default,,0000,0000,0000,,액션을 추적하는 카메라의 움직임이 Dialogue: 0,0:09:26.35,0:09:27.82,Default,,0000,0000,0000,,게임을 완성되게 만들 수도, 망칠 수도 있습니다. Dialogue: 0,0:09:27.82,0:09:30.58,Default,,0000,0000,0000,,전통 2D 플랫폼 게임을 만들기 위해 2D 게임 역사에서 Dialogue: 0,0:09:30.58,0:09:33.62,Default,,0000,0000,0000,,가장 흥미로운 카메라 기법을 사용했던 Dialogue: 0,0:09:33.62,0:09:36.65,Default,,0000,0000,0000,,슈퍼 닌텐도 또는 슈퍼 패미콤용 게임인 Dialogue: 0,0:09:36.65,0:09:38.65,Default,,0000,0000,0000,,Super Mario World를 살펴보겠습니다. Dialogue: 0,0:09:38.65,0:09:40.65,Default,,0000,0000,0000,,Super Mario world에서 카메라는 Dialogue: 0,0:09:40.65,0:09:42.65,Default,,0000,0000,0000,,수평으로 움직이지만 Viewport 중심에서 Dialogue: 0,0:09:42.65,0:09:45.12,Default,,0000,0000,0000,,사각지대 또는 여백을 사용하므로 Dialogue: 0,0:09:45.12,0:09:47.12,Default,,0000,0000,0000,,캐릭터가 조금씩 움직일 때는 Dialogue: 0,0:09:47.12,0:09:49.34,Default,,0000,0000,0000,,카메라가 쫓아가지 않아도 됩니다. Dialogue: 0,0:09:49.34,0:09:51.64,Default,,0000,0000,0000,,캐릭터가 여백 밖으로 이동하면 Dialogue: 0,0:09:51.64,0:09:54.05,Default,,0000,0000,0000,,그제야 카메라가 따라옵니다. Dialogue: 0,0:09:54.05,0:09:56.87,Default,,0000,0000,0000,,Super Mario World 카메라는 수직으로 순간 이동하기 위해 Dialogue: 0,0:09:56.87,0:09:59.54,Default,,0000,0000,0000,,특정한 높이를 사용합니다. Dialogue: 0,0:09:59.54,0:10:01.54,Default,,0000,0000,0000,,앞으로 스테이지가 추가되면 필요하겠지만 Dialogue: 0,0:10:01.54,0:10:03.88,Default,,0000,0000,0000,,현재 이 게임에서는 X축으로 긴 레벨이 없으므로 Dialogue: 0,0:10:03.88,0:10:06.85,Default,,0000,0000,0000,,이러한 세부 사항까지는 필요 없습니다. Dialogue: 0,0:10:07.21,0:10:09.21,Default,,0000,0000,0000,,이러한 이유로 카메라는 수평 작동 방식과 Dialogue: 0,0:10:09.21,0:10:12.79,Default,,0000,0000,0000,,비슷하게 수직으로 이동합니다. Dialogue: 0,0:10:18.78,0:10:20.78,Default,,0000,0000,0000,,mainCamera 게임 오브젝트에서 CameraFollow 스크립트의 Dialogue: 0,0:10:20.78,0:10:23.14,Default,,0000,0000,0000,,코멘트를 통해 이러한 효과를 어떻게 Dialogue: 0,0:10:23.14,0:10:25.14,Default,,0000,0000,0000,,만들었는지 확인해 보십시오. Dialogue: 0,0:10:26.14,0:10:27.84,Default,,0000,0000,0000,,이 게임에서 사용된 효과가 몇 개가 있으나 Dialogue: 0,0:10:27.84,0:10:29.84,Default,,0000,0000,0000,,주인공이 맞닥뜨린 외계인 학살자들을 공격하여 Dialogue: 0,0:10:29.84,0:10:32.73,Default,,0000,0000,0000,,처치하는 능력이 가장 중요합니다. Dialogue: 0,0:10:32.73,0:10:36.34,Default,,0000,0000,0000,,주인공은 반동으로 발사되는 바주카를 사용합니다. Dialogue: 0,0:10:36.34,0:10:38.90,Default,,0000,0000,0000,,이 동작은 여러 부분으로 나누어집니다. Dialogue: 0,0:10:38.90,0:10:41.64,Default,,0000,0000,0000,,먼저 키 입력을 정하고, Fire 키가 눌러지면 Dialogue: 0,0:10:41.64,0:10:43.96,Default,,0000,0000,0000,,로켓의 인스턴스를 만들고 Dialogue: 0,0:10:43.96,0:10:47.97,Default,,0000,0000,0000,,오디오 클립을 재생하여 재생할 애니메이션 상태를 작동시킵니다. Dialogue: 0,0:10:47.97,0:10:49.97,Default,,0000,0000,0000,,좀 더 자세하게 알아보도록 하죠. Dialogue: 0,0:10:49.97,0:10:52.42,Default,,0000,0000,0000,,Run과 같은 다른 애니메이션 재생 중에 Dialogue: 0,0:10:52.42,0:10:54.42,Default,,0000,0000,0000,,Shoot 애니메이션을 재생하려면 Dialogue: 0,0:10:54.42,0:10:56.42,Default,,0000,0000,0000,,애니메이터 내에 Shooting이라는 별도의 레이어를 Dialogue: 0,0:10:56.42,0:10:57.68,Default,,0000,0000,0000,,만들어야 합니다. Dialogue: 0,0:10:57.68,0:10:59.68,Default,,0000,0000,0000,,여기서 Weight 속성을 1로 설정하면 Dialogue: 0,0:10:59.68,0:11:02.53,Default,,0000,0000,0000,,Shooting 레이어에서 클립으로 움직이는 Dialogue: 0,0:11:02.53,0:11:04.53,Default,,0000,0000,0000,,캐릭터의 모든 부위에 대한 움직임을 기본 레이어에서 Dialogue: 0,0:11:04.53,0:11:06.98,Default,,0000,0000,0000,,완전히 재지정할 수 있습니다. Dialogue: 0,0:11:20.50,0:11:22.50,Default,,0000,0000,0000,,이 레이어에서 Shoot 트리거 매개변수가 Dialogue: 0,0:11:22.50,0:11:25.35,Default,,0000,0000,0000,,코드에서 호출될 때 Shoot 애니메이션을 Dialogue: 0,0:11:25.35,0:11:27.35,Default,,0000,0000,0000,,다른 상태로 전환합니다. Dialogue: 0,0:11:27.35,0:11:30.54,Default,,0000,0000,0000,,이 부분을 맡고 있는 Gun 스크립트를 확인해 볼까요? Dialogue: 0,0:11:32.70,0:11:35.14,Default,,0000,0000,0000,,애니메이터에 접근하여 트리거를 True로 Dialogue: 0,0:11:35.14,0:11:37.40,Default,,0000,0000,0000,,설정한 것을 확인할 수 있습니다. Dialogue: 0,0:11:37.40,0:11:40.51,Default,,0000,0000,0000,,트리거는 스위치로 작동하며 다음 프레임에서 스스로 False로 재설정해 Dialogue: 0,0:11:40.51,0:11:43.25,Default,,0000,0000,0000,,다시 호출할 수 있게 만들기 때문에 Dialogue: 0,0:11:43.25,0:11:45.51,Default,,0000,0000,0000,,Shooting과 같은 동작에 최적입니다. Dialogue: 0,0:11:46.01,0:11:48.67,Default,,0000,0000,0000,,이 스크립트에서는 애니메이션 설정뿐만 아니라 Dialogue: 0,0:11:48.67,0:11:50.67,Default,,0000,0000,0000,,로켓을 발사하고, Dialogue: 0,0:11:50.67,0:11:52.67,Default,,0000,0000,0000,,오디오 클립을 재생하고, Dialogue: 0,0:11:52.67,0:11:54.67,Default,,0000,0000,0000,,플레이어가 바라보는 방향에 따라 Dialogue: 0,0:11:54.67,0:11:57.78,Default,,0000,0000,0000,,로켓의 인스턴스를 만들고 속도를 지정합니다. Dialogue: 0,0:11:57.78,0:12:00.56,Default,,0000,0000,0000,,이는 X축에서 양수 또는 음수로 표시됩니다. Dialogue: 0,0:12:01.28,0:12:03.93,Default,,0000,0000,0000,,이 스크립트는 주인공의 hierarchy의 빈 게임 오브젝트인 Dialogue: 0,0:12:03.93,0:12:05.29,Default,,0000,0000,0000,,Gun에 포함되어 있습니다. Dialogue: 0,0:12:05.29,0:12:08.08,Default,,0000,0000,0000,,코드를 이런 방식으로 빈 게임 오브젝트에 놓으면 Dialogue: 0,0:12:08.08,0:12:10.08,Default,,0000,0000,0000,,로켓이 생성될 자리를 Dialogue: 0,0:12:10.08,0:12:11.66,Default,,0000,0000,0000,,쉽게 잡을 수 있습니다. Dialogue: 0,0:12:11.66,0:12:13.66,Default,,0000,0000,0000,,바주카 끝 부분에 Dialogue: 0,0:12:13.66,0:12:16.01,Default,,0000,0000,0000,,빈 오브젝트를 위치시키고, Dialogue: 0,0:12:16.01,0:12:18.01,Default,,0000,0000,0000,,로켓이 나타날 지점으로 Dialogue: 0,0:12:18.01,0:12:20.01,Default,,0000,0000,0000,,그 위치를 사용하게 됩니다. Dialogue: 0,0:12:40.25,0:12:42.80,Default,,0000,0000,0000,,2D rigidbody로 만들어진 로켓이 Dialogue: 0,0:12:42.80,0:12:44.80,Default,,0000,0000,0000,,움직이게 만들려면 Dialogue: 0,0:12:44.80,0:12:46.80,Default,,0000,0000,0000,,속도를 지정해야 합니다. Dialogue: 0,0:12:46.80,0:12:49.10,Default,,0000,0000,0000,,스트라이트 전환 불꽃 배기가스에 Dialogue: 0,0:12:49.10,0:12:51.10,Default,,0000,0000,0000,,연기를 표현하는 파티클 시스템이 있습니다. Dialogue: 0,0:12:52.83,0:12:56.48,Default,,0000,0000,0000,,파티클 시스템은 새로운 스프라이트 그래픽 유형을 허용합니다. Dialogue: 0,0:12:56.48,0:12:58.48,Default,,0000,0000,0000,,그러므로 재질에 연기 스프라이트 시트를 추가하여 Dialogue: 0,0:12:58.48,0:13:00.48,Default,,0000,0000,0000,,파티클 시스템의 텍스트 시트 애니메이션 모듈에 Dialogue: 0,0:13:00.48,0:13:04.15,Default,,0000,0000,0000,,할당할 수 있고 파티클 배출용 스프라이트의 Dialogue: 0,0:13:04.15,0:13:06.23,Default,,0000,0000,0000,,즉각적인 애니메이션을 Dialogue: 0,0:13:06.23,0:13:08.23,Default,,0000,0000,0000,,확보할 수 있습니다. Dialogue: 0,0:13:16.12,0:13:18.94,Default,,0000,0000,0000,,로켓이 적을 강타하거나 배경의 일부에 맞으면 Dialogue: 0,0:13:18.94,0:13:20.94,Default,,0000,0000,0000,,로켓은 파괴되고 Dialogue: 0,0:13:20.94,0:13:22.94,Default,,0000,0000,0000,,폭파가 일어납니다. Dialogue: 0,0:13:22.94,0:13:24.94,Default,,0000,0000,0000,,이러한 폭파는 생성한 스프라이트 시트를 통해 Dialogue: 0,0:13:24.94,0:13:27.73,Default,,0000,0000,0000,,애니메이팅 되는 스프라이트 게임 오브젝트입니다. Dialogue: 0,0:13:27.73,0:13:30.31,Default,,0000,0000,0000,,그리고 다시 분류 레이어를 사용하여 Dialogue: 0,0:13:30.31,0:13:33.70,Default,,0000,0000,0000,,모든 전경 오브젝트 중 가장 낮은 레이어 순서에서 렌더링합니다. Dialogue: 0,0:13:36.17,0:13:38.17,Default,,0000,0000,0000,,이러한 스프라이트 기반 애니메이션을 추가할 때 Dialogue: 0,0:13:38.17,0:13:40.17,Default,,0000,0000,0000,,Project 패널의 파일을 선택하고 Dialogue: 0,0:13:40.17,0:13:42.17,Default,,0000,0000,0000,,Sprite Mode Multiple을 선택하여 Dialogue: 0,0:13:42.17,0:13:44.58,Default,,0000,0000,0000,,스프라이트를 설정합니다. Dialogue: 0,0:13:44.58,0:13:46.58,Default,,0000,0000,0000,,이를 통해 Sprite Editor에 액세스할 수 있어 Dialogue: 0,0:13:46.58,0:13:49.76,Default,,0000,0000,0000,,수동 또는 자동으로 자를 수 있습니다. Dialogue: 0,0:13:49.76,0:13:52.41,Default,,0000,0000,0000,,파일에서 적절한 스프라이트를 선택한 후 Dialogue: 0,0:13:52.41,0:13:54.41,Default,,0000,0000,0000,,Apply를 클릭하면 Dialogue: 0,0:13:54.41,0:13:56.76,Default,,0000,0000,0000,,유니티에서 프로젝트에서 사용할 파일의 Dialogue: 0,0:13:56.76,0:13:58.76,Default,,0000,0000,0000,,하위 스프라이트를 생성합니다. Dialogue: 0,0:13:59.71,0:14:01.69,Default,,0000,0000,0000,,로켓 만들기 아주 간단하죠? Dialogue: 0,0:14:01.69,0:14:03.69,Default,,0000,0000,0000,,적을 처치하는 기법은 비디오 후반의 Dialogue: 0,0:14:03.69,0:14:06.53,Default,,0000,0000,0000,,적군 편에서 확인하겠습니다. Dialogue: 0,0:14:07.10,0:14:09.45,Default,,0000,0000,0000,,플레이어 캐릭터로 돌아가서 체력과 적에게 입은 Dialogue: 0,0:14:09.45,0:14:12.19,Default,,0000,0000,0000,,피해를 어떻게 처리할지 확인해 보겠습니다. Dialogue: 0,0:14:12.19,0:14:14.19,Default,,0000,0000,0000,,체력은 부동(Float)으로 저장되고 Dialogue: 0,0:14:14.19,0:14:16.19,Default,,0000,0000,0000,,적과 닿아서 생기는 상호 작용을 Dialogue: 0,0:14:16.19,0:14:18.55,Default,,0000,0000,0000,,TakeDamage 함수라고 부릅니다. Dialogue: 0,0:14:18.55,0:14:20.55,Default,,0000,0000,0000,,이는 repeatDamagePeriod가 지났을 때만 Dialogue: 0,0:14:20.55,0:14:22.55,Default,,0000,0000,0000,,작동하여 플레이어가 너무 일찍 Dialogue: 0,0:14:22.55,0:14:25.35,Default,,0000,0000,0000,,죽는 것을 방지합니다. Dialogue: 0,0:14:26.52,0:14:29.14,Default,,0000,0000,0000,,플레이어가 적을 더 쉽게 피하고 Dialogue: 0,0:14:29.14,0:14:31.14,Default,,0000,0000,0000,,피해를 입었을 때 알 수 있도록 Dialogue: 0,0:14:31.14,0:14:33.14,Default,,0000,0000,0000,,캐릭터가 물리적으로 피해를 받고 Dialogue: 0,0:14:33.14,0:14:34.85,Default,,0000,0000,0000,,반동으로 튕겨 나가게 만듭니다. Dialogue: 0,0:14:34.85,0:14:37.54,Default,,0000,0000,0000,,이를 위해 TakeDamage 함수는 물리 포스를 추가하여 Dialogue: 0,0:14:37.54,0:14:39.54,Default,,0000,0000,0000,,플레이어의 잠시 점프하지 못하게 만들고 Dialogue: 0,0:14:39.54,0:14:42.12,Default,,0000,0000,0000,,적의 플레이어를 향한 벡터를 찾아 Dialogue: 0,0:14:42.12,0:14:44.12,Default,,0000,0000,0000,,적을 해당 방향으로 Dialogue: 0,0:14:44.12,0:14:46.12,Default,,0000,0000,0000,,튕겨 나가게 합니다. Dialogue: 0,0:14:46.12,0:14:48.68,Default,,0000,0000,0000,,hurtForce 변수는 Inspector에 공개되어 있어 Dialogue: 0,0:14:48.68,0:14:51.32,Default,,0000,0000,0000,,스크립트로 다시 돌아가지 않고 Dialogue: 0,0:14:51.32,0:14:53.32,Default,,0000,0000,0000,,게임 플레이의 해당 요소를 조정하도록 Dialogue: 0,0:14:53.32,0:14:55.32,Default,,0000,0000,0000,,변경할 수 있습니다. Dialogue: 0,0:14:55.32,0:14:57.32,Default,,0000,0000,0000,,플레이어를 밀어내는 것뿐 아니라 Dialogue: 0,0:14:57.32,0:14:59.81,Default,,0000,0000,0000,,플레이어의 체력을 감소시키고 Dialogue: 0,0:14:59.81,0:15:02.21,Default,,0000,0000,0000,,체력 게이지를 업데이트하는 것도 가능합니다. Dialogue: 0,0:15:02.21,0:15:04.62,Default,,0000,0000,0000,,체력의 감소를 나타내려면 체력 게이지의 Dialogue: 0,0:15:04.62,0:15:06.88,Default,,0000,0000,0000,,가로 길이에서 감소한 부분을 빼며 Dialogue: 0,0:15:06.88,0:15:09.82,Default,,0000,0000,0000,,총 체력 대비 현재 체력의 비율을 찾아 Dialogue: 0,0:15:09.82,0:15:12.64,Default,,0000,0000,0000,,녹색과 빨간색의 색상 알림을 사용하여 Dialogue: 0,0:15:12.64,0:15:14.64,Default,,0000,0000,0000,,나타냅니다. Dialogue: 0,0:15:14.64,0:15:17.87,Default,,0000,0000,0000,,체력 게이지는 게이지의 윤곽과 게이지 본체, Dialogue: 0,0:15:17.87,0:15:19.96,Default,,0000,0000,0000,,즉 두 개의 스프라이트로 Dialogue: 0,0:15:19.96,0:15:21.74,Default,,0000,0000,0000,,구성되어 있습니다. Dialogue: 0,0:15:21.74,0:15:23.74,Default,,0000,0000,0000,,이 체력 게이지는 포토샵에서 디자인된 다음에 Dialogue: 0,0:15:23.74,0:15:25.95,Default,,0000,0000,0000,,두 가지 개별 요소로 내보내진 것입니다. Dialogue: 0,0:15:25.95,0:15:27.95,Default,,0000,0000,0000,,이 스프라이트의 가져오기 설정에서 Dialogue: 0,0:15:27.95,0:15:30.47,Default,,0000,0000,0000,,축을 그래픽 왼쪽 중간으로 설정하면 Dialogue: 0,0:15:30.47,0:15:34.05,Default,,0000,0000,0000,,값이 낮아질 때 왼쪽으로 줄어들게 됩니다. Dialogue: 0,0:15:48.57,0:15:50.57,Default,,0000,0000,0000,,이 두 개의 스프라이트는 플레이어를 쫓아가도록 만드는 Dialogue: 0,0:15:50.57,0:15:52.57,Default,,0000,0000,0000,,단순한 스크립트를 가진 빈 상위 게임 오브젝트에 Dialogue: 0,0:15:52.57,0:15:54.57,Default,,0000,0000,0000,,속해 있습니다. Dialogue: 0,0:15:54.57,0:15:56.62,Default,,0000,0000,0000,,플레이어 오브젝트의 위치와 같은 위치에 Dialogue: 0,0:15:56.62,0:15:58.62,Default,,0000,0000,0000,,설정하면 이것이 가능합니다. Dialogue: 0,0:15:58.62,0:16:00.62,Default,,0000,0000,0000,,거기에 공개로 설정한 오프셋을 통해 Dialogue: 0,0:16:00.62,0:16:02.62,Default,,0000,0000,0000,,Inspector에서 조절할 수 있습니다. Dialogue: 0,0:16:16.22,0:16:18.22,Default,,0000,0000,0000,,플레이어의 체력이 0이 되면 Dialogue: 0,0:16:18.22,0:16:20.22,Default,,0000,0000,0000,,충돌체를 트리거로 설정하여 Dialogue: 0,0:16:20.22,0:16:22.63,Default,,0000,0000,0000,,레벨에서 떨어지게 만듭니다. Dialogue: 0,0:16:22.63,0:16:24.63,Default,,0000,0000,0000,,그리고 Sprite Renderer를 Dialogue: 0,0:16:24.63,0:16:28.19,Default,,0000,0000,0000,,게임의 가장 앞쪽에서 렌더링하도록 만드는 UI Sorting layer에 위치시켜 Dialogue: 0,0:16:28.19,0:16:31.59,Default,,0000,0000,0000,,렌더링의 가장 앞으로 플레이어를 이동시킵니다. Dialogue: 0,0:16:31.59,0:16:34.22,Default,,0000,0000,0000,,플레이어 사망 시 모자와 총이 사라지는 Death와 Dialogue: 0,0:16:34.22,0:16:37.25,Default,,0000,0000,0000,,Falling이라고 부르는 두 개의 애니메이션이 Dialogue: 0,0:16:37.25,0:16:38.63,Default,,0000,0000,0000,,마련되어 있습니다. Dialogue: 0,0:16:38.63,0:16:40.63,Default,,0000,0000,0000,,Death 애니메이션이 끝나면 Dialogue: 0,0:16:40.63,0:16:44.00,Default,,0000,0000,0000,,애니메이터의 전환 조건인 Exit Time에 따라 Dialogue: 0,0:16:44.00,0:16:47.24,Default,,0000,0000,0000,,Falling으로 자연스럽게 바뀝니다. Dialogue: 0,0:16:50.78,0:16:52.78,Default,,0000,0000,0000,,마지막으로 Death 시퀀스 중 플레이어가 캐릭터를 Dialogue: 0,0:16:52.78,0:16:55.28,Default,,0000,0000,0000,,이동하거나 총을 쏘지 못하도록 하기 위해 Dialogue: 0,0:16:55.28,0:16:58.34,Default,,0000,0000,0000,,PlayerControl 및 Gun 스크립트를 비활성화합니다. Dialogue: 0,0:16:58.34,0:17:00.73,Default,,0000,0000,0000,,Die 함수는 public으로 만들어졌으므로 Dialogue: 0,0:17:00.73,0:17:03.33,Default,,0000,0000,0000,,플레이어가 물에 빠지는 경우와 같은 여러 경우에 Dialogue: 0,0:17:03.33,0:17:05.04,Default,,0000,0000,0000,,호출할 수 있습니다. Dialogue: 0,0:17:05.04,0:17:07.73,Default,,0000,0000,0000,,플레이어가 물에 닿았을 때 게임을 초기화하기 위해 Dialogue: 0,0:17:07.73,0:17:09.73,Default,,0000,0000,0000,,트리거 충돌체와 스크립트로 간단하게 구성된 Dialogue: 0,0:17:09.73,0:17:12.46,Default,,0000,0000,0000,,KillTrigger 오브젝트가 있습니다. Dialogue: 0,0:17:12.46,0:17:15.01,Default,,0000,0000,0000,,게임 대부분의 경우 Remover 스크립트의 목적은 Dialogue: 0,0:17:15.01,0:17:17.01,Default,,0000,0000,0000,,강에 빠지는 적 오브젝트를 제거하고 Dialogue: 0,0:17:17.01,0:17:19.79,Default,,0000,0000,0000,,스플래시 애니메이션 및 사운드 효과의 Dialogue: 0,0:17:19.79,0:17:21.44,Default,,0000,0000,0000,,인스턴스 생성에 있습니다. Dialogue: 0,0:17:21.44,0:17:24.00,Default,,0000,0000,0000,,그러나 이 트리거에서 플레이어가 감지되면 Dialogue: 0,0:17:24.00,0:17:27.09,Default,,0000,0000,0000,,PlayerHealth 스크립트의 Die 함수를 호출합니다. Dialogue: 0,0:17:27.09,0:17:29.09,Default,,0000,0000,0000,,그리고 플레이어를 화면 밖으로 이동시키고 Dialogue: 0,0:17:29.09,0:17:31.09,Default,,0000,0000,0000,,2초간 일시 중지한 뒤 Dialogue: 0,0:17:31.09,0:17:34.53,Default,,0000,0000,0000,,코루틴을 호출하고 레벨을 다시 불러오는 동안 Dialogue: 0,0:17:34.53,0:17:36.53,Default,,0000,0000,0000,,CameraTracking을 비활성화합니다. Dialogue: 0,0:17:37.08,0:17:39.08,Default,,0000,0000,0000,,이제 죽음에 대한 이야기는 그만하고 Dialogue: 0,0:17:39.08,0:17:41.08,Default,,0000,0000,0000,,생존과 그에 필요한 도구에 대해 Dialogue: 0,0:17:41.08,0:17:42.48,Default,,0000,0000,0000,,알아보죠. Dialogue: 0,0:17:42.48,0:17:44.48,Default,,0000,0000,0000,,이 게임에서는 플레이어에게 도움을 주는 Dialogue: 0,0:17:44.48,0:17:47.12,Default,,0000,0000,0000,,2개의 상자가 하늘에서 떨어지는데 하나는 폭탄, Dialogue: 0,0:17:47.12,0:17:49.91,Default,,0000,0000,0000,,다른 하나는 체력을 보충하는 구급 상자가 들어 있습니다. Dialogue: 0,0:17:50.41,0:17:52.96,Default,,0000,0000,0000,,이 상자는 상자와 낙하산 이렇게 두 개의 Dialogue: 0,0:17:52.96,0:17:55.70,Default,,0000,0000,0000,,부분으로 구성되어 있습니다. Dialogue: 0,0:17:58.05,0:18:01.31,Default,,0000,0000,0000,,이 두 요소는 빈 상위 오브젝트에 속해 있어 Dialogue: 0,0:18:01.31,0:18:03.77,Default,,0000,0000,0000,,그룹으로 애니메이트할 수 있습니다. Dialogue: 0,0:18:03.77,0:18:05.77,Default,,0000,0000,0000,,낙하산의 중심이 상위 오브젝트의 중심에 놓이도록 Dialogue: 0,0:18:05.77,0:18:08.48,Default,,0000,0000,0000,,두 개의 스프라이트를 위치시킵니다. Dialogue: 0,0:18:09.04,0:18:11.91,Default,,0000,0000,0000,,이로써 상자 달린 낙하산 전체가 지상으로 Dialogue: 0,0:18:11.91,0:18:15.31,Default,,0000,0000,0000,,내려오는 것처럼 애니메이션이 좌우로 흔들리게 됩니다. Dialogue: 0,0:18:15.31,0:18:17.31,Default,,0000,0000,0000,,그리고 나서 rigidbody를 추가하여 중력에 의해 Dialogue: 0,0:18:17.31,0:18:19.31,Default,,0000,0000,0000,,오브젝트가 지상으로 내려오게 만듭니다. Dialogue: 0,0:18:19.31,0:18:21.31,Default,,0000,0000,0000,,그리고 충돌체를 상자에 추가하여 상자가 Dialogue: 0,0:18:21.31,0:18:23.31,Default,,0000,0000,0000,,지상에 닿고 플레이어가 상자를 수집하는 순간을 Dialogue: 0,0:18:23.31,0:18:24.96,Default,,0000,0000,0000,,감지할 수 있도록 만듭니다. Dialogue: 0,0:18:24.96,0:18:26.96,Default,,0000,0000,0000,,상자가 지상에 닿자마자 낙하산이 작아지는\N394\N00:18:26,962 --> 00:18:30,513\N두 번째 애니메이션 상태로 전환합니다. Dialogue: 0,0:18:30.51,0:18:33.31,Default,,0000,0000,0000,,게임의 다른 부분과 마찬가지로 애니메이터는 Dialogue: 0,0:18:33.31,0:18:34.92,Default,,0000,0000,0000,,오브젝트의 상태를 처리합니다. Dialogue: 0,0:18:34.92,0:18:36.92,Default,,0000,0000,0000,,기본적으로 floatDown 애니메이션 상태의 Dialogue: 0,0:18:36.92,0:18:38.92,Default,,0000,0000,0000,,재생을 볼 수 있으나 Dialogue: 0,0:18:38.92,0:18:40.92,Default,,0000,0000,0000,,트리거 Land가 True로 설정되면 Dialogue: 0,0:18:40.92,0:18:43.47,Default,,0000,0000,0000,,Landing 상태로 전환됩니다. Dialogue: 0,0:18:43.97,0:18:47.38,Default,,0000,0000,0000,,스크립트에서는 태그를 통해 지상을 감지하는 onTriggerEnter 함수를 Dialogue: 0,0:18:47.38,0:18:49.73,Default,,0000,0000,0000,,사용하여 이를 실시할 수 있습니다. Dialogue: 0,0:18:49.73,0:18:52.82,Default,,0000,0000,0000,,또한 상위 오브젝트에서 상자 자체를 분리하고 Dialogue: 0,0:18:52.82,0:18:55.10,Default,,0000,0000,0000,,자신만의 rigidbody를 부여합니다. Dialogue: 0,0:18:55.10,0:18:57.49,Default,,0000,0000,0000,,그리하여 경사지에 착륙했을 때 사실적으로 Dialogue: 0,0:18:57.49,0:19:00.62,Default,,0000,0000,0000,,배경과 상호 작용할 수 있도록 합니다. Dialogue: 0,0:19:00.62,0:19:03.67,Default,,0000,0000,0000,,일단 폭탄을 살펴볼까요? Dialogue: 0,0:19:03.67,0:19:05.67,Default,,0000,0000,0000,,폭탄 상자 수집은 상자에 연결된 Dialogue: 0,0:19:05.67,0:19:08.48,Default,,0000,0000,0000,,BombPickup 스크립트를 통해 처리하게 됩니다. Dialogue: 0,0:19:08.48,0:19:11.06,Default,,0000,0000,0000,,상자를 수집 처리는 상자를 파괴하고 Dialogue: 0,0:19:11.06,0:19:13.06,Default,,0000,0000,0000,,LayBombs라고 불리는 플레이어에 연결된 Dialogue: 0,0:19:13.06,0:19:15.06,Default,,0000,0000,0000,,스크립트 안에 보유한 폭탄 수가 올라감으로써 Dialogue: 0,0:19:15.06,0:19:16.74,Default,,0000,0000,0000,,처리됩니다. Dialogue: 0,0:19:17.56,0:19:19.56,Default,,0000,0000,0000,,LayBombs 스크립트는 단순히 플레이어가 Dialogue: 0,0:19:19.56,0:19:21.56,Default,,0000,0000,0000,,폭탄을 가지고 있는지 확인합니다. Dialogue: 0,0:19:21.56,0:19:23.56,Default,,0000,0000,0000,,그리고 폭탄 프리팹 인스턴스를 Dialogue: 0,0:19:23.56,0:19:25.56,Default,,0000,0000,0000,,생성합니다. Dialogue: 0,0:19:27.42,0:19:29.95,Default,,0000,0000,0000,,폭탄 프리팹에는 시한 퓨즈가 있는데 Dialogue: 0,0:19:29.95,0:19:32.15,Default,,0000,0000,0000,,Explode 함수를 호출하기 전까지 Dialogue: 0,0:19:32.15,0:19:34.15,Default,,0000,0000,0000,,BombDetonation 코루틴 내 Yield를 사용하여 Dialogue: 0,0:19:34.15,0:19:36.15,Default,,0000,0000,0000,,대기합니다. Dialogue: 0,0:19:36.80,0:19:39.54,Default,,0000,0000,0000,,Explode 함수는 여러 가지 행동을 합니다. Dialogue: 0,0:19:39.54,0:19:41.54,Default,,0000,0000,0000,,먼저 bombLaid 변수를 초기화하여 Dialogue: 0,0:19:41.54,0:19:43.80,Default,,0000,0000,0000,,다른 폭탄이 배치되도록 합니다. Dialogue: 0,0:19:43.80,0:19:45.80,Default,,0000,0000,0000,,그리고는 수집 생성 지점에 새로운 상자가 Dialogue: 0,0:19:45.80,0:19:47.80,Default,,0000,0000,0000,,생성되도록 하고 정의된 폭발 범위 내 Dialogue: 0,0:19:47.80,0:19:49.80,Default,,0000,0000,0000,,적을 처치하도록 합니다. Dialogue: 0,0:19:50.52,0:19:53.06,Default,,0000,0000,0000,,마지막 이 부분이 어떻게 작동하는지 살펴봅시다. Dialogue: 0,0:19:53.06,0:19:55.06,Default,,0000,0000,0000,,폭탄은 적에게 남아 있는 체력과 관계없이 치명적인 무기이므로 Dialogue: 0,0:19:55.06,0:19:57.18,Default,,0000,0000,0000,,Physics.OverlapCircleAll을 사용하여 Dialogue: 0,0:19:57.18,0:19:59.98,Default,,0000,0000,0000,,폭탄의 특정 범위 내에 있는 Dialogue: 0,0:19:59.98,0:20:03.47,Default,,0000,0000,0000,,적으로 태그된 모든 오브젝트를 수집합니다. Dialogue: 0,0:20:03.47,0:20:06.61,Default,,0000,0000,0000,,그리고 나서 발견한 모든 적에게 foreach loop를 실행하여 Dialogue: 0,0:20:06.61,0:20:10.66,Default,,0000,0000,0000,,체력을 0으로 설정하고 폭탄의 위치에서 적이 있었던 곳으로의 Dialogue: 0,0:20:10.66,0:20:12.66,Default,,0000,0000,0000,,벡터를 찾아 해당 벡터 방향에 Dialogue: 0,0:20:12.66,0:20:15.54,Default,,0000,0000,0000,,포스를 적용합니다. Dialogue: 0,0:20:16.30,0:20:18.54,Default,,0000,0000,0000,,일단 foreach loop이 완성되면 Dialogue: 0,0:20:18.54,0:20:21.38,Default,,0000,0000,0000,,비주얼 효과를 재생하고 인스턴스화하고 Dialogue: 0,0:20:21.38,0:20:23.38,Default,,0000,0000,0000,,폭발음을 위한 오디오 클립을 재생하며 Dialogue: 0,0:20:23.38,0:20:25.91,Default,,0000,0000,0000,,폭탄을 폭발시킵니다. Dialogue: 0,0:20:26.88,0:20:29.25,Default,,0000,0000,0000,,폭발은 두 부분으로 되어 있습니다. Dialogue: 0,0:20:29.25,0:20:31.25,Default,,0000,0000,0000,,여기서 주요 부분은 잠시 나타났다가 Dialogue: 0,0:20:31.25,0:20:33.58,Default,,0000,0000,0000,,사라지는 원이고 Dialogue: 0,0:20:33.58,0:20:35.58,Default,,0000,0000,0000,,두 번째 부분은 로켓 폭발과 같은 스프라이트를 Dialogue: 0,0:20:35.58,0:20:37.58,Default,,0000,0000,0000,,다시 사용하는 별의 Dialogue: 0,0:20:37.58,0:20:39.58,Default,,0000,0000,0000,,파티클 시스템입니다. Dialogue: 0,0:20:42.26,0:20:44.26,Default,,0000,0000,0000,,효율성을 위해 해당 씬에서 Dialogue: 0,0:20:44.26,0:20:46.26,Default,,0000,0000,0000,,파티클 시스템을 항상 유지하고 있으며 Dialogue: 0,0:20:46.26,0:20:48.26,Default,,0000,0000,0000,,필요 시 원하는 위치로 시스템을 이동해 Dialogue: 0,0:20:48.26,0:20:51.74,Default,,0000,0000,0000,,재생할 때는 코드를 사용합니다. Dialogue: 0,0:20:52.51,0:20:54.51,Default,,0000,0000,0000,,메모리에 파티클 시스템을 유지하고 Dialogue: 0,0:20:54.51,0:20:56.51,Default,,0000,0000,0000,,게임을 효율적으로 만들어 줍니다. Dialogue: 0,0:20:57.01,0:20:59.01,Default,,0000,0000,0000,,이 씬에서 플레이어는 Dialogue: 0,0:20:59.01,0:21:01.01,Default,,0000,0000,0000,,한 번에 하나의 폭탄만 던질 수 있습니다. Dialogue: 0,0:21:01.01,0:21:04.67,Default,,0000,0000,0000,,즉 폭발은 한 번만 발생한다는 것을 알고 있기 때문에 Dialogue: 0,0:21:04.67,0:21:07.79,Default,,0000,0000,0000,,이렇게 작업할 수 있다는 것을 참고하시기 바랍니다. Dialogue: 0,0:21:07.79,0:21:09.79,Default,,0000,0000,0000,,씬에서 인스턴스를 생성했다가 제거하는 것보다 Dialogue: 0,0:21:09.79,0:21:11.79,Default,,0000,0000,0000,,유지한 파티클 시스템을 재생하는 것이 Dialogue: 0,0:21:11.79,0:21:14.94,Default,,0000,0000,0000,,더 효율적인 이유가 바로 여기 있습니다. Dialogue: 0,0:21:15.71,0:21:17.62,Default,,0000,0000,0000,,그러나 로켓 폭발의 경우, Dialogue: 0,0:21:17.62,0:21:19.62,Default,,0000,0000,0000,,한 번에 여러 번의 폭발이 발생할 수 있으므로 Dialogue: 0,0:21:19.62,0:21:21.62,Default,,0000,0000,0000,,생성 후 제거해야 합니다. Dialogue: 0,0:21:22.12,0:21:24.12,Default,,0000,0000,0000,,이제 플레이어가 적을 처치하고 점수를 얻는 장면을 Dialogue: 0,0:21:24.12,0:21:26.12,Default,,0000,0000,0000,,확인해 볼까요? Dialogue: 0,0:21:26.62,0:21:28.44,Default,,0000,0000,0000,,이것도 두 가지 부분이 있습니다. Dialogue: 0,0:21:28.44,0:21:31.67,Default,,0000,0000,0000,,100점 획득을 보여주는 점수 획득 애니메이션과 Dialogue: 0,0:21:31.67,0:21:33.67,Default,,0000,0000,0000,,점수 증분을 보여주는 화면 상단의 Dialogue: 0,0:21:33.67,0:21:35.53,Default,,0000,0000,0000,,점수 UI입니다. Dialogue: 0,0:21:35.53,0:21:38.30,Default,,0000,0000,0000,,점수 애니메이션은 1과 0, 두 개의 숫자 스프라이트로 Dialogue: 0,0:21:38.30,0:21:40.19,Default,,0000,0000,0000,,구성되어 있습니다. Dialogue: 0,0:21:40.19,0:21:42.87,Default,,0000,0000,0000,,이것을 빈 상위 오브젝트에 속한 씬에 위치시키고 Dialogue: 0,0:21:42.87,0:21:46.04,Default,,0000,0000,0000,,간단한 Destroyer 스크립트를 사용하여 애니메이팅하고, Dialogue: 0,0:21:46.04,0:21:49.19,Default,,0000,0000,0000,,애니메이션이 끝나면 씬에서 제거합니다. Dialogue: 0,0:21:49.19,0:21:51.19,Default,,0000,0000,0000,,타임라인 마지막에 애니메이션 이벤트를 Dialogue: 0,0:21:51.19,0:21:53.19,Default,,0000,0000,0000,,위치시켜 스크립트의 Dialogue: 0,0:21:53.19,0:21:55.19,Default,,0000,0000,0000,,Destroyer 함수를 호출합니다. Dialogue: 0,0:22:06.14,0:22:09.70,Default,,0000,0000,0000,,ScoreUI 자체는 사용자 정의 폰트와 스크립트로 이루어진 Dialogue: 0,0:22:09.70,0:22:11.70,Default,,0000,0000,0000,,간단한 GUI 텍스트 요소로, Dialogue: 0,0:22:11.70,0:22:13.70,Default,,0000,0000,0000,,플레이어의 점수를 관리합니다. Dialogue: 0,0:22:13.70,0:22:16.76,Default,,0000,0000,0000,,Score 변수는 public 변수인데 이는 적이 사망했을 때 Dialogue: 0,0:22:16.76,0:22:18.98,Default,,0000,0000,0000,,Enemy 스트립트에서 읽어 100점을 추가할 수 있음을 Dialogue: 0,0:22:18.98,0:22:20.98,Default,,0000,0000,0000,,의미합니다. Dialogue: 0,0:22:20.98,0:22:22.98,Default,,0000,0000,0000,,지금부터는 적에 대해서 좀 더 자세히 Dialogue: 0,0:22:22.98,0:22:24.98,Default,,0000,0000,0000,,알아보겠습니다. Dialogue: 0,0:22:25.48,0:22:28.26,Default,,0000,0000,0000,,게임에는 민달팽이처럼 생긴 단순한 녹색 괴물과 Dialogue: 0,0:22:28.26,0:22:30.85,Default,,0000,0000,0000,,침공 중 자신을 보호하기 위해 Dialogue: 0,0:22:30.85,0:22:32.85,Default,,0000,0000,0000,,함선을 타고 오는 Dialogue: 0,0:22:32.85,0:22:34.56,Default,,0000,0000,0000,,두 종류의 외계인이 있습니다. Dialogue: 0,0:22:34.56,0:22:36.56,Default,,0000,0000,0000,,이 캐릭터들의 행동은 매우 흡사하기 때문에 Dialogue: 0,0:22:36.56,0:22:38.56,Default,,0000,0000,0000,,같은 스크립트를 공유하지만 Dialogue: 0,0:22:38.56,0:22:40.88,Default,,0000,0000,0000,,Inspector에서 각각의 이동 속도와 방어력을 Dialogue: 0,0:22:40.88,0:22:42.88,Default,,0000,0000,0000,,public 변수들로 설정하여 Dialogue: 0,0:22:42.88,0:22:45.76,Default,,0000,0000,0000,,다르게 만들 수 있습니다. Dialogue: 0,0:22:46.64,0:22:49.09,Default,,0000,0000,0000,,적들은 서로 다른 Walk 애니메이션을 가지고 있는데, Dialogue: 0,0:22:49.09,0:22:51.09,Default,,0000,0000,0000,,민달팽이는 움직이는 꼬리를 가지고 있고 Dialogue: 0,0:22:51.09,0:22:54.44,Default,,0000,0000,0000,,함선을 타고 있는 외계인은 앞뒤로 움직이며 다가옵니다. Dialogue: 0,0:22:55.99,0:22:57.99,Default,,0000,0000,0000,,민달팽이는 Sprite Importer를 사용하여 Dialogue: 0,0:22:57.99,0:22:59.99,Default,,0000,0000,0000,,그래픽의 꼬리 부분을 Dialogue: 0,0:22:59.99,0:23:01.99,Default,,0000,0000,0000,,개별 스프라이트 요소로 정의합니다. Dialogue: 0,0:23:01.99,0:23:04.44,Default,,0000,0000,0000,,이를 통해 전체 스프라이트를 조정하지 않고도 Dialogue: 0,0:23:04.44,0:23:07.48,Default,,0000,0000,0000,,꼬리를 개별적으로 움직일 수 있습니다. Dialogue: 0,0:23:07.48,0:23:09.48,Default,,0000,0000,0000,,축을 오른쪽으로 설정하면 Dialogue: 0,0:23:09.48,0:23:12.12,Default,,0000,0000,0000,,그 점에서부터 꼬리가 늘어났다 줄어드는 애니메이션을 Dialogue: 0,0:23:12.12,0:23:14.12,Default,,0000,0000,0000,,만들 수 있습니다. Dialogue: 0,0:23:16.48,0:23:19.92,Default,,0000,0000,0000,,이 캐릭터의 경우 눈꺼풀을 위아래로 움직이는데 Dialogue: 0,0:23:19.92,0:23:21.92,Default,,0000,0000,0000,,Z값을 사용하여 여러 스프라이트를 서로 분류하여 Dialogue: 0,0:23:21.92,0:23:24.86,Default,,0000,0000,0000,,눈이 눈꺼풀 뒤에 오고 눈앞에서 눈꺼풀 애니메이션이 Dialogue: 0,0:23:24.86,0:23:26.86,Default,,0000,0000,0000,,연출되게 할 수 있습니다. Dialogue: 0,0:23:28.86,0:23:31.27,Default,,0000,0000,0000,,두 번째 적의 애니메이션은 앞뒤로 회전만 시키면 되므로 Dialogue: 0,0:23:31.27,0:23:34.05,Default,,0000,0000,0000,,상당히 간단합니다. Dialogue: 0,0:23:35.80,0:23:37.80,Default,,0000,0000,0000,,적을 이동시키는 기법은 Dialogue: 0,0:23:37.80,0:23:41.23,Default,,0000,0000,0000,,rigidbody의 속도를 설정하여 구동합니다. Dialogue: 0,0:23:41.23,0:23:43.89,Default,,0000,0000,0000,,벽과 같은 장애물에 맞닥뜨리면 Dialogue: 0,0:23:43.89,0:23:47.83,Default,,0000,0000,0000,,충돌체와 겹치는 공간의 점을 확인하는 Dialogue: 0,0:23:47.83,0:23:51.32,Default,,0000,0000,0000,,Physics.OverlapPoint 함수로 이를 감지합니다. Dialogue: 0,0:23:51.32,0:23:53.85,Default,,0000,0000,0000,,레벨 양쪽의 벽 또는 탑이 장애물로 Dialogue: 0,0:23:53.85,0:23:55.85,Default,,0000,0000,0000,,태그되어 있습니다. Dialogue: 0,0:23:55.85,0:23:59.16,Default,,0000,0000,0000,,이 함수가 장애물을 감지하고 Flip 함수를 호출하면 Dialogue: 0,0:23:59.16,0:24:01.77,Default,,0000,0000,0000,,적의 X 스케일이 역전되고 Dialogue: 0,0:24:01.77,0:24:04.07,Default,,0000,0000,0000,,다른 방향으로 이동하게 됩니다. Dialogue: 0,0:24:04.07,0:24:06.07,Default,,0000,0000,0000,,로켓이 적에 부딪힐 때마다 적을 처치하는 경우, Dialogue: 0,0:24:06.07,0:24:09.04,Default,,0000,0000,0000,,스크립트는 로켓이 닿은 특정 적의 Dialogue: 0,0:24:09.04,0:24:11.04,Default,,0000,0000,0000,,Hurt 함수를 호출합니다. Dialogue: 0,0:24:14.96,0:24:16.96,Default,,0000,0000,0000,,이 함수는 해당 적의 체력에서 Dialogue: 0,0:24:16.96,0:24:19.21,Default,,0000,0000,0000,,1을 감소시킵니다. Dialogue: 0,0:24:19.21,0:24:21.21,Default,,0000,0000,0000,,그리고는 FixedUpdate 함수 내에서 Dialogue: 0,0:24:21.21,0:24:23.21,Default,,0000,0000,0000,,적의 체력을 계속 감소시키다가 Dialogue: 0,0:24:23.21,0:24:27.12,Default,,0000,0000,0000,,체력이 0으로 떨어지면 Death 함수를 호출합니다. Dialogue: 0,0:24:31.23,0:24:33.92,Default,,0000,0000,0000,,적이 사망하면 몇 가지 함수를 수행합니다. Dialogue: 0,0:24:33.92,0:24:35.92,Default,,0000,0000,0000,,먼저 2D 캐릭터가 움직이는 Dialogue: 0,0:24:35.92,0:24:37.92,Default,,0000,0000,0000,,여러 스프라이트 오브젝트로 구성되어 있으므로 Dialogue: 0,0:24:37.92,0:24:39.92,Default,,0000,0000,0000,,모든 Sprite Renderer를 비활성화합니다. Dialogue: 0,0:24:40.94,0:24:42.94,Default,,0000,0000,0000,,이는 사망한 캐릭터의 움직이는 요소들을 Dialogue: 0,0:24:42.94,0:24:44.94,Default,,0000,0000,0000,,단일 스프라이트로 대체하기 Dialogue: 0,0:24:44.94,0:24:46.94,Default,,0000,0000,0000,,위해서입니다. Dialogue: 0,0:24:47.74,0:24:49.74,Default,,0000,0000,0000,,주요 Sprite Renderer에 이와 같이 하려면 Dialogue: 0,0:24:49.74,0:24:51.74,Default,,0000,0000,0000,,deadEnemy 변수에 할당된 스프라이트를 사용하도록 Dialogue: 0,0:24:51.74,0:24:54.16,Default,,0000,0000,0000,,설정하면 됩니다. Dialogue: 0,0:24:54.16,0:24:56.16,Default,,0000,0000,0000,,이제 Score 스크립트의 public 변수를 사용하여 Dialogue: 0,0:24:56.16,0:24:58.16,Default,,0000,0000,0000,,점수를 추가합니다. Dialogue: 0,0:24:58.16,0:25:00.74,Default,,0000,0000,0000,,적 사망 시 토크를 추가하여 적을 회전시킴으로써 Dialogue: 0,0:25:00.74,0:25:03.53,Default,,0000,0000,0000,,적의 죽음에 시각적 효과를 추가합니다. Dialogue: 0,0:25:04.45,0:25:06.45,Default,,0000,0000,0000,,적이 죽을 때는 배경을 통과해 떨어져 Dialogue: 0,0:25:06.45,0:25:08.88,Default,,0000,0000,0000,,강에 빠져야 하기 때문에 Dialogue: 0,0:25:08.88,0:25:10.88,Default,,0000,0000,0000,,오브젝트의 모든 충돌체를 찾은 다음 Dialogue: 0,0:25:10.88,0:25:13.59,Default,,0000,0000,0000,,IsTrigger 매개변수를 True로 설정합니다. Dialogue: 0,0:25:13.59,0:25:15.14,Default,,0000,0000,0000,,이로써 적이 배경 충돌체에 충돌하지 않고 Dialogue: 0,0:25:15.14,0:25:17.42,Default,,0000,0000,0000,,떨어지게 됩니다. Dialogue: 0,0:25:17.42,0:25:20.05,Default,,0000,0000,0000,,앞서 설명한 Score 애니메이션의 인스턴스를 생성하기 전에 Dialogue: 0,0:25:20.05,0:25:22.05,Default,,0000,0000,0000,,Death 오디오 클립 배열에서 하나를 Dialogue: 0,0:25:22.05,0:25:25.47,Default,,0000,0000,0000,,선택하여 재생합니다. Dialogue: 0,0:25:27.88,0:25:29.88,Default,,0000,0000,0000,,사망한 적을 씬에서 제거하려면 Dialogue: 0,0:25:29.88,0:25:31.88,Default,,0000,0000,0000,,killTrigger 오브젝트를 이용합니다. Dialogue: 0,0:25:31.88,0:25:34.76,Default,,0000,0000,0000,,killTrigger는 초반에 설명했던 것과 동일한 기능을 수행합니다. Dialogue: 0,0:25:34.76,0:25:36.76,Default,,0000,0000,0000,,플레이어가 아닌 오브젝트가 건드리면 Dialogue: 0,0:25:36.76,0:25:39.95,Default,,0000,0000,0000,,스플래시 애니메이션이 작동되고 해당 오브젝트가 제거됩니다. Dialogue: 0,0:25:39.95,0:25:41.95,Default,,0000,0000,0000,,물에 빠질 때 나는 사운드 효과는 Dialogue: 0,0:25:41.95,0:25:43.95,Default,,0000,0000,0000,,애니메이팅된 스플래시에 연결되어 Awake 작동 시 Dialogue: 0,0:25:43.95,0:25:45.95,Default,,0000,0000,0000,,재생되는 오디오 클립입니다. Dialogue: 0,0:25:45.95,0:25:47.95,Default,,0000,0000,0000,,이로써 움직이는 오브젝트의 인스턴스가 생성되면 Dialogue: 0,0:25:47.95,0:25:50.63,Default,,0000,0000,0000,,사운드가 바로 재생되는 것입니다. Dialogue: 0,0:25:55.15,0:25:57.15,Default,,0000,0000,0000,,게임 레벨을 마무리하기 위해서 배경을 몇 가지 Dialogue: 0,0:25:57.15,0:25:59.15,Default,,0000,0000,0000,,움직이는 소품으로 꾸밉니다. Dialogue: 0,0:25:59.15,0:26:02.30,Default,,0000,0000,0000,,이를 통해 게임 배경을 좀 더 역동적으로 만들 수 있습니다. Dialogue: 0,0:26:02.30,0:26:05.70,Default,,0000,0000,0000,,날아가는 백조에 강둑을 따라 달리는 버스와 택시를 Dialogue: 0,0:26:05.70,0:26:07.12,Default,,0000,0000,0000,,추가해 보죠. Dialogue: 0,0:26:07.12,0:26:10.63,Default,,0000,0000,0000,,먼저 백조부터 시작합니다. 스프라이트 시트에서 생성하고 Dialogue: 0,0:26:10.63,0:26:12.63,Default,,0000,0000,0000,,포토샵에서 그린 다음 Inspector의 Dialogue: 0,0:26:12.63,0:26:14.63,Default,,0000,0000,0000,,Multiple Sprite Mode 가져오기 설정을 사용하여 가져온 Dialogue: 0,0:26:14.63,0:26:16.05,Default,,0000,0000,0000,,백조가 있습니다. Dialogue: 0,0:26:16.05,0:26:18.80,Default,,0000,0000,0000,,이러한 접근을 선택함으로써 유니티는 시트의 각 프레임을 Dialogue: 0,0:26:18.80,0:26:20.80,Default,,0000,0000,0000,,선택하고 에셋의 상위 계층 아래에 속한 해당 프레임을 Dialogue: 0,0:26:20.80,0:26:22.80,Default,,0000,0000,0000,,개별 스프라이트로 가져오는 작업을 Dialogue: 0,0:26:22.80,0:26:24.58,Default,,0000,0000,0000,,자동화합니다. Dialogue: 0,0:26:24.58,0:26:27.28,Default,,0000,0000,0000,,이들은 애니메이션 프레임의 선형 집단으로 Dialogue: 0,0:26:27.28,0:26:29.28,Default,,0000,0000,0000,,해당 스프라이트를 모두 드래그하여 씬에 넣기만 하면 Dialogue: 0,0:26:29.28,0:26:32.35,Default,,0000,0000,0000,,유니티가 알아서 애니메이션 작업을 진행합니다. Dialogue: 0,0:26:32.35,0:26:35.32,Default,,0000,0000,0000,,드디어, 날아가는 백조가 배경 요소로 Dialogue: 0,0:26:35.32,0:26:37.76,Default,,0000,0000,0000,,추가될 준비가 되었습니다. Dialogue: 0,0:26:37.76,0:26:40.16,Default,,0000,0000,0000,,이제는 백조에 rigidbody2D를 적용해서 Dialogue: 0,0:26:40.16,0:26:42.16,Default,,0000,0000,0000,,화면을 가로질러 날아갈 수 있는 속도를 Dialogue: 0,0:26:42.16,0:26:43.37,Default,,0000,0000,0000,,사용할 수 있도록 합니다. Dialogue: 0,0:26:43.37,0:26:47.33,Default,,0000,0000,0000,,버스와 택시처럼 백조도 프리팹으로 저장됩니다. Dialogue: 0,0:26:49.26,0:26:51.26,Default,,0000,0000,0000,,버스 및 택시 프리팹의 경우 Dialogue: 0,0:26:51.26,0:26:53.26,Default,,0000,0000,0000,,차량의 본체와 바퀴를 Dialogue: 0,0:26:53.26,0:26:55.26,Default,,0000,0000,0000,,Sprite Importer를 통해 분리하고 Dialogue: 0,0:26:55.26,0:26:58.39,Default,,0000,0000,0000,,간단히 흔들리는 애니메이션을 적용합니다. Dialogue: 0,0:26:58.39,0:27:00.79,Default,,0000,0000,0000,,여기에 2d rigidbody도 적용하여 Dialogue: 0,0:27:00.79,0:27:02.79,Default,,0000,0000,0000,,속도를 사용해 화면을 지나가도록 만들 수 Dialogue: 0,0:27:02.79,0:27:04.38,Default,,0000,0000,0000,,있습니다. Dialogue: 0,0:27:07.28,0:27:10.27,Default,,0000,0000,0000,,3가지 소품인 버스, 택시, 백조가 Dialogue: 0,0:27:10.27,0:27:12.27,Default,,0000,0000,0000,,화면에 나타나게 만드는 Dialogue: 0,0:27:12.27,0:27:14.27,Default,,0000,0000,0000,,재사용 가능한 하나의 스크립트를 생성했습니다. Dialogue: 0,0:27:14.27,0:27:16.62,Default,,0000,0000,0000,,BackgroundPropsSpawner 스크립트 또한 Dialogue: 0,0:27:16.62,0:27:19.84,Default,,0000,0000,0000,,화면에 나타나는 출현 빈도, 지정 속도 및 Dialogue: 0,0:27:19.84,0:27:21.84,Default,,0000,0000,0000,,생성 위치를 처리합니다.\N597\N00:27:21,838 --> 00:27:24,521\N이는 우리가 동일한 스크립트로 3개의 Creator 오브젝트를 Dialogue: 0,0:27:24.52,0:27:26.52,Default,,0000,0000,0000,,변경할 수 있다는 뜻입니다. Dialogue: 0,0:27:26.52,0:27:28.52,Default,,0000,0000,0000,,어떤 프리팹을 생성할지, 어떤 속성을 줄 것인지 Dialogue: 0,0:27:28.52,0:27:30.52,Default,,0000,0000,0000,,변경할 수가 있는 것입니다. Dialogue: 0,0:27:30.52,0:27:33.85,Default,,0000,0000,0000,,자세한 내용은 스크립트의 코멘트를 확인하십시오. Dialogue: 0,0:27:33.85,0:27:36.17,Default,,0000,0000,0000,,마지막으로 배경에 역동성을 가미하기 위해 Dialogue: 0,0:27:36.17,0:27:40.41,Default,,0000,0000,0000,,흐르는 구름, 강과 안개를 추가했습니다. Dialogue: 0,0:27:41.32,0:27:44.52,Default,,0000,0000,0000,,이들은 2개의 배경 스프라이트 인스턴스를 상위 오브젝트에 추가하여 Dialogue: 0,0:27:44.52,0:27:48.00,Default,,0000,0000,0000,,만들었는데 화면을 가로지르며 서서히 진행하는 애니메이션을 Dialogue: 0,0:27:48.00,0:27:50.00,Default,,0000,0000,0000,,사용했습니다. Dialogue: 0,0:27:50.00,0:27:52.65,Default,,0000,0000,0000,,이 애니메이션은 루프 기능으로 Dialogue: 0,0:27:52.65,0:27:54.65,Default,,0000,0000,0000,,무한 반복됩니다. Dialogue: 0,0:27:59.18,0:28:01.03,Default,,0000,0000,0000,,지금까지 유니티 게임 제작 방법을 소개해 드렸습니다. Dialogue: 0,0:28:01.03,0:28:03.03,Default,,0000,0000,0000,,이 개요를 통해 유니티를 사용해 2D 게임을 제작하는 데 Dialogue: 0,0:28:03.03,0:28:05.52,Default,,0000,0000,0000,,도움이 되었길 바라고, Dialogue: 0,0:28:05.52,0:28:07.52,Default,,0000,0000,0000,,앞으로 간단한 프로젝트 및 튜토리얼을 더 선보일 Dialogue: 0,0:28:07.52,0:28:08.97,Default,,0000,0000,0000,,것을 약속드립니다. Dialogue: 0,0:28:08.97,0:28:11.69,Default,,0000,0000,0000,,Unity 4.3에 대한 여러분의 의견을 기다립니다. Dialogue: 0,0:28:11.69,0:28:13.69,Default,,0000,0000,0000,,그리고 곧 여러분이 만든 훌륭한 2D 게임을 Dialogue: 0,0:28:13.69,0:28:14.96,Default,,0000,0000,0000,,만나볼 수 있길 기대합니다. Dialogue: 0,0:28:14.96,0:28:16.49,Default,,0000,0000,0000,,감사합니다.