< Return to Video

Unity 4.3 - 2D Game Development Walkthrough

  • 0:00 - 0:04
    Unity 4.3에서 첫 2D 기능을 소개합니다.
  • 0:04 - 0:06
    이를 알아보기 위해 이 툴을 이용하여
  • 0:06 - 0:08
    데모 프로젝트를 만들어봤습니다.
  • 0:08 - 0:12
    이 2D 플랫폼 게임은 Tower Bridge Defence라고 합니다.
  • 0:12 - 0:14
    외계인의 습격을 받은 영국의 타워 브리지를
  • 0:14 - 0:16
    묘사하고 있습니다.
  • 0:16 - 0:18
    이는 스프라이트 및 물리 기반의 2D 샘플 레벨로
  • 0:18 - 0:20
    유니티를 통해 어떻게 2D 게임을 만들 수 있는지
  • 0:20 - 0:23
    보여드리고자 합니다.
  • 0:23 - 0:25
    이 비디오를 통해 데모에서 사용된
  • 0:25 - 0:28
    배경과 전경 제작, 캐릭터, 효과, 카메라 추적,
  • 0:28 - 0:30
    애니메이션 및 스크립팅에 대해
  • 0:30 - 0:32
    설명하겠습니다.
  • 0:32 - 0:34
    우선 유니티에서 2D를 어떻게
  • 0:34 - 0:36
    사용하는지 기초부터 알아보겠습니다.
  • 0:37 - 0:39
    2D 작업을 위해서 가장 먼저 여러 설정에서
  • 0:39 - 0:41
    Editor Behaviour Mode를
  • 0:41 - 0:43
    2D로 설정해야 합니다.
  • 0:43 - 0:45
    이는 프로젝트 마법사의 드롭다운 메뉴를 사용하여
  • 0:45 - 0:47
    새로운 프로젝트를 만들 때 설정하거나, 작업 중에
  • 0:47 - 0:50
    상단 메뉴에서 Edit - Project Settings - Editor를
  • 0:50 - 0:53
    선택하여 설정할 수 있습니다.
  • 0:53 - 0:55
    이렇게 하면 기본적으로 텍스처를
  • 0:55 - 0:57
    스프라이트로 가져오게 되고
  • 0:57 - 1:00
    Scene View는 2D 모드로 기본 설정됩니다.
  • 1:00 - 1:02
    이 설정으로 2D 게임 제작에 필요한 완전한 직교 뷰
  • 1:02 - 1:04
    (orthographic view)가 제공됩니다.
  • 1:04 - 1:07
    또한 화면의 오른쪽 상단에 일반적으로 위치한
  • 1:07 - 1:09
    3D 기즈모를 숨겨 더 넓은 작업 공간을 확보할 수
  • 1:09 - 1:12
    있습니다. 이러한 설정 이외에도 2D 워크플로우는
  • 1:12 - 1:14
    유니티의 기존 3D 게임 제작 방식을
  • 1:14 - 1:17
    그대로 반영하도록 설계되었습니다.
  • 1:17 - 1:19
    즉, 이미 유니티에 대해 알고 있는 사용자라면
  • 1:19 - 1:21
    2D 게임 제작을 바로 시작할 수 있는 유리한 위치를
  • 1:21 - 1:23
    선점하신 겁니다.
  • 1:23 - 1:25
    유니티에서는 2D와 3D를 함께 섞어 사용할 수 있다는 점에
  • 1:25 - 1:27
    주목할 필요가 있습니다. 예를 들어
  • 1:27 - 1:30
    2D 게임에 3D 요소를 추가하고 싶다면(반대의 경우도 마찬가지)
  • 1:30 - 1:33
    아무런 문제 없이 진행할 수 있습니다.
  • 1:33 - 1:35
    데모 프로젝트를 살펴보면서 어떻게 완성되는지
  • 1:35 - 1:38
    하나씩 살펴보도록 하죠.
  • 1:39 - 1:41
    우선은 샘플 레벨의 레벨 디자인을
  • 1:41 - 1:43
    스케치하는 것으로 시작하여
  • 1:43 - 1:45
    포토샵에서 레이아웃을 만드는 작업을 거칩니다.
  • 1:45 - 1:47
    만들어서 내보낸 레이어는
  • 1:47 - 1:49
    새로운 스프라이트 유형으로
  • 1:49 - 1:51
    유니티에 가져올 수 있습니다.
  • 1:58 - 2:01
    나중에 배경에 시차(parallax)를 생성하려면
  • 2:01 - 2:04
    배경 요소의 일부를 분리해서
  • 2:04 - 2:07
    Background Sorting Layer에 위치시킵니다.
  • 2:07 - 2:10
    유니티의 또 다른 2D 개발 기능입니다.
  • 2:10 - 2:13
    이 레이어에 모든 배경을 할당한 다음에는
  • 2:13 - 2:15
    Sprite Renderer의 Order In Layer 속성을 이용하여
  • 2:15 - 2:17
    정렬할 수 있습니다.
  • 2:17 - 2:19
    모든 위치가 지정되면
  • 2:19 - 2:21
    Background Sorting Layer를 잠글 수 있습니다.
  • 2:21 - 2:23
    이를 잠금으로써 전경 요소 추가 시
  • 2:23 - 2:25
    실수로 배경 요소를 드래그할지도 모른다는
  • 2:25 - 2:28
    걱정에서 벗어날 수 있습니다.
  • 2:28 - 2:30
    이는 인터페이스 오른쪽 상단의 풀다운 메뉴인
  • 2:30 - 2:32
    Layers에서 실시할 수 있습니다.
  • 2:33 - 2:36
    배경 요소는 순전히 장식용이기 때문에
  • 2:36 - 2:38
    스프라이트 게임 오브젝트에는
  • 2:38 - 2:40
    추가 요소가 필요 없습니다.
  • 2:40 - 2:42
    이들은 BackgroundParallax라고 불리는
  • 2:42 - 2:44
    시차 조절을 위한 단순한 스크립트가 포함된 빈 게임 오브젝트에
  • 2:44 - 2:46
    하위(child) 관계로 지정되었습니다.
  • 2:46 - 2:49
    이 스크립트는 Scripts 폴더에서 확인할 수 있습니다.
  • 2:49 - 2:51
    아주 자세한 주석과 함께 설명되어 있습니다.
  • 2:55 - 2:57
    이제 캐릭터들이 실제로 뛰어다닐
  • 2:57 - 2:59
    전경 요소를 생성할 차례입니다.
  • 3:00 - 3:02
    런던 타워 브리지에 가운데에 UFO가 착륙한 모습을
  • 3:02 - 3:03
    디자인했습니다.
  • 3:03 - 3:05
    캐릭터는 하늘에서 나타나는 적을 피해 배경에서
  • 3:05 - 3:07
    자유롭게 돌아다니면서 다음 레벨로
  • 3:07 - 3:09
    진행해 나갑니다.
  • 3:09 - 3:11
    그러므로 각각의 전경에는 캐릭터가 걸음을 디딜 수 있는
  • 3:11 - 3:14
    충돌체가 필요합니다.
  • 3:14 - 3:16
    효율성을 위해 대부분의 배경에는
  • 3:16 - 3:18
    2D 박스 충돌체(Box Collider)를 사용하지만
  • 3:18 - 3:21
    UFO는 복잡한 형태를 지니고 있습니다.
  • 3:23 - 3:25
    유니티의 폴리곤 충돌체(Polygon Collider)를 사용하면
  • 3:25 - 3:27
    스프라이트의 형태를 기반으로
  • 3:27 - 3:29
    충돌체가 자동으로 생성됩니다.
  • 3:29 - 3:31
    이는 나중에 충돌체의 형태를 변경할 수도 있음을
  • 3:31 - 3:32
    의미합니다.
  • 3:32 - 3:34
    충돌체 형태의 포인트들을 이동, 추가 또는 빼서
  • 3:34 - 3:36
    걸어 다니기에 더 적합하게
  • 3:36 - 3:38
    만들 수 있습니다.
  • 3:39 - 3:41
    이러한 전경을 분류하기 위해
  • 3:41 - 3:43
    Foregrounds Sorting Layer를 생성합니다.
  • 3:43 - 3:46
    이 레이어는 Tags And Layers 관리자의 배경에 앞서게 위치시킵니다.
  • 3:49 - 3:51
    다음으로 우리의 주인공을 살펴보죠.
  • 3:54 - 3:56
    플레이어 캐릭터도 포토샵에서 디자인되었는데
  • 3:56 - 3:58
    이 데모에서는
  • 3:58 - 4:00
    2D 대작 게임의 주인공인 Rayman 같은
  • 4:00 - 4:02
    독립적인 팔다리와 기능을 가진
  • 4:02 - 4:04
    캐릭터를 만들기로 했습니다.
  • 4:04 - 4:06
    또 다른 방법으로 스프라이트 시트 기반의
  • 4:06 - 4:08
    애니메이션으로 포토샵에서 개별 프레임을
  • 4:08 - 4:10
    디자인할 수도 있습니다.
  • 4:10 - 4:12
    이는 나중에 배경에 있는 백조에 사용하게 될 방법으로
  • 4:12 - 4:14
    본 비디오 후반에 설명하도록 하겠습니다.
  • 4:15 - 4:17
    여기서 캐릭터의 개별 요소를 움직이게 하려면
  • 4:17 - 4:20
    디자인을 완성한 뒤 신체 요소들을
  • 4:20 - 4:22
    캔버스의 별도 공간으로 이동시켜
  • 4:22 - 4:25
    유니티가 이들을 Importer에서 개별 스프라이트로
  • 4:25 - 4:28
    분리시키도록 합니다.
  • 4:29 - 4:31
    이는 모든 스트라이트를 움직이는 개별 요소들로
  • 4:31 - 4:33
    정할 수 있다는 뜻입니다.
  • 4:33 - 4:35
    이 요소들을 방금 생성한 Character Sorting Layer에
  • 4:35 - 4:38
    위치시키고 Transform(변환) 내 Z값을 조절해
  • 4:38 - 4:41
    원하는 렌더링 깊이로 정렬합니다.
  • 4:49 - 4:51
    이제 이 모든 스프라이트는
  • 4:51 - 4:53
    컨트롤 스크립팅, 충돌체, 물리 등이 모두
  • 4:53 - 4:57
    포함되어 있는 빈 게임 오브젝트 내에 정렬됩니다.
  • 4:57 - 4:59
    여기까지 완성되면 캐릭터의 각각의 스프라이트를 애니메이팅하여
  • 4:59 - 5:01
    Idle, Run, Jump, Shoot 및 Death 애니메이션을
  • 5:01 - 5:04
    만들 수 있는 업그레이드된 애니메이션 창을
  • 5:04 - 5:07
    사용할 수 있게 됩니다.
  • 5:07 - 5:10
    애니메이션 창의 새로운 도프시트 보기 덕분에
  • 5:10 - 5:12
    이 작업이 정말 편해졌습니다.
  • 5:13 - 5:16
    애니메이션을 상위(parent) 오브젝트에 추가하고
  • 5:16 - 5:19
    하위(child) 오브젝트의 키프레임을 생성하면 됩니다.
  • 5:19 - 5:21
    원하는 곳으로 플레이헤드를 옮긴 후
  • 5:21 - 5:23
    캐릭터의 여러 부분을 옮기면
  • 5:23 - 5:25
    키프레임 애니메이션이 자동으로 만들어집니다.
  • 5:27 - 5:30
    애니메이션을 커브와 도프시트 사이에서
  • 5:30 - 5:32
    전환하여 볼 수 있기 때문에 타이밍과 디자인 조절이
  • 5:32 - 5:35
    정말 쉬워졌습니다.
  • 5:37 - 5:39
    이렇게 생성된 애니메이션으로
  • 5:39 - 5:41
    캐릭터의 상태 머신을 디자인하면
  • 5:41 - 5:44
    코드가 호출되었을 때 여러 가지 애니메이션을
  • 5:44 - 5:45
    재생할 수 있습니다.
  • 5:45 - 5:47
    캐릭터의 애니메이터 컨트롤러는
  • 5:47 - 5:51
    3D 바이패드로 구동되는 것이 아니므로
  • 5:51 - 5:54
    물리 엔진에 맞춰 애니메이션을 구동하려면
  • 5:54 - 5:56
    Apply Root Motion의 선택을 해제하고
  • 5:56 - 5:57
    Animate Physics를 선택합니다.
  • 5:57 - 6:00
    배경에서 움직이게 하려면 주인공의 발에는
  • 6:00 - 6:02
    원형 충돌체를 지정하고 나머지 몸통 부분에는
  • 6:02 - 6:05
    박스 충돌체를 지정합니다.
  • 6:05 - 6:07
    이를 통해 주인공은 오르막을 자연스럽게 오르내릴 수 있고,
  • 6:07 - 6:09
    점프하면 천장에 머리가 닿게 됩니다.
  • 6:10 - 6:13
    캐릭터와 캐릭터 움직임을 제어하기 위해
  • 6:13 - 6:16
    2D 물리 포스 내에서 움직이도록 스크립트를 작성했습니다.
  • 6:16 - 6:18
    이를 통해 게임 중 물리를 주인공과 적에게
  • 6:18 - 6:20
    적용할 수 있어 더욱 역동적인 게임 플레이가
  • 6:20 - 6:21
    가능합니다.
  • 6:21 - 6:24
    캐릭터의 PlayerControl 스크립트에서
  • 6:24 - 6:26
    플레이어의 입력(input)을 확인합니다.
  • 6:26 - 6:28
    이를 사용하여 물리 포스를 움직임에 적용하고
  • 6:28 - 6:31
    입력 값을 애니메이터에게 전송함으로써
  • 6:31 - 6:33
    어떤 애니메이션이 재생될지 정의하고
  • 6:33 - 6:36
    상태(state)로 생성한
  • 6:36 - 6:38
    여러 가지 애니메이션 클립 간의
  • 6:38 - 6:40
    매끄러운 전환이 가능해집니다.
  • 6:40 - 6:42
    애니메이션 클립에서 상태를 생성할 수 있는
  • 6:42 - 6:44
    애니메이터를 사용해서 가장 좋은 점은
  • 6:44 - 6:47
    다시 애니메이션 작업을 하지 않아도 물리 속도에 맞게
  • 6:47 - 6:49
    애니메이션의 속도를
  • 6:49 - 6:51
    조절할 수 있다는 것입니다.
  • 7:23 - 7:25
    FixedUpdate 함수는 각 물리 단계를 평가한 다음
  • 7:25 - 7:28
    가장 먼저 하는 것은
  • 7:28 - 7:30
    Horizontal 입력 값을 애니메이터의
  • 7:30 - 7:33
    Speed 매개변수에 공급하는 것입니다.
  • 7:34 - 7:36
    단순한 상태 머신에서 Idle과 Run 간에
  • 7:36 - 7:38
    전환하려면 Speed 매개변수가
  • 7:38 - 7:42
    0.1 이상이어야 합니다.
  • 7:42 - 7:44
    그렇게 되면 애니메이터는 Idle에서 Run 상태로
  • 7:44 - 7:46
    블렌딩합니다.
  • 7:52 - 7:54
    그리고 나서 움직이도록 하려면
  • 7:54 - 7:57
    플레이어의 2D 물리 요소인 rigidbody2D에
  • 7:57 - 7:59
    포스를 추가합니다.
  • 8:00 - 8:03
    또한 Horizontal 입력 값이 0 보다 높은지 낮은지 확인하여
  • 8:03 - 8:05
    캐릭터가 어느 방향을 바라보게 만들지
  • 8:05 - 8:08
    결정합니다.
  • 8:08 - 8:11
    그 원리는 유니티 내에서 왼쪽 입력 키를 누르면
  • 8:11 - 8:15
    -1 값이 되고 오른쪽 입력 키는 +1 값이 되기 때문입니다.
  • 8:15 - 8:19
    입력에 따라 캐릭터의 X축을 역전시켜
  • 8:19 - 8:21
    캐릭터를 반대 방향으로 바꾸는
  • 8:21 - 8:25
    뒤집기 함수를 호출합니다.
  • 8:27 - 8:29
    플레이어가 지상에 있도록 정하려면
  • 8:29 - 8:32
    Ground라고 하는 유니티 레이어를 추가하고
  • 8:32 - 8:35
    캐릭터가 걸어 다닐 수 있는 전경 표면 전체에 적용합니다.
  • 8:43 - 8:46
    2D의 Linecast 함수를 사용하면
  • 8:46 - 8:48
    Ground 레이어에 속한 요소 중 캐릭터의 발밑에 위치한 것이 있는지
  • 8:48 - 8:50
    확인할 수 있습니다.
  • 8:50 - 8:53
    이를 더 손쉽게 커스터마이징하기 위해
  • 8:53 - 8:55
    지상을 확인할 수 있는 포인트로 사용할
  • 8:55 - 8:57
    빈 게임 오브젝트를 생성합니다.
  • 8:57 - 8:59
    이 빈 오브젝트에 기즈모를 추가하면
  • 8:59 - 9:01
    캐릭터 아래로 얼마나 먼지 조종할 수 있어
  • 9:01 - 9:03
    지상을 확인할 수 있습니다.
  • 9:03 - 9:05
    이것은 게임플레이 측면에서 보면 캐릭터가
  • 9:05 - 9:08
    지상에 있을 때만 점프할 수 있다는 뜻이 됩니다.
  • 9:08 - 9:10
    플레이어 제어에 대한 자세한 정보는 스크립트의
  • 9:10 - 9:13
    다른 코멘트를 확인하십시오.
  • 9:13 - 9:15
    플레이어의 무기는 비디오 후반에
  • 9:15 - 9:16
    살펴보겠습니다.
  • 9:16 - 9:18
    이제 데모에서 카메라가 어떻게 플레이어를
  • 9:18 - 9:20
    추적하는지 알아보겠습니다.
  • 9:21 - 9:24
    3D 게임과 마찬가지로 2D 게임에서도
  • 9:24 - 9:26
    액션을 추적하는 카메라의 움직임이
  • 9:26 - 9:28
    게임을 완성되게 만들 수도, 망칠 수도 있습니다.
  • 9:28 - 9:31
    전통 2D 플랫폼 게임을 만들기 위해 2D 게임 역사에서
  • 9:31 - 9:34
    가장 흥미로운 카메라 기법을 사용했던
  • 9:34 - 9:37
    슈퍼 닌텐도 또는 슈퍼 패미콤용 게임인
  • 9:37 - 9:39
    Super Mario World를 살펴보겠습니다.
  • 9:39 - 9:41
    Super Mario world에서 카메라는
  • 9:41 - 9:43
    수평으로 움직이지만 Viewport 중심에서
  • 9:43 - 9:45
    사각지대 또는 여백을 사용하므로
  • 9:45 - 9:47
    캐릭터가 조금씩 움직일 때는
  • 9:47 - 9:49
    카메라가 쫓아가지 않아도 됩니다.
  • 9:49 - 9:52
    캐릭터가 여백 밖으로 이동하면
  • 9:52 - 9:54
    그제야 카메라가 따라옵니다.
  • 9:54 - 9:57
    Super Mario World 카메라는 수직으로 순간 이동하기 위해
  • 9:57 - 10:00
    특정한 높이를 사용합니다.
  • 10:00 - 10:02
    앞으로 스테이지가 추가되면 필요하겠지만
  • 10:02 - 10:04
    현재 이 게임에서는 X축으로 긴 레벨이 없으므로
  • 10:04 - 10:07
    이러한 세부 사항까지는 필요 없습니다.
  • 10:07 - 10:09
    이러한 이유로 카메라는 수평 작동 방식과
  • 10:09 - 10:13
    비슷하게 수직으로 이동합니다.
  • 10:19 - 10:21
    mainCamera 게임 오브젝트에서 CameraFollow 스크립트의
  • 10:21 - 10:23
    코멘트를 통해 이러한 효과를 어떻게
  • 10:23 - 10:25
    만들었는지 확인해 보십시오.
  • 10:26 - 10:28
    이 게임에서 사용된 효과가 몇 개가 있으나
  • 10:28 - 10:30
    주인공이 맞닥뜨린 외계인 학살자들을 공격하여
  • 10:30 - 10:33
    처치하는 능력이 가장 중요합니다.
  • 10:33 - 10:36
    주인공은 반동으로 발사되는 바주카를 사용합니다.
  • 10:36 - 10:39
    이 동작은 여러 부분으로 나누어집니다.
  • 10:39 - 10:42
    먼저 키 입력을 정하고, Fire 키가 눌러지면
  • 10:42 - 10:44
    로켓의 인스턴스를 만들고
  • 10:44 - 10:48
    오디오 클립을 재생하여 재생할 애니메이션 상태를 작동시킵니다.
  • 10:48 - 10:50
    좀 더 자세하게 알아보도록 하죠.
  • 10:50 - 10:52
    Run과 같은 다른 애니메이션 재생 중에
  • 10:52 - 10:54
    Shoot 애니메이션을 재생하려면
  • 10:54 - 10:56
    애니메이터 내에 Shooting이라는 별도의 레이어를
  • 10:56 - 10:58
    만들어야 합니다.
  • 10:58 - 11:00
    여기서 Weight 속성을 1로 설정하면
  • 11:00 - 11:03
    Shooting 레이어에서 클립으로 움직이는
  • 11:03 - 11:05
    캐릭터의 모든 부위에 대한 움직임을 기본 레이어에서
  • 11:05 - 11:07
    완전히 재지정할 수 있습니다.
  • 11:20 - 11:22
    이 레이어에서 Shoot 트리거 매개변수가
  • 11:22 - 11:25
    코드에서 호출될 때 Shoot 애니메이션을
  • 11:25 - 11:27
    다른 상태로 전환합니다.
  • 11:27 - 11:31
    이 부분을 맡고 있는 Gun 스크립트를 확인해 볼까요?
  • 11:33 - 11:35
    애니메이터에 접근하여 트리거를 True로
  • 11:35 - 11:37
    설정한 것을 확인할 수 있습니다.
  • 11:37 - 11:41
    트리거는 스위치로 작동하며 다음 프레임에서 스스로 False로 재설정해
  • 11:41 - 11:43
    다시 호출할 수 있게 만들기 때문에
  • 11:43 - 11:46
    Shooting과 같은 동작에 최적입니다.
  • 11:46 - 11:49
    이 스크립트에서는 애니메이션 설정뿐만 아니라
  • 11:49 - 11:51
    로켓을 발사하고,
  • 11:51 - 11:53
    오디오 클립을 재생하고,
  • 11:53 - 11:55
    플레이어가 바라보는 방향에 따라
  • 11:55 - 11:58
    로켓의 인스턴스를 만들고 속도를 지정합니다.
  • 11:58 - 12:01
    이는 X축에서 양수 또는 음수로 표시됩니다.
  • 12:01 - 12:04
    이 스크립트는 주인공의 hierarchy의 빈 게임 오브젝트인
  • 12:04 - 12:05
    Gun에 포함되어 있습니다.
  • 12:05 - 12:08
    코드를 이런 방식으로 빈 게임 오브젝트에 놓으면
  • 12:08 - 12:10
    로켓이 생성될 자리를
  • 12:10 - 12:12
    쉽게 잡을 수 있습니다.
  • 12:12 - 12:14
    바주카 끝 부분에
  • 12:14 - 12:16
    빈 오브젝트를 위치시키고,
  • 12:16 - 12:18
    로켓이 나타날 지점으로
  • 12:18 - 12:20
    그 위치를 사용하게 됩니다.
  • 12:40 - 12:43
    2D rigidbody로 만들어진 로켓이
  • 12:43 - 12:45
    움직이게 만들려면
  • 12:45 - 12:47
    속도를 지정해야 합니다.
  • 12:47 - 12:49
    스트라이트 전환 불꽃 배기가스에
  • 12:49 - 12:51
    연기를 표현하는 파티클 시스템이 있습니다.
  • 12:53 - 12:56
    파티클 시스템은 새로운 스프라이트 그래픽 유형을 허용합니다.
  • 12:56 - 12:58
    그러므로 재질에 연기 스프라이트 시트를 추가하여
  • 12:58 - 13:00
    파티클 시스템의 텍스트 시트 애니메이션 모듈에
  • 13:00 - 13:04
    할당할 수 있고 파티클 배출용 스프라이트의
  • 13:04 - 13:06
    즉각적인 애니메이션을
  • 13:06 - 13:08
    확보할 수 있습니다.
  • 13:16 - 13:19
    로켓이 적을 강타하거나 배경의 일부에 맞으면
  • 13:19 - 13:21
    로켓은 파괴되고
  • 13:21 - 13:23
    폭파가 일어납니다.
  • 13:23 - 13:25
    이러한 폭파는 생성한 스프라이트 시트를 통해
  • 13:25 - 13:28
    애니메이팅 되는 스프라이트 게임 오브젝트입니다.
  • 13:28 - 13:30
    그리고 다시 분류 레이어를 사용하여
  • 13:30 - 13:34
    모든 전경 오브젝트 중 가장 낮은 레이어 순서에서 렌더링합니다.
  • 13:36 - 13:38
    이러한 스프라이트 기반 애니메이션을 추가할 때
  • 13:38 - 13:40
    Project 패널의 파일을 선택하고
  • 13:40 - 13:42
    Sprite Mode Multiple을 선택하여
  • 13:42 - 13:45
    스프라이트를 설정합니다.
  • 13:45 - 13:47
    이를 통해 Sprite Editor에 액세스할 수 있어
  • 13:47 - 13:50
    수동 또는 자동으로 자를 수 있습니다.
  • 13:50 - 13:52
    파일에서 적절한 스프라이트를 선택한 후
  • 13:52 - 13:54
    Apply를 클릭하면
  • 13:54 - 13:57
    유니티에서 프로젝트에서 사용할 파일의
  • 13:57 - 13:59
    하위 스프라이트를 생성합니다.
  • 14:00 - 14:02
    로켓 만들기 아주 간단하죠?
  • 14:02 - 14:04
    적을 처치하는 기법은 비디오 후반의
  • 14:04 - 14:07
    적군 편에서 확인하겠습니다.
  • 14:07 - 14:09
    플레이어 캐릭터로 돌아가서 체력과 적에게 입은
  • 14:09 - 14:12
    피해를 어떻게 처리할지 확인해 보겠습니다.
  • 14:12 - 14:14
    체력은 부동(Float)으로 저장되고
  • 14:14 - 14:16
    적과 닿아서 생기는 상호 작용을
  • 14:16 - 14:19
    TakeDamage 함수라고 부릅니다.
  • 14:19 - 14:21
    이는 repeatDamagePeriod가 지났을 때만
  • 14:21 - 14:23
    작동하여 플레이어가 너무 일찍
  • 14:23 - 14:25
    죽는 것을 방지합니다.
  • 14:27 - 14:29
    플레이어가 적을 더 쉽게 피하고
  • 14:29 - 14:31
    피해를 입었을 때 알 수 있도록
  • 14:31 - 14:33
    캐릭터가 물리적으로 피해를 받고
  • 14:33 - 14:35
    반동으로 튕겨 나가게 만듭니다.
  • 14:35 - 14:38
    이를 위해 TakeDamage 함수는 물리 포스를 추가하여
  • 14:38 - 14:40
    플레이어의 잠시 점프하지 못하게 만들고
  • 14:40 - 14:42
    적의 플레이어를 향한 벡터를 찾아
  • 14:42 - 14:44
    적을 해당 방향으로
  • 14:44 - 14:46
    튕겨 나가게 합니다.
  • 14:46 - 14:49
    hurtForce 변수는 Inspector에 공개되어 있어
  • 14:49 - 14:51
    스크립트로 다시 돌아가지 않고
  • 14:51 - 14:53
    게임 플레이의 해당 요소를 조정하도록
  • 14:53 - 14:55
    변경할 수 있습니다.
  • 14:55 - 14:57
    플레이어를 밀어내는 것뿐 아니라
  • 14:57 - 15:00
    플레이어의 체력을 감소시키고
  • 15:00 - 15:02
    체력 게이지를 업데이트하는 것도 가능합니다.
  • 15:02 - 15:05
    체력의 감소를 나타내려면 체력 게이지의
  • 15:05 - 15:07
    가로 길이에서 감소한 부분을 빼며
  • 15:07 - 15:10
    총 체력 대비 현재 체력의 비율을 찾아
  • 15:10 - 15:13
    녹색과 빨간색의 색상 알림을 사용하여
  • 15:13 - 15:15
    나타냅니다.
  • 15:15 - 15:18
    체력 게이지는 게이지의 윤곽과 게이지 본체,
  • 15:18 - 15:20
    즉 두 개의 스프라이트로
  • 15:20 - 15:22
    구성되어 있습니다.
  • 15:22 - 15:24
    이 체력 게이지는 포토샵에서 디자인된 다음에
  • 15:24 - 15:26
    두 가지 개별 요소로 내보내진 것입니다.
  • 15:26 - 15:28
    이 스프라이트의 가져오기 설정에서
  • 15:28 - 15:30
    축을 그래픽 왼쪽 중간으로 설정하면
  • 15:30 - 15:34
    값이 낮아질 때 왼쪽으로 줄어들게 됩니다.
  • 15:49 - 15:51
    이 두 개의 스프라이트는 플레이어를 쫓아가도록 만드는
  • 15:51 - 15:53
    단순한 스크립트를 가진 빈 상위 게임 오브젝트에
  • 15:53 - 15:55
    속해 있습니다.
  • 15:55 - 15:57
    플레이어 오브젝트의 위치와 같은 위치에
  • 15:57 - 15:59
    설정하면 이것이 가능합니다.
  • 15:59 - 16:01
    거기에 공개로 설정한 오프셋을 통해
  • 16:01 - 16:03
    Inspector에서 조절할 수 있습니다.
  • 16:16 - 16:18
    플레이어의 체력이 0이 되면
  • 16:18 - 16:20
    충돌체를 트리거로 설정하여
  • 16:20 - 16:23
    레벨에서 떨어지게 만듭니다.
  • 16:23 - 16:25
    그리고 Sprite Renderer를
  • 16:25 - 16:28
    게임의 가장 앞쪽에서 렌더링하도록 만드는 UI Sorting layer에 위치시켜
  • 16:28 - 16:32
    렌더링의 가장 앞으로 플레이어를 이동시킵니다.
  • 16:32 - 16:34
    플레이어 사망 시 모자와 총이 사라지는 Death와
  • 16:34 - 16:37
    Falling이라고 부르는 두 개의 애니메이션이
  • 16:37 - 16:39
    마련되어 있습니다.
  • 16:39 - 16:41
    Death 애니메이션이 끝나면
  • 16:41 - 16:44
    애니메이터의 전환 조건인 Exit Time에 따라
  • 16:44 - 16:47
    Falling으로 자연스럽게 바뀝니다.
  • 16:51 - 16:53
    마지막으로 Death 시퀀스 중 플레이어가 캐릭터를
  • 16:53 - 16:55
    이동하거나 총을 쏘지 못하도록 하기 위해
  • 16:55 - 16:58
    PlayerControl 및 Gun 스크립트를 비활성화합니다.
  • 16:58 - 17:01
    Die 함수는 public으로 만들어졌으므로
  • 17:01 - 17:03
    플레이어가 물에 빠지는 경우와 같은 여러 경우에
  • 17:03 - 17:05
    호출할 수 있습니다.
  • 17:05 - 17:08
    플레이어가 물에 닿았을 때 게임을 초기화하기 위해
  • 17:08 - 17:10
    트리거 충돌체와 스크립트로 간단하게 구성된
  • 17:10 - 17:12
    KillTrigger 오브젝트가 있습니다.
  • 17:12 - 17:15
    게임 대부분의 경우 Remover 스크립트의 목적은
  • 17:15 - 17:17
    강에 빠지는 적 오브젝트를 제거하고
  • 17:17 - 17:20
    스플래시 애니메이션 및 사운드 효과의
  • 17:20 - 17:21
    인스턴스 생성에 있습니다.
  • 17:21 - 17:24
    그러나 이 트리거에서 플레이어가 감지되면
  • 17:24 - 17:27
    PlayerHealth 스크립트의 Die 함수를 호출합니다.
  • 17:27 - 17:29
    그리고 플레이어를 화면 밖으로 이동시키고
  • 17:29 - 17:31
    2초간 일시 중지한 뒤
  • 17:31 - 17:35
    코루틴을 호출하고 레벨을 다시 불러오는 동안
  • 17:35 - 17:37
    CameraTracking을 비활성화합니다.
  • 17:37 - 17:39
    이제 죽음에 대한 이야기는 그만하고
  • 17:39 - 17:41
    생존과 그에 필요한 도구에 대해
  • 17:41 - 17:42
    알아보죠.
  • 17:42 - 17:44
    이 게임에서는 플레이어에게 도움을 주는
  • 17:44 - 17:47
    2개의 상자가 하늘에서 떨어지는데 하나는 폭탄,
  • 17:47 - 17:50
    다른 하나는 체력을 보충하는 구급 상자가 들어 있습니다.
  • 17:50 - 17:53
    이 상자는 상자와 낙하산 이렇게 두 개의
  • 17:53 - 17:56
    부분으로 구성되어 있습니다.
  • 17:58 - 18:01
    이 두 요소는 빈 상위 오브젝트에 속해 있어
  • 18:01 - 18:04
    그룹으로 애니메이트할 수 있습니다.
  • 18:04 - 18:06
    낙하산의 중심이 상위 오브젝트의 중심에 놓이도록
  • 18:06 - 18:08
    두 개의 스프라이트를 위치시킵니다.
  • 18:09 - 18:12
    이로써 상자 달린 낙하산 전체가 지상으로
  • 18:12 - 18:15
    내려오는 것처럼 애니메이션이 좌우로 흔들리게 됩니다.
  • 18:15 - 18:17
    그리고 나서 rigidbody를 추가하여 중력에 의해
  • 18:17 - 18:19
    오브젝트가 지상으로 내려오게 만듭니다.
  • 18:19 - 18:21
    그리고 충돌체를 상자에 추가하여 상자가
  • 18:21 - 18:23
    지상에 닿고 플레이어가 상자를 수집하는 순간을
  • 18:23 - 18:25
    감지할 수 있도록 만듭니다.
  • 18:25 - 18:27
    상자가 지상에 닿자마자 낙하산이 작아지는
    394
    00:18:26,962 --> 00:18:30,513
    두 번째 애니메이션 상태로 전환합니다.
  • 18:31 - 18:33
    게임의 다른 부분과 마찬가지로 애니메이터는
  • 18:33 - 18:35
    오브젝트의 상태를 처리합니다.
  • 18:35 - 18:37
    기본적으로 floatDown 애니메이션 상태의
  • 18:37 - 18:39
    재생을 볼 수 있으나
  • 18:39 - 18:41
    트리거 Land가 True로 설정되면
  • 18:41 - 18:43
    Landing 상태로 전환됩니다.
  • 18:44 - 18:47
    스크립트에서는 태그를 통해 지상을 감지하는 onTriggerEnter 함수를
  • 18:47 - 18:50
    사용하여 이를 실시할 수 있습니다.
  • 18:50 - 18:53
    또한 상위 오브젝트에서 상자 자체를 분리하고
  • 18:53 - 18:55
    자신만의 rigidbody를 부여합니다.
  • 18:55 - 18:57
    그리하여 경사지에 착륙했을 때 사실적으로
  • 18:57 - 19:01
    배경과 상호 작용할 수 있도록 합니다.
  • 19:01 - 19:04
    일단 폭탄을 살펴볼까요?
  • 19:04 - 19:06
    폭탄 상자 수집은 상자에 연결된
  • 19:06 - 19:08
    BombPickup 스크립트를 통해 처리하게 됩니다.
  • 19:08 - 19:11
    상자를 수집 처리는 상자를 파괴하고
  • 19:11 - 19:13
    LayBombs라고 불리는 플레이어에 연결된
  • 19:13 - 19:15
    스크립트 안에 보유한 폭탄 수가 올라감으로써
  • 19:15 - 19:17
    처리됩니다.
  • 19:18 - 19:20
    LayBombs 스크립트는 단순히 플레이어가
  • 19:20 - 19:22
    폭탄을 가지고 있는지 확인합니다.
  • 19:22 - 19:24
    그리고 폭탄 프리팹 인스턴스를
  • 19:24 - 19:26
    생성합니다.
  • 19:27 - 19:30
    폭탄 프리팹에는 시한 퓨즈가 있는데
  • 19:30 - 19:32
    Explode 함수를 호출하기 전까지
  • 19:32 - 19:34
    BombDetonation 코루틴 내 Yield를 사용하여
  • 19:34 - 19:36
    대기합니다.
  • 19:37 - 19:40
    Explode 함수는 여러 가지 행동을 합니다.
  • 19:40 - 19:42
    먼저 bombLaid 변수를 초기화하여
  • 19:42 - 19:44
    다른 폭탄이 배치되도록 합니다.
  • 19:44 - 19:46
    그리고는 수집 생성 지점에 새로운 상자가
  • 19:46 - 19:48
    생성되도록 하고 정의된 폭발 범위 내
  • 19:48 - 19:50
    적을 처치하도록 합니다.
  • 19:51 - 19:53
    마지막 이 부분이 어떻게 작동하는지 살펴봅시다.
  • 19:53 - 19:55
    폭탄은 적에게 남아 있는 체력과 관계없이 치명적인 무기이므로
  • 19:55 - 19:57
    Physics.OverlapCircleAll을 사용하여
  • 19:57 - 20:00
    폭탄의 특정 범위 내에 있는
  • 20:00 - 20:03
    적으로 태그된 모든 오브젝트를 수집합니다.
  • 20:03 - 20:07
    그리고 나서 발견한 모든 적에게 foreach loop를 실행하여
  • 20:07 - 20:11
    체력을 0으로 설정하고 폭탄의 위치에서 적이 있었던 곳으로의
  • 20:11 - 20:13
    벡터를 찾아 해당 벡터 방향에
  • 20:13 - 20:16
    포스를 적용합니다.
  • 20:16 - 20:19
    일단 foreach loop이 완성되면
  • 20:19 - 20:21
    비주얼 효과를 재생하고 인스턴스화하고
  • 20:21 - 20:23
    폭발음을 위한 오디오 클립을 재생하며
  • 20:23 - 20:26
    폭탄을 폭발시킵니다.
  • 20:27 - 20:29
    폭발은 두 부분으로 되어 있습니다.
  • 20:29 - 20:31
    여기서 주요 부분은 잠시 나타났다가
  • 20:31 - 20:34
    사라지는 원이고
  • 20:34 - 20:36
    두 번째 부분은 로켓 폭발과 같은 스프라이트를
  • 20:36 - 20:38
    다시 사용하는 별의
  • 20:38 - 20:40
    파티클 시스템입니다.
  • 20:42 - 20:44
    효율성을 위해 해당 씬에서
  • 20:44 - 20:46
    파티클 시스템을 항상 유지하고 있으며
  • 20:46 - 20:48
    필요 시 원하는 위치로 시스템을 이동해
  • 20:48 - 20:52
    재생할 때는 코드를 사용합니다.
  • 20:53 - 20:55
    메모리에 파티클 시스템을 유지하고
  • 20:55 - 20:57
    게임을 효율적으로 만들어 줍니다.
  • 20:57 - 20:59
    이 씬에서 플레이어는
  • 20:59 - 21:01
    한 번에 하나의 폭탄만 던질 수 있습니다.
  • 21:01 - 21:05
    즉 폭발은 한 번만 발생한다는 것을 알고 있기 때문에
  • 21:05 - 21:08
    이렇게 작업할 수 있다는 것을 참고하시기 바랍니다.
  • 21:08 - 21:10
    씬에서 인스턴스를 생성했다가 제거하는 것보다
  • 21:10 - 21:12
    유지한 파티클 시스템을 재생하는 것이
  • 21:12 - 21:15
    더 효율적인 이유가 바로 여기 있습니다.
  • 21:16 - 21:18
    그러나 로켓 폭발의 경우,
  • 21:18 - 21:20
    한 번에 여러 번의 폭발이 발생할 수 있으므로
  • 21:20 - 21:22
    생성 후 제거해야 합니다.
  • 21:22 - 21:24
    이제 플레이어가 적을 처치하고 점수를 얻는 장면을
  • 21:24 - 21:26
    확인해 볼까요?
  • 21:27 - 21:28
    이것도 두 가지 부분이 있습니다.
  • 21:28 - 21:32
    100점 획득을 보여주는 점수 획득 애니메이션과
  • 21:32 - 21:34
    점수 증분을 보여주는 화면 상단의
  • 21:34 - 21:36
    점수 UI입니다.
  • 21:36 - 21:38
    점수 애니메이션은 1과 0, 두 개의 숫자 스프라이트로
  • 21:38 - 21:40
    구성되어 있습니다.
  • 21:40 - 21:43
    이것을 빈 상위 오브젝트에 속한 씬에 위치시키고
  • 21:43 - 21:46
    간단한 Destroyer 스크립트를 사용하여 애니메이팅하고,
  • 21:46 - 21:49
    애니메이션이 끝나면 씬에서 제거합니다.
  • 21:49 - 21:51
    타임라인 마지막에 애니메이션 이벤트를
  • 21:51 - 21:53
    위치시켜 스크립트의
  • 21:53 - 21:55
    Destroyer 함수를 호출합니다.
  • 22:06 - 22:10
    ScoreUI 자체는 사용자 정의 폰트와 스크립트로 이루어진
  • 22:10 - 22:12
    간단한 GUI 텍스트 요소로,
  • 22:12 - 22:14
    플레이어의 점수를 관리합니다.
  • 22:14 - 22:17
    Score 변수는 public 변수인데 이는 적이 사망했을 때
  • 22:17 - 22:19
    Enemy 스트립트에서 읽어 100점을 추가할 수 있음을
  • 22:19 - 22:21
    의미합니다.
  • 22:21 - 22:23
    지금부터는 적에 대해서 좀 더 자세히
  • 22:23 - 22:25
    알아보겠습니다.
  • 22:25 - 22:28
    게임에는 민달팽이처럼 생긴 단순한 녹색 괴물과
  • 22:28 - 22:31
    침공 중 자신을 보호하기 위해
  • 22:31 - 22:33
    함선을 타고 오는
  • 22:33 - 22:35
    두 종류의 외계인이 있습니다.
  • 22:35 - 22:37
    이 캐릭터들의 행동은 매우 흡사하기 때문에
  • 22:37 - 22:39
    같은 스크립트를 공유하지만
  • 22:39 - 22:41
    Inspector에서 각각의 이동 속도와 방어력을
  • 22:41 - 22:43
    public 변수들로 설정하여
  • 22:43 - 22:46
    다르게 만들 수 있습니다.
  • 22:47 - 22:49
    적들은 서로 다른 Walk 애니메이션을 가지고 있는데,
  • 22:49 - 22:51
    민달팽이는 움직이는 꼬리를 가지고 있고
  • 22:51 - 22:54
    함선을 타고 있는 외계인은 앞뒤로 움직이며 다가옵니다.
  • 22:56 - 22:58
    민달팽이는 Sprite Importer를 사용하여
  • 22:58 - 23:00
    그래픽의 꼬리 부분을
  • 23:00 - 23:02
    개별 스프라이트 요소로 정의합니다.
  • 23:02 - 23:04
    이를 통해 전체 스프라이트를 조정하지 않고도
  • 23:04 - 23:07
    꼬리를 개별적으로 움직일 수 있습니다.
  • 23:07 - 23:09
    축을 오른쪽으로 설정하면
  • 23:09 - 23:12
    그 점에서부터 꼬리가 늘어났다 줄어드는 애니메이션을
  • 23:12 - 23:14
    만들 수 있습니다.
  • 23:16 - 23:20
    이 캐릭터의 경우 눈꺼풀을 위아래로 움직이는데
  • 23:20 - 23:22
    Z값을 사용하여 여러 스프라이트를 서로 분류하여
  • 23:22 - 23:25
    눈이 눈꺼풀 뒤에 오고 눈앞에서 눈꺼풀 애니메이션이
  • 23:25 - 23:27
    연출되게 할 수 있습니다.
  • 23:29 - 23:31
    두 번째 적의 애니메이션은 앞뒤로 회전만 시키면 되므로
  • 23:31 - 23:34
    상당히 간단합니다.
  • 23:36 - 23:38
    적을 이동시키는 기법은
  • 23:38 - 23:41
    rigidbody의 속도를 설정하여 구동합니다.
  • 23:41 - 23:44
    벽과 같은 장애물에 맞닥뜨리면
  • 23:44 - 23:48
    충돌체와 겹치는 공간의 점을 확인하는
  • 23:48 - 23:51
    Physics.OverlapPoint 함수로 이를 감지합니다.
  • 23:51 - 23:54
    레벨 양쪽의 벽 또는 탑이 장애물로
  • 23:54 - 23:56
    태그되어 있습니다.
  • 23:56 - 23:59
    이 함수가 장애물을 감지하고 Flip 함수를 호출하면
  • 23:59 - 24:02
    적의 X 스케일이 역전되고
  • 24:02 - 24:04
    다른 방향으로 이동하게 됩니다.
  • 24:04 - 24:06
    로켓이 적에 부딪힐 때마다 적을 처치하는 경우,
  • 24:06 - 24:09
    스크립트는 로켓이 닿은 특정 적의
  • 24:09 - 24:11
    Hurt 함수를 호출합니다.
  • 24:15 - 24:17
    이 함수는 해당 적의 체력에서
  • 24:17 - 24:19
    1을 감소시킵니다.
  • 24:19 - 24:21
    그리고는 FixedUpdate 함수 내에서
  • 24:21 - 24:23
    적의 체력을 계속 감소시키다가
  • 24:23 - 24:27
    체력이 0으로 떨어지면 Death 함수를 호출합니다.
  • 24:31 - 24:34
    적이 사망하면 몇 가지 함수를 수행합니다.
  • 24:34 - 24:36
    먼저 2D 캐릭터가 움직이는
  • 24:36 - 24:38
    여러 스프라이트 오브젝트로 구성되어 있으므로
  • 24:38 - 24:40
    모든 Sprite Renderer를 비활성화합니다.
  • 24:41 - 24:43
    이는 사망한 캐릭터의 움직이는 요소들을
  • 24:43 - 24:45
    단일 스프라이트로 대체하기
  • 24:45 - 24:47
    위해서입니다.
  • 24:48 - 24:50
    주요 Sprite Renderer에 이와 같이 하려면
  • 24:50 - 24:52
    deadEnemy 변수에 할당된 스프라이트를 사용하도록
  • 24:52 - 24:54
    설정하면 됩니다.
  • 24:54 - 24:56
    이제 Score 스크립트의 public 변수를 사용하여
  • 24:56 - 24:58
    점수를 추가합니다.
  • 24:58 - 25:01
    적 사망 시 토크를 추가하여 적을 회전시킴으로써
  • 25:01 - 25:04
    적의 죽음에 시각적 효과를 추가합니다.
  • 25:04 - 25:06
    적이 죽을 때는 배경을 통과해 떨어져
  • 25:06 - 25:09
    강에 빠져야 하기 때문에
  • 25:09 - 25:11
    오브젝트의 모든 충돌체를 찾은 다음
  • 25:11 - 25:14
    IsTrigger 매개변수를 True로 설정합니다.
  • 25:14 - 25:15
    이로써 적이 배경 충돌체에 충돌하지 않고
  • 25:15 - 25:17
    떨어지게 됩니다.
  • 25:17 - 25:20
    앞서 설명한 Score 애니메이션의 인스턴스를 생성하기 전에
  • 25:20 - 25:22
    Death 오디오 클립 배열에서 하나를
  • 25:22 - 25:25
    선택하여 재생합니다.
  • 25:28 - 25:30
    사망한 적을 씬에서 제거하려면
  • 25:30 - 25:32
    killTrigger 오브젝트를 이용합니다.
  • 25:32 - 25:35
    killTrigger는 초반에 설명했던 것과 동일한 기능을 수행합니다.
  • 25:35 - 25:37
    플레이어가 아닌 오브젝트가 건드리면
  • 25:37 - 25:40
    스플래시 애니메이션이 작동되고 해당 오브젝트가 제거됩니다.
  • 25:40 - 25:42
    물에 빠질 때 나는 사운드 효과는
  • 25:42 - 25:44
    애니메이팅된 스플래시에 연결되어 Awake 작동 시
  • 25:44 - 25:46
    재생되는 오디오 클립입니다.
  • 25:46 - 25:48
    이로써 움직이는 오브젝트의 인스턴스가 생성되면
  • 25:48 - 25:51
    사운드가 바로 재생되는 것입니다.
  • 25:55 - 25:57
    게임 레벨을 마무리하기 위해서 배경을 몇 가지
  • 25:57 - 25:59
    움직이는 소품으로 꾸밉니다.
  • 25:59 - 26:02
    이를 통해 게임 배경을 좀 더 역동적으로 만들 수 있습니다.
  • 26:02 - 26:06
    날아가는 백조에 강둑을 따라 달리는 버스와 택시를
  • 26:06 - 26:07
    추가해 보죠.
  • 26:07 - 26:11
    먼저 백조부터 시작합니다. 스프라이트 시트에서 생성하고
  • 26:11 - 26:13
    포토샵에서 그린 다음 Inspector의
  • 26:13 - 26:15
    Multiple Sprite Mode 가져오기 설정을 사용하여 가져온
  • 26:15 - 26:16
    백조가 있습니다.
  • 26:16 - 26:19
    이러한 접근을 선택함으로써 유니티는 시트의 각 프레임을
  • 26:19 - 26:21
    선택하고 에셋의 상위 계층 아래에 속한 해당 프레임을
  • 26:21 - 26:23
    개별 스프라이트로 가져오는 작업을
  • 26:23 - 26:25
    자동화합니다.
  • 26:25 - 26:27
    이들은 애니메이션 프레임의 선형 집단으로
  • 26:27 - 26:29
    해당 스프라이트를 모두 드래그하여 씬에 넣기만 하면
  • 26:29 - 26:32
    유니티가 알아서 애니메이션 작업을 진행합니다.
  • 26:32 - 26:35
    드디어, 날아가는 백조가 배경 요소로
  • 26:35 - 26:38
    추가될 준비가 되었습니다.
  • 26:38 - 26:40
    이제는 백조에 rigidbody2D를 적용해서
  • 26:40 - 26:42
    화면을 가로질러 날아갈 수 있는 속도를
  • 26:42 - 26:43
    사용할 수 있도록 합니다.
  • 26:43 - 26:47
    버스와 택시처럼 백조도 프리팹으로 저장됩니다.
  • 26:49 - 26:51
    버스 및 택시 프리팹의 경우
  • 26:51 - 26:53
    차량의 본체와 바퀴를
  • 26:53 - 26:55
    Sprite Importer를 통해 분리하고
  • 26:55 - 26:58
    간단히 흔들리는 애니메이션을 적용합니다.
  • 26:58 - 27:01
    여기에 2d rigidbody도 적용하여
  • 27:01 - 27:03
    속도를 사용해 화면을 지나가도록 만들 수
  • 27:03 - 27:04
    있습니다.
  • 27:07 - 27:10
    3가지 소품인 버스, 택시, 백조가
  • 27:10 - 27:12
    화면에 나타나게 만드는
  • 27:12 - 27:14
    재사용 가능한 하나의 스크립트를 생성했습니다.
  • 27:14 - 27:17
    BackgroundPropsSpawner 스크립트 또한
  • 27:17 - 27:20
    화면에 나타나는 출현 빈도, 지정 속도 및
  • 27:20 - 27:22
    생성 위치를 처리합니다.
    597
    00:27:21,838 --> 00:27:24,521
    이는 우리가 동일한 스크립트로 3개의 Creator 오브젝트를
  • 27:25 - 27:27
    변경할 수 있다는 뜻입니다.
  • 27:27 - 27:29
    어떤 프리팹을 생성할지, 어떤 속성을 줄 것인지
  • 27:29 - 27:31
    변경할 수가 있는 것입니다.
  • 27:31 - 27:34
    자세한 내용은 스크립트의 코멘트를 확인하십시오.
  • 27:34 - 27:36
    마지막으로 배경에 역동성을 가미하기 위해
  • 27:36 - 27:40
    흐르는 구름, 강과 안개를 추가했습니다.
  • 27:41 - 27:45
    이들은 2개의 배경 스프라이트 인스턴스를 상위 오브젝트에 추가하여
  • 27:45 - 27:48
    만들었는데 화면을 가로지르며 서서히 진행하는 애니메이션을
  • 27:48 - 27:50
    사용했습니다.
  • 27:50 - 27:53
    이 애니메이션은 루프 기능으로
  • 27:53 - 27:55
    무한 반복됩니다.
  • 27:59 - 28:01
    지금까지 유니티 게임 제작 방법을 소개해 드렸습니다.
  • 28:01 - 28:03
    이 개요를 통해 유니티를 사용해 2D 게임을 제작하는 데
  • 28:03 - 28:06
    도움이 되었길 바라고,
  • 28:06 - 28:08
    앞으로 간단한 프로젝트 및 튜토리얼을 더 선보일
  • 28:08 - 28:09
    것을 약속드립니다.
  • 28:09 - 28:12
    Unity 4.3에 대한 여러분의 의견을 기다립니다.
  • 28:12 - 28:14
    그리고 곧 여러분이 만든 훌륭한 2D 게임을
  • 28:14 - 28:15
    만나볼 수 있길 기대합니다.
  • 28:15 - 28:16
    감사합니다.
Title:
Unity 4.3 - 2D Game Development Walkthrough
Description:

more » « less
Video Language:
English
Duration:
28:22

Korean subtitles

Revisions