[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 로 선택하자.