[Unity] Unity 기초강의 내용 정리 (4-1강 ~ 4-5강)

[Unity] Unity 기초강의 내용 정리 (4-1강 ~ 4-5강)

educast 나동빈 님의 <Mobile Defence Game 제작으로 배우는 Unity 기초> 강의를 듣고 내용 정리.

———-

Part 4. Animation & Audio

4-1. Animation System

애니메이션 시스템에 대한 전반적인 구조를 이해해보자.

Object

=> Animator Component 추가

=> Animator Controller 추가

=> Animator Controller 는 n 개의 Animation Clip (State) 으로 구성됨

=> Animation Clip 은 n개의 Sprite 로 구성됨

(여러 개의 스프트라이트 이미지를 준비해야 함)

상단메뉴 [Window] – [Animation] – [Animation] 클릭해서 탭 추가

상단메뉴 [Window] – [Animation] – [Animator] 클릭해서 탭 추가

1. 몬스터1 오브젝트에 Animator 컴포넌트를 추가한다.

2. 우측 인스펙터 뷰를 보면 Controller 항목이 비어있다.

3. Monster_1.controller 를 Controller 항목에 드래그앤드랍한다.

4. 게임 재생을 해본다.

———-

4-2. Animation Clip – Sprite Change

1. 몬스터1 을 드래그앤드랍으로 씬에 넣자.

2. Scale X 0.4, Y 0.4

Position X 0, Y 0

3. 상단메뉴 [Window] – [Animation] – [Animation] 클릭해서 탭 추가

상단메뉴 [Window] – [Animation] – [Animator] 클릭해서 탭 추가

4. 애니메이션을 넣고자 하는 오브젝트 클릭

5. Animation 탭의 [create] 버튼 클릭

anim 파일 저장 : Monster_1_Walking 이라는 이름으로 저장

프로젝트 폴더 내의 Assets\Animations 폴더 안에 저장을 권장

ex) C:\unity_workspaces\Practice4-1\Assets\Animations

애니메이터 컴포넌트가 추가된 것을 볼 수 있음.

6. Animation 탭에서 녹화 버튼 클릭

7. Animation 탭에서 0.1 초 부분을 클릭하여 하안색 선이 생기면,

몬스터 첫번째 그림을 드래그앤드랍하기.

8. 0.1초에 몬스터 첫번째 그림 넣기

0.2초에 몬스터 두번째 그림 넣기

0.3초에 몬스터 세번째 그림 넣기

0.4초에 몬스터 네번째 그림 넣기

이 때 애니메이션이 어색하지 않으려면,

애니메이션의 끝과 처음을 동일하게 해줘야 한다.

0.4 초 부분 그림을 복사해서(Ctrl + c) 0초 부분에 붙여넣는다(Ctrl + v).

9. 속도를 조절하려면 Samples 값을 60 에서 30 으로 조절

10. 이동 애니메이션을 하고 싶다면

0.4초를 클릭하고 몬스터를 이동시킨다.

그러면 이동 자체가 애니메이션 화 된다.

그런데 이동을 애니메이션에 포함하는 방법은 권장되는 방법은 아니다. 참고삼아 알고만 있자.

———-

4-3. Skeletal Animation (New Feature in 2018.2)

골격(뼈) 기반의 애니메이션

애니메이션의 한 장면 장면을 그려야 하는 어려움을 줄여줌.

[Window] – [Package Manager] – [All] 탭 클릭

– [2D Animation] 패키지 클릭하고 우측의 [Install] 클릭

설치가 다 되면 프로젝트 뷰 Sprites 폴더에 Flying Dragon 이미지를 드래그앤드랍해서 추가한다.

1. 프로젝트 뷰에서 이미지를 클릭한다.

2. 인스펙터 뷰에서 Sprite Editor 라는 버튼 클릭.

3. Sprite Editor 창이 뜨면 좌측 상단의 [Sprite Editor] 클릭하고

[Bone Editor]로 바꾼다.

아래쪽에 Tools 창이 작게 뜬다.

뼈가 1개 있는 아이콘 : Create Bone

뼈가 2개 있는 아이콘 : Create Free Bone

4. Create Bone 을 눌러서 가장 중심이 되는 뼈를 만든다. 처음 만드는 뼈가 Root 뼈(Root Bone)다.

5. 다시 Create Bone 을 눌러서 다음뼈를 만들자.

입까지 뼈를 이어서 생성하자.

6. Create Free Bone 로 루트 뼈 좌우측에 뼈를 하나씩 더 만든다. (좌측 한 개, 우측 한 개)

다시 Create Bone 을 눌러서 날개를 잇는 뼈를 계속 추가한다.

7. 다시 Create Free Bone 로 루트 뼈 아래에 뼈를 하나 더 만든다.

다시 Create Bone 을 눌러서 꼬리를 잇는 뼈를 계속 추가한다.

