Game Engine/Unity

No.2 Unity 3D Platform Tutorial "First Steps"

VFX-KARA 2010. 8. 9. 18:43



첫 걸음

모든 플랫폼 게임은 각자 플레이어가
조종하는 스타 캐릭터가 있습니다.
우리의 스타는 럽츠(Lerpz)입니다.


럽츠 움직이기

본 챕터에서 우리는 아래와 같은 내용을 알아 볼것입니다:

• 3인칭 플레이어와 카메라 컨트롤 구현하기

• 애니메이션 제어하기와 블렌딩하기

• 파티클 시스템을 이용한 제트 팩 추진 엔진 구현하기

• 플레이어에 얼룩 그림자 추가하기

• 플레이어 상태 관리하기

• 플레이어의 체력, 죽음, 부활 조작하기

시작하기전에 우리는 이 게임이 무엇에 관한것인지 알 필요가 있습니다. 한마디로 우리에게 필요한 것은...


...스피드...! 가 아닌
줄거리(입니다.)

우리의 영웅은 로봇 월드 버전2에 방문한 외계인 럽츠입니다. 이 세계는 수년전에 부분적으로 지독한 분절을 겪고 돌연 태양으로 추락한 로봇 월드 버전1을 대체하였습니다.

안타깝게도, 럽츠는 불행을 겪었습니다: 그의 우주선이 부패한 지역경찰에 의해 압수된 것입니다. 이 지역을 샅샅이 찾은 끝에 럽츠는 그의 우주선을 찾았지만 어떻게 'Big' 씨보다 더 못되고 강박적인 사촌인 'Bigger' 씨로 부터 돌려받을 수 있을까요?

'Bigger'씨는 연료통을 공중 파티오에 예술적으로 정렬해놓는 것을 낙으로 삼습니다. 특히 그는 호버패드 위에 연료통을 올려놓았을 때 연료통에서 생기는 반짝임을 좋아합니다.(그리고 물론 보통의 정원 조명을 설치하는 것보다 경제적이기도 합니다.)

하지만 'Bigger'씨가 간과 하고 있는 것이 하나 있습니다! 그의 구두쇠적인 면모 때문에, 럽츠는 연료통을 모음으로서 그것들을 공중에 띄워놓는 에너지를 이용해 이 곳의 경비 시스템을 과부하에 걸리도록 할 수 있게 된 것입니다. 이는 압수품 보관소의 울타리를 정지시키고 럽츠의 우주선을 자유롭게 할 수 있을 것입니다. 그리하면 럽츠는 그의 우주선에 들어가서 모아둔 연료통들을 사용해 연료를 보충하고 자유롭게 날아갈 수 있는 것입니다. 우리의 영웅이 해야할 일은 연료통을 모으는 일이며 이는 압수품 보관소의 포스필드를 자동으로 정지시킬 것입니다. 그렇게 되면 럽츠는 간단히 그의 우주선에 돌아와 이곳을 떠나버리면 되는 것입니다. 'Bigger'씨는 경비 로봇들을 고용에 럽츠를 막으려는 계획을 세웠지만, 다행히도 로봇들을 딱히 똑똑하진 않습니다.

줄거리 소개는 이 정도로하고, 이제 우리는 우리의 영웅에 살을 붙이는 일을 시작 해봅시다.


럽츠를 소개합니다

• 프로젝트를 열고 Scenes->TheGame을 눌러 무대를 띄우십시오.

• 우리가 해야할 첫 일은 럽츠를 씬에 추가 시키는 일입니다:

• Project Pane(프로젝트 창)의 Objects(객체) 폴더를 여십시오;

Lerpz Prefab(프리팹)을 Scene View(씬 뷰) 또는 Hierarchy View(계층 뷰)에 드래그 하십시오.

• Hierarchy에 새로 추가된 Lerpz를 누르고 Player 로 이름을 바꿉니다.