8. 우측상단의 Apply 버튼 눌러서 적용

9. Sprite Editor 창 좌측 상단의 [Bone Editor] 클릭하고

[Skin Weights and Geometry Editor]로 바꾼다.

10. 우측의 [Generate] 버튼 클릭

Outline Detail 0.3

Alpha Tolerance 33

Subdivide 50

Outline Detail : 아웃라인을 얼마나 꼼꼼하게 그릴지

Alpha Tolerance : 수치가 높을수록 가장자리 푸른 선이 이미지에 가깝게 생성

Subdivide : 좀 더 세부적으로 안에 점을 생성

11. 우측의 [Weights] 버튼 클릭해서 확인

[Auto] 버튼 클릭

색이 입혀져야 한다.

[Apply] 버튼 클릭

1. 씬 뷰에 플라잉 드래곤을 드래그앤드랍해서 넣는다.

2. [Add Component] 로 [Sprite Skin]을 추가한다.

[Sprite Skin]을 추가해야 뼈대가 보인다.

3. [Create Bones] 버튼 클릭

4. 상단메뉴 [Window] – [Animation] – [Animation] 클릭해서 탭 추가

상단메뉴 [Window] – [Animation] – [Animator] 클릭해서 탭 추가

5. Animation 탭의 [create] 버튼 클릭

anim 파일 저장 : Skeletal Animation 이라는 이름으로 저장

프로젝트 폴더 내의 Assets\Animations 폴더 안에 저장을 권장

ex) C:\unity_workspaces\Practice4-1\Assets\Animations

6. 녹화 버튼을 누르고

0.1 초에 용 머리를 내리고

0.2 초에 용 머리를 높이고

0.3 초에 다시 용머리를 내린다.

Samples 를 20 으로 낮춘다.

날개를 펄럭이는 용을 만들어보자.

———

4-4. Animator Controller

1. 프로젝트 뷰에서 이미지를 클릭한다. (피망 모양 몬스터)

2. 인스펙터 뷰에서 Sprite Editor 라는 버튼 클릭.

3. Sprite Editor 창이 뜨면 좌측 상단의 [Sprite Editor] 클릭하고

[Bone Editor]로 바꾼다.

4. 좌측에 Root Bone 을 만든다. (피망 머리 뒤쪽에 2개)

Free Bone 을 만든다.

5. 우상단에 Apply 버튼 누른다.

6. Sprite Editor 창 좌측 상단의 [Bone Editor] 클릭하고

[Skin Weights and Geometry Editor]로 바꾼다.

7. 우측의 [Generate] 버튼 클릭

Outline Detail 0.3

Alpha Tolerance 33

Subdivide 50

8. 우측의 [Weights] 버튼 클릭해서 확인

[Auto] 버튼 클릭

색이 입혀져야 한다.

[Apply] 버튼 클릭

1. 씬 뷰에 피망 캐릭터를 드래그앤드랍해서 넣는다.

Scale 값을 0.5, 0.5 로 줄인다.

2. [Add Component] 로 [Sprite Skin]을 추가한다.

[Sprite Skin]을 추가해야 뼈대가 보인다.

3. [Create Bones] 버튼 클릭

4. Animation 탭의 [create] 버튼 클릭

anim 파일 저장 : Character Idle 이라는 이름으로 저장

프로젝트 폴더 내의 Assets\Animations 폴더 안에 저장을 권장

ex) C:\unity_workspaces\Practice4-4\Assets\Animations

애니메이터 컴포넌트가 추가된 것을 볼 수 있음.

cf) Idle 은 빈둥거리다 라는 뜻.

캐릭터가 건들건들 대기하는 애니메이션을 만들기 위함.

5. 1.0 초부분에 뒤통수 위쪽과 입 아래쪽을 구부려준다.

Samples 값을 20 으로 줄여서 느리게 만든다.

1. Animator 탭

Character Idle 을 선택해보자.

인스펙터 뷰를 보자.

Speed 1

이 값을 높이면 속도가 빨라진다.

다른 항목들은 크게 중요하지 않음.

2. Animator 탭

Character Idle 스테이트를 더블클릭하게 되면 그 스테이트에 적용된 애니메이션 클립 파일을 선택하게 됨.

(또는 프로젝트 뷰에서 Character Idle 을 더블클릭하자)

여기서 다른건 중요하지 않고 Loop Time을 보자. Loop Time 체크 해제 시 한 번만 재생하고 종료.

3. 씬 뷰의 피망 모양 캐릭터 선택하고 Animation 탭

[Preview] 버튼 밑의 [Character Idle] 클릭하면 [Create New Clip…] 이라는 버튼 보일 것임.

Character Die.anim 라는 이름으로 저장

4. 죽는 애니메이션

쓰러지면서 반투명 처리, 회색빛으로 바꾸면 됨.