Player 객체가 선택된 상태에서, 마우스를 Scene View로 옮겨 F(Focus: 집중)키를 눌러 럽츠 모델이 뷰의 중심이 되도록 하십시오 (역자의 팁: 뷰가 객체 중심으로 수정이 되지 않을때는 마우스 휠을 뒤로 살짝 뺀후에 F키를 누르면 선택한 객체가 뷰의 중심이 되도록 할 수 있습니다)

• 럽츠를 감옥근처의 점프 패드가 있는 공중 플랫폼(노란 V자 무늬가 있는 틈새)에 올려놓습니다.
(다음 페이지의 스크린샷 참조)

이제 Play 버튼을 누르면 감옥 밖 마당에 서있는 럽츠를 볼 수 있을 것입니다. 현재 상태로는 럽츠는 움직일 수없고 카메라 또한 플레이어의 캐릭터에 링크되어야 합니다.

• Play 버튼을 다시 한번 눌러 게임을 정지 시킵니다.

우리는 럽츠를 움직일 수 있도록 해야하지만 그 전에 잠시 한 걸음 물러나 카메라에 살펴보아야 합니다.


럽츠를 무대에 위치시키기

-----------------------------------------------

3인칭 카메라

1인칭 슈팅 게임에서는 카메라가 곧 플레이어의 시점이기 때문에 무대의 다른 객체를 따라가도록 만들 걱정을 할 필요가 없습니다. 플레어가 카메라 객체를 직접 제어하면 되기 때문입니다. 그러므로 1인칭 카메라는 매우 구현하기 쉽습니다.

그러나 3인칭 시점 카메라는 카메라가 플레이어를 따라다니도록 해야합니다. 이는 보기엔 꽤 간단해 보이지만 곧 카메라가 플레이어의 캐릭터와 카메라 시점 사이에 배경이 끼지 않도록 해야 함을 알고나면 상당히 복잡해집니다. 이러한 문제는 레이캐스팅(Raycasting)을 이용해 카메라와 플레이어 아바타 사이의 불필요한 객체를 체크함으로서 해결할 수 있지만 아직 고려해야 할 특정한 경우가 있습니다.

예를 들어:
• 만약 럽츠가 벽을 등지고 서있다면? 카메라가 플레이어 위로 움직여 아래를 내려보도록 해야 할까? 아님 옆으로 움직이도록 해야할까?
• 만약 적이 카메라와 플레이어 아바타 사이에 끼어 든다면?
• 플레이어 컨트롤은 어떻게 작동해야 할까? 카메라의 시점에 상대적이도록 해야할까? 만약 그렇게 한다면, 카메라가 장애물을 피하기위해 예상치 않은 방향으로 움직일 경우엔 카메라의 각도가 매우 복잡해질 수 있습니다.

3인칭 카메라를 위한 여러가지 해결방법이 수년동안 시도되었으며, 어느 해결법 하나 100%로 완벽하다고 할 수는 없습니다. 몇 가지 방법중에서는 포커스와 플레이어 사이에 끼어드는 모든 것을 페이드아웃 시키고, 벽 또는 적을 반투명으로 만드는 방법도 있고, 또 다른 방법 중엔 플레이어를 따라다니는 카메라를 포함시켜, 필요하다면 벽이나 건물을 뚫고 지나갈 수 있도록 하여 플레이어의 시점이 고정되도록 하였습니다.

-----------------------------------------------

본 튜토리얼에 제공된 프로젝트에서는 여러 다른 카메라 스크립트를 포함하고 있지만 본 튜토리얼 목적을 위해서 우리는 SpringFollowCamera 스크립트를 이용할 것입니다. 본 스크립트는 Project Pane(프로젝트 창) scripts폴더의 하위 폴더인 Camera안에서 찾아볼 수 있습니다.

• Project Pane(프로젝트 창)에서 SpringFollowCamera 스크립트를 Hierarchy Pane(계층 창)의 NearCamera 객체에 드래그 해 놓습니다.

• Play를 클릭합니다.

Play를 클릭하면 에러메시지가 뜰 것입니다. 이 메시지는 Play, Pause and Step 버튼의 우측면인 유니티 창의 아래쪽에 표시될 것입니다.
(역자 주: 유니티 버전과 세팅에 따라 표시창의 위치가 다를 수 있습니다.)

만약 에러 메시지가 보이지 않는다면 Debug Console(디버그 콘솔)을 띄우십시오.
(Shift+Cmd+C (Mac) / Shift+Ctrl+c (PC))

디버그 콘솔은 사용자의 게임에서 발생하는 모든 경고, 에러 그리고 다른 디버깅 정보를 표시합니다. 사용자는 로그에 여러 번 반복되어 표시된 에러메시지를 보게 될 것입니다. 하나를 하이라이트 하면 디버그 창의 아랫부분에서는 아래의 그림 3.1과 같이 해당 에러메시지의 약간의 추가정보를 보여줄것입니다.


"No target(대상이 없음)" 에러메시지


★팁  

상황에 따라 디버그 로그 창은 Hierarchy의 문제를 일으키는 GameObject(게임객체)와 연결된 코드라인을 보여줄 것입니다. (또는 Prefab(프리팹)과 스크립트에 문제가 있는 경우, Project Pane에서 연결되는 코드라인을 보여줍니다) 위의 스크린샷에서 이 코드라인을 볼 수 있습니다.

UnassignedReferenceException(미지정된 참조 예외) 에러는 사용자가 유니티를 처음 사용할 때 자주 보게 될 종류입니다. 처음 이 에러를 접하면 약간 겁이날 수도 있지만, 이 에러가 뜻하는 바는 그냥 스크립트 변수가 설정되지 않았다는 뜻입니다. 디버그 로그 또한 이를 설명해 주고 있으며, 로그가 제안하는 방법대로 해봅시다:

• Hierarchy Pane의 NearCamera 객체를 클릭하고 Component(구성요소)의 Properties(속성)에 있는 Spring Follow Camera (script)를 봅시다.

Target(대상)의 속성이 None(Transform) (설정되어 있지 않음(변형))으로 설정되어 있습니다. 이 부분이 카메라를 우리가 원하는 대상 객체로 가리키도록 정의할 수 있으므로, 지금 설정 하도록 합시다:

• 만약 아직 게임을 정지 하지 않았다면 지금 하십시오.

• 만약 아직 Hierarchy Pane의 NearCamera 객체를 선택하지 않았다면 지금 클릭하십시오.

• NearCamera 객체를 선택한 상태에서 우리의 Player 게임객체를 Hierarchy Pane으로 부터 Target 속성으로 드래그 하여 대상을 설정합니다.

-----------------------------------------------

플레이 도중 내용 변경하기

게임을 플레이 도중에도 유니티는 게임 내 여러 게임 객체와 구성요소의 속성을 수정할 수 있도록
해줍니다. 그러나 이 수정내용을 저장하지 않을 것입니다! 게임을 멈추게 되는 순간, 그 사이의 변경
내용은 사라질 것 입니다.
만약 변경된 내용이 반영되는 것을 원하신다면, 꼭 게임을 먼저 멈추시기 바랍니다!

-----------------------------------------------

이제 Play 버튼을 클릭하면, 카메라는 아직도 작동하지 않을 것입니다. 대신 SpringFollowCamera 스크립트와 관련된 에러들을 보게 될 것입니다. 이 스크립트는 대상으로서 ThirdPersonController 스크립트가 첨부되어야 합니다. 이는 3인칭 카메라가 플레이어 컨트롤에 긴밀한 영향을 끼치기 때문인데, 플레이어가 무엇을 하고 있는지 알고 그에 맞게 대처할 수 있도록 알 필요가 있기 때문입니다.

마지막 설정은 아래의 이미지에 표시된 것처럼 보여야 합니다.


Spring Follow Camera 스크립트의 설정.