녹화 버튼을 누른채로 작업하자.

1.0초 에서 넘어지도록 + 회색빛 + 반투명 처리

2.0초 에서 완전투명처리

5. Character Idle 우클릭해서 Make Transition 누른 후

Character Die 에 연결하기

Transition Duration : 매끄럽게 연결

Transitin Offset

2D 게임에서는 일반적으로

Transition Duration 값 0, Transitin Offset 값 0으로 지정하면 된다.

Exit Time 1은 애니메이션 모두 실행 후 넘어가는 것.

Exit Time 0.5이면 애니메이션 절반만 실행 후 다음으로 넘어간다.

6. 프로젝트 뷰에서 Character Die를 더블클릭하자.

Loop Time 체크해제하자. Loop Time 체크 해제 시 한 번만 재생하고 종료.

7. 이제 게임 재생했을 때 피망 캐릭터가 한 번 idle 애니메이션을 실행하고

바로 죽는 애니메이션을 실행하게 됨.

8. [Animator] 탭의 좌측 [Parameters] 탭

우측의 [+] 버튼 클릭하고 trigger 선택.

[die_trigger]라는 이름으로 생성

9. [Animator] 탭에서 [Base Layer] 화면속 트랜지션(화살표)를 선택

우측 인스펙터 뷰의 [Conditions] 에서 [+] 버튼을 클릭

[die_trigger] 를 추가하기

10. 이제 게임 재생했을 때 피망 캐릭터가 계속 idle 애니메이션을 실행함.

[Animator] 탭의 좌측 [Parameters] 탭에서

[die_trigger] 라디오 버튼을 체크하게 되면 죽는 애니메이션을 실행하게 됨.

———-

4-5. Prameter와 Script

1. 캐릭터 클릭

2. [Animator] 탭의 좌측 [Parameters] 탭

우측의 [+] 버튼 클릭하고 float 선택.

[hp_float]라는 이름으로 생성

3. [Animator] 탭에서 [Base Layer] 화면속 트랜지션(화살표)를 선택

우측 인스펙터 뷰의 [Conditions] 에서 [+] 버튼을 클릭

[hp_float] 를 추가하기

콤보박스 [Less] 선택

값은 1

(1 미만일 경우 Die 애니메이션 실행하기 위함)

4. 프로젝트 뷰에 Scripts 폴더 만들고

그 안에 Character_2_Animation 라는 이름의 C# 스크립트 생성

자료형 : 어떤 종류의 값을 담을지 결정하는 통의 모양

변수 : 내가 사용하기 위해 만든 실제 통

값 : 그 실제 통에 담은 내용물

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

public class Character_2_Animation : MonoBehaviour {

    Animator character_2_animator = null;

    float character_2_hp = 0.0f;

   

 void Start () {

        character_2_animator = gameObject.GetComponent<Animator>(); 

 }

 

 void Update () {

  if (Input.GetKeyDown(KeyCode.Space)) {

            character_2_hp = character_2_animator.GetFloat(“hp_float”);

            character_2_animator.SetFloat(“hp_float”, character_2_hp – 10);

        }

        if (Input.GetKeyDown(KeyCode.A)) {

            character_2_animator.SetBool(“again_bool”, true);

        }

        if (Input.GetKeyDown(KeyCode.S)) {

            character_2_animator.SetBool(“again_bool”, false);

        }

    }

}

———-

4-6. Audio

Source 와 Listener 의 상호작용

메인 카메라는 이미 오디오 리스너 컴포넌트가 적용되어 있다.

1. 캐릭터 선택하고, Add Component 로 [Audio Source] 추가

2. AudioClip 을 선택해준다. (monster_1.mp3)

재생하면 곧바로 몬스터 소리가 날 것이다.

이유는 Play On Awake 가 체크되어 있기 때문이다.

그 아래 Loop 까지 체크해주면 반복적으로 동일한 소리가 반복 재생된다.

배경음은 보통 빈 오브젝트를 만들고 배경음악을 넣는다.

1. Empty Object를 만든다.

2. 이름을 BGM Manager 로 변경

3. Add Component 로 [Audio Source] 추가

4. AudioClip 을 선택해준다. (background.mp3)

5. Play On Awake 와 Loop 를 체크한다.

* 버튼으로 음악 실행하기

버튼을 만들고, On Click() 부분에

좌측 항목은 Character_2 를 선택하고,

우측 항목은 AudioSource -> Play() 선택

* 사운드 압축

Audios 폴더 안에서 background 선택

우측의 인스펙터 뷰에서 Force To Mono 체크 : 오디오 사운드를 좌우 구분 없는 모노 사운드로 변경. 용량 감소됨.

Normalize까지 체크하자.

배경음악의 Load Type은 반드시 Decompress On Load 를 사용하지 말자. 메모리 많이 차지하고 렉을 유발함.

Compressed In Memory 로 선택하자.