만약 카메라의 동작이 맘에 들지 않는다면, 설정의 숫자를 수정할 수도 있습니다.
위의 설정은 매우 주관적인 결정이며 설정에 정답은 없습니다.

이것이 우리가 대처해야할 여러 종속성중의 하나입니다.

• 플레이어와 카메라의 연관성을 완료하기위해 Project Pane의 scripts->Player 폴더 안에 있는 ThirdPersonController 스크립트를 (Hierarchy Pane에 있는) Player GameObject에 드래그 해 넣습니다. (이는 Prefab 커넥 션을 깨뜨릴 것입니다. - 역자 주: 위의 행동을 하게 되면 Prefab Connection과 관련하여 경고 메시지가 뜨는데 Yes를 눌러줍시다.)

Third Person Controller 스크립트 또한 자신만의 요구사항과 종속성을 가지고 있습니다. 이들 중에서 가장 중요한 것은 Character Controller component(구성요소) 입니다. 다행히도, 스크립트는 유니티에게 이에 대해 알려주므로, 유니티는 이 구성요소를 자동으로 추가시켜 줄 것입니다.

-----------------------------------------------

연관성과 종속성(Connection & Dependencies)

유니티는 시각적 에셋을 표시하는 데에 뛰어나지만, 이들 또한 서로 연관 되어 있어야 우리가 게임에서 기대하는 상호작용성(Interactivity)을 제공할 수 있습니다. 그러나, 이러한 연관성은 시각적으로 표기하기 힘듭니다.
이러한 연관성들은 종속성(Depedency)이라 불리며, 한 객체가 다른 객체를 가동하게 하기 위해 필요한 것이 바로 종속성입니다. 그 다른 객체는 차례로, 다른 객체의 기능을 요할 수도 있습니다. 결과적으로 사용자의 에셋들은 문자열과 스크립트를 연결하는 수많은 가상의 가지로 각자 서로 연결되어 게임을 만드는 것입니다.

이 모든 종속성들을 정의하는 것이 게임 디자인의 핵심 요소입니다.

-----------------------------------------------

이제 우리는 Player GameObject에 태그(tag)를 붙여야 합니다. 이는 스크립트가 유니티에게 제시한 태그(tag)를 가진 오브젝트를 찾게 함으로서 무대 위의 Player를 손쉽게 찾을 수 있도록 하기 때문입니다.

• Player 객체가 Inspect창에 표시된 상태에서, 아래와 같이 Tag 드롭다운 메뉴를 열고 Player 태그를 선택하십시오.


Player 태그 선택하기

☆참고

위의 메뉴에 보인 태그들은 유니티가 기본으로 제공하는 것입니다. 자신만의 태그를 만드는 방법은 나중에 배워보기로 하겠습니다.

태그는 나중에 사용될 것이기 때문에, Character Controller와 우리의 스크립트로 다시 돌아갑시다.

• Player 객체를 선택하여 Inspector 창을 살펴봅시다. 아래와 비슷하게 표시 될 것입니다:


Character Controller 와 Third Person Controller script의 구성요소가 배치되어있다.

우리의 다음 단계는 Character Controller를 수정하는 일입니다. 아직까지는 Character Controller가 사용하는 Capsule Collider가 Y-axis(Y축)로 너무 내려가 있어서 럽츠가 공중에 살짝 떠있는 상태입니다. (Scene View에서 Collider의 위치를 볼 수 있습니다: 길고 파란 실린더 와이어 프레임이 Collider를 표시하고 있습니다.) 우리는 이Center Y의 값을 변경해야 합니다.


Character Controller의 Capsule Collider를 수정하기 -- 파란 와이어프레임으로 표시되어 있습니다.

• Capsule Collider를 위의 스크린샷과 같이 위치시키십시오. (약간의 실험결과 CharacterController의 Center Y값을 1.03으로 설정하는 것이 Collider의 밑동이 Lerpz의 발과 정확히 정렬 시킨다는 사실을 알아냈습니다)

이제 Play 버튼을 누르면, 컨트롤키를 이용하여 자신의 발이 땅에 맞닿아있는 럽츠를 움직일 수 있을 것 입니다.


캐릭터 컨트롤러와 3인칭 컨트롤러 스크립트

대부분의 게임에선, 플레이어의 아바타는 갑자기 방향을 전환한다거나 멈추기, 불가능한 거리를 뛰어넘는것과 같이 불가능한 물리적 특성들을 실행할 수 있는 능력이 있으며 전형적인 물리로는 구현하기 어려울 수 있는 여러 다른 행동들을 할 수 가 있습니다. 그러므로 Character Controller는 플레이어 아바타를 물리 엔진으로 부터 분리시키며, 기본 이동 컨트롤을 제공합니다.

Character Controller는 플레이어(그리고 많은 논-플레이어(Non-player)) 캐릭터 타입의 움직임을 간소화합니다. Character Collider는 우리의 캐릭터를 움직이게 하고, 계단(Steps)을 오르거나 경사면(Slopes)을 오르거나 내리게 하는 기본 행동 시스템과 연결되어 있는 CapsuleCollider로 구성되어있습니다. Inspector 창에서 오를 수 있는 최대 계단과 경사면 사이즈를 변경할 수 있습니다.

Character Controller는 보통 스크립트와 함께 사용됩니다. 스크립트는 Character Controller와 연동하여 자신의 능력을 확장시킴으로 게임이 요구하는 사항에 도달할 수 있도록 해줍니다. 우리의 프로젝트에선 Third Person Controller 스크립트가 이러한 기능을 수행하며 플랫폼 게임에 필요한 지원을 추가해줍니다. 이 스크립트는 조이스틱, 키보드, 마우스 또는 다른 입력 장치를 읽으며 플레이어의 아바타를 조종하는데 쓰입니다.

유니티의 Input Manager(입력 관리자: Edit->Project Settings->Input Manager) 입력장치가 플레이어를 어떻게 조작할 수 있는지 정의할 수 있도록 도와줍니다.

☆참고

플레이어에 사용된 스크립트들은 별로 특별한 것들이 아닙니다. 이들은 본 프로젝트를 위해 작성된 아주 평범한 유니티 스크립트입니다. 유니티에 기본 Character Controller 스크립트는 존재하지 않습니다.
Third Person Controller 스크립트는 이미 Prefab의 한 부분이므로, 따로 추가 할 필요는 없습니다.

다음 단계는 럽츠의 애니메이션이 제대로 작동하게 하고 점프나 펀치 같은 추가적 움직임을 가미하는 것입니다...


럽츠 애니메이션화 하기

현재 시점에선, 럽츠는 그저 배경 위를 미끄러지고 있습니다. 이는 Character Controller가 애니메이션을 다루고 있지 않기 때문입니다. Character Controller는 플레이어의 모델에 대해, 또는 어떤 애니메이션 순서가 어떤 행동에 각각 적용되는지도 모릅니다. 우리는 럽츠를 애니메이션 순서와 연결시켜야 하며 이는 ThirdPersonPlayerAnimation 스크립트를 이용해서 연결시킬 수 있습니다.

• 메뉴창의 Component 메뉴를 이용해서 ThirdPersonPlayerAnimation 스크립트를 Player 게임객체에 추가 시키십시오. (역자 주: 메뉴 바의 Player 게임 객체를 선택한 상태에서 Component->scripts->ThirdPersonPlayerAnimation)

이제 Play 버튼을 누르면, 제대로 작동하는 럽츠를 볼 수 있습니다.

그렇다면 지금 이 무대에는 무슨 일이 일어나고 있는 것일까요? 스크립트는 어떠한 작용은 하는 걸까요?
이 질문들의 답은 유니티가 캐릭터 애니메이션 데이터를 다루는 방법에서 찾아볼 수 있습니다.


캐릭터 애니메이션

캐릭터 애니메이션 시퀀스(순서)는 3D Studio Max, Maya, Blender 또는 Cheetah3D처럼 모델링 패키지 안에서 생성됩니다. 이 시퀀스를 유니티에 가져올 때, 시퀀스들은 자동으로 애니메이션 구성요소에 추출되어 저장됩니다.

이 애니메이션 시퀀스들은 가상의 뼈대에 정의되는데, 이 뼈대는 기본 모델을 애니메이션화 하는데 사용됩니다. 이 뼈대들은 모델의 메쉬가(모델 자체의 가시적 표면을 정의하는 중요 데이터가) 엔진에 의해 요구된 애니메이션을 만들어내기 위하여 어떻게 수정되고 변화하는지를 정의해줍니다.

-----------------------------------------------


뼈대와 아마추어(Armatures)

스톱 모션 또는 클레이메이션 기술과 친근하다면, 금속 아마추어의 사용을 잘 알고 있을 것입니다.
애니메이션화 된 모델들은 이 아마추어들을 기반으로 만들어집니다. 3D 모델에 사용된 가상 뼈대들은 이 아마추어들 과 직접적으로 동등하며 실제 뼈대만큼 복잡한 구조를 가지고 있지 않습니다.

-----------------------------------------------


이러한 모델들의 메쉬 구성요소를 보통 스킨드 메쉬(Skinned mesh)라고 부릅니다. 가상의 뼈대는 메쉬 밑의 골격을 제공하며 이를 어떻게 애니메이션화 할지를 정의합니다.


애니메이션 블렌딩

캐릭터 애니메이션은 자주 서로 '혼합(Blend)'되어 게임에 필요한 유연성을 제공합니다. 예를 들어, 애니메이션화 된 걷기 순환모션은 여러 개의 대사 애니메이션과 혼합되어 캐릭터가 걸음과 동시에 대사를 하게 할 수도 있습니다.

블렌딩은 또한 걷기 순환 모션과 펀치 시퀀스 사이의 연결 같이 애니메이션 사이에 부드러운 연결을 만들어 내는데 사용될 수 있습니다.

우리는 스크립트를 사용하여 유니티에게 언제 애니메이션이 교체되어야하는지, 언제 애니메이션 블렌딩이 필요한지, 그리고 이러한 행동들이 어떻게 실행되어야 되는지를 알려줘야 합니다. 이곳이 바로 스크립트가 활 약하는 부분입니다.


3인칭 애니메이션 스크립트

우리가 사용하고 있는 럽츠 모델은 여러 가지의 프로젝트를 위해 제작되었으며 15가지의 애니메이션 시퀀스를 포함하고 있습니다. 본 튜토리얼에서는 그 중 11개만이 사용되었습니다. Hierarchy Pane의 Player Object를 선택하고 Inspect 창을 보면 Animation 구성요소 안에 나열되어있는 15가지 애니메이션 시퀀스를 볼 수 있을 것이며 오직 아래의 시퀀스들만이 본 튜토리얼에 실제로 사용되었습니다:

• 걷기 -- 보통의 걷기 순환 모션.

• 달리기 -- 달리는 애니메이션 (달리려면 Shift키를 누르고 있으면 됩니다.)

• 펀치 -- 적 경비 로봇을 공격할 때 재생됩니다.

• 점프 -- 럽츠가 공중으로 뛰어오를 때 재생됩니다.

• 점프 낙하 -- 럽츠의 점프가 정점을 찍고 낙하하기 시작할 때 재생됩니다.

• 대기 -- 럽츠가 대기 중일 때 반복적으로 재생됩니다.

• 벽 점프 -- 럽츠가 벽을 타고 점프할 때 재생되는 뒤로 공중제비 돌기 애니메이션입니다.

• 제트 팩 점프 -- 럽츠의 제트 팩이 럽츠의 낙하속도를 감소시킬 때 재생됩니다.

• 절벽 낙하 -- 럽츠가 플랫폼의 모서리에서 걸어 나갈 때 재생됩니다.

• 엉덩방아 --럽츠가 경비 로봇에게 공격을 받았을 때 재생됩니다.

• 점프 착지 -- 럽츠가 점프 또는 낙하 후에 착지했을 때 재생됩니다.

럽츠의 모델과 애니메이션은 Maya로 제작된 후 유니티에 불러오는 과정을 거쳤습니다. 메쉬와 애니메이션을 가져오는 것에 대한 더 자세한 정보는 유니티 매뉴얼을 참고 하십시오.

이 애니메이션들의 대부분은 플레이어가 사용하는 컨트롤과 그에 맞는 반응을 체크하는 ThirdPersonPlayerAnimation 스크립트에 의해 처리됩니다. 몇몇의 애니메이션들은 다른 애니메이션 위에 겹쳐서 올려져있는 반면 또 다른 애니메이션들은 순서대로 줄지어 있기도 합니다. 스크립트는 일반적으로 한 세트의 반응 메시지 함수입니다. 관련된 메시지가 ThirdPersonController 스크립트에 의해 보내지며, 이를 통해 입력 장치를 읽고 캐릭터의 상태를 이에 맞게 업데이트합니다.

럽츠의 공격 모션인 펀치는 ThirdPersonCharacterAttack이라고 불리는 다른 스크립트에서 처리합니다. (우리는 이 스크립트를 차후에 추가할 것입니다.) 이는 어떤 관점에서는 약간 임의적으로 보일수도 있는 분할이지 만, 사실을 그렇지 않습니다: 대부분의 기본 움직임인 걷기, 달리기, 점프하기 등은 플레이어의 캐릭터가 어떻게 생겼는지 와는 상관없이 꽤 비슷한 형태를 띌 수밖에 없습니다.

그러나 공격 또는 방어하는 모션들은 훨씬 더 많은 다양성을 띄기 마련입니다. 몇몇의 플랫폼 게임들에선 플레이어의 캐릭터는 총을 소지할 수도 있고, 무술 동작을 사용할 수도 있는 것 입니다.

본 튜토리얼에서 럽츠는 저명한 서양 무술인 '주먹 싸움'의 대가로써 이 무술의 명칭은 "상대방을 주먹으로 매우 세게 때리다"라는 뜻에서 유래됩니다. 한마디로, 럽츠가 사용하게 될 애니메이션은 간단한 펀치 애니메이션입니다.


기즈모(Gizmos)

ThirdPersonCharacter Attack은 매우 유용한 테스트 기능도 포함합니다: 이는 바로 럽츠의 펀치액션에 영향을 받는 범위를 원으로 그려주는 기즈모입니다. 기즈모는 두개의 기즈모 그리기 메시지 처리 함수 중에 하나 에 불러와지게 됩니다. 이 예제에서 기즈모(펀치 지점의 그려진 노란색 와이어 프레임 구체와 펀치의 영향 범위)는 OnDrawGizmosSelected() 함수에 반응함에 따라 불러와집니다.

함수는 고정함수(static)여야 하며 유니티 편집기(Unity Editor)자체적으로 불러와질 것입니다.
다른 대체 함수로는 OnDrawGizmos() 함수가 있는데 이 함수는 유니티 편집기에 의해 상위 GameObject가 선택되어 있는 것과는 상관없이 매 업데이트 사이클마다 불러와집니다.

본 튜토리얼 번역서는 (주)지피엠스튜디오가 운영하는 "유니티코리아" 회원님들을 위한 메뉴얼 번역 자료 입니다.
본 자료를 다른 곳에 개제 하실 때에는 아래의 번역과 출처를 명확히 밝혀 주시기 바랍니다.
본 자료는 제3자가 상업적인 용도로 사용 할 수 없음을 밝힙니다.

번역 :
유니티코리아 [U3K]게임인생
출처 : 유니티코리아(www.unity3dkorea.com)