[ Hero Character 1 : Hero 기본 움직임 제어 ] - Scene04
[ Rigidbody ]
Hero에 사용되는 이미지 구성하기
Assets/Sprites/_Character/char_hero_beanMan.png 복사
Inspecter View에서
Sprtie Mode : Multiple
Sprite Editor 사용하여 이미지를 Slice (Pixels To Units : 100 : 40 아님)
Slice된 이미지들에 각각의 이름 붙이기
rightFoot / leftFoot / body / tache / leftHand / hat / rightHand / bazooka / rightEye / leftEye
Foreground에서 만들었던 Collider 들 테스트 해 보기
"body" 이미지를 Hierarchy View로 끌어 오기
Sorting Layer에서 "Character" Layer 생성(Background와 Forground 사이)
Sprite Renderer>> Sorting Layer : Character로 설정
rigidbody 2D 및 circle collider 2D Component 추가
Play 테스트
Hero GameObject 생성
캐릭터는 (1) 몸통 팔 다리 머리 등의 구분으로 제작 하는 방법과 (2) 스프라이트 시트 기반의 개별 프레임 애니메이션으로 제작이 가능
(1) 주인공 캐릭터는 몸통 팔 다리 머리 등의 구분으로 제작
(2) 백조(Swan)의 경우 이방법으로 구현
기존의 "body"(GameObject)를 삭제
Empty Object를 만든 이후 Hero라고 이름을 바꿈
Hero에 필요한 모든 이미지들을 GameObject로 만든후 Hero GameObject 밑에 붙임
rightFoot / leftFoot / body / tache / leftHand / hat / rightHand / bazooka / rightEye / leftEye
z값에 변화를 주면 이미지의 랜더링 순서가 결정됨
Sprite Renderer>> Sorting Layer : Character로 설정
이미지들을 조합하여 주인공 캐릭터를 만듬
Hero 움직이게 하기
Menu : Component >> Physics 2D >> Circle Collider 추가
(경사 및 ) 계단 같은 곳을 자유롭게 오를 수 있도록 원형 Collider 추가
Material : None
Is Trigger : No Check
Radius : 0.37
Center : x : 0 : y : -0.45
Menu : Component >> Physics 2D >> Rigidbody 2D 추가
Mass : 1
Linear Drag : 0
Gravity Scale : 1
Constraints : Freeze Rotation Z : Check
Is Kinematic : No Check
Interploate : Interpolate
Sleeping Mode : Start Awake
Collision Detection : Discrete
PlayerControls.cs 만들기
GetAxis() : x, y 축과 관련된 키값을 얻어오는 함수
<Source>PlayerControls01.cs
Hero에 스크립트 삽입
Play 테스트
[ InputManager ]
Input.GetKey()
GetButton / GetButtonDown
Rigidbody를 이용하여 Hero 움직이게 하기
<Source>PlayerControl02.cs
Hero 점프 하기
좌우 움직일 때마다 캐릭터 모습도 좌우로 바뀌게 하고 있음
<Source>PlayerControl03.cs
[ Hero Character 2 : Hero의 상태에 따른 Animation 제어(Macanim 사용하기) ]
상위 오브젝트(Hero)를 선택하여 Animation에서 키프레임마다 하위오브젝트(팔, 다리 등)를 변경해주는방법으로 애니메이션 제작이 가능
Hero에 Animator Controller (Component) 삽입
Menu : Component >> Miscellaneous >> Animator
Project View의 Assets/Animation/Controllers에서 오른쪽 마우스 클릭후 Animator Controller 생성 (Name : Character)
Hero의 Animator에 Character(Controller) 연결
Hero의 Idle 상태 만들기
Menu : Window >> Animation
Hero을 선택한 이후 Create(Animation Window) 클릭
Name : Idle.anim
Hero의 Idle을 위한 애니메이션을 생성
Hero >> Animator 설정
Controller : Character
Avatar : None
Apply Root Motion : None (3D 바이패드로 구동되는 것이 아니므로 Uncheck)
Update Mode : Animate Physics (Normal도 상관 없음) : 물리엔진과 연동된 애니메이션
Play 테스트
[ Animator Window 참고 ]
Animator Menu
주황색 State - Default State로 여러 상태 중에 현재 테스트하고자 하는 상태를 가리킴
Alt 키를 누른 상태에서 마우스로 끌기를 하면 View가 이동됨 (Wheel키를 눌러도 됨)
Hero의 Run 상태 만들기
Hero를 선택한 이후 Animation 창으로 이동
Create New Clip(왼쪽 윗 부분) ... 클릭
Hero의 Run을 위한 애니메이션을 생성
Animator View 에서 Run State 확인
Motion : Run
Run.anim Inspector
Idle 상태에서 일정 속도가 되면 Run 상태로 전이할 수 있도록 하기
Idle 상태와 Run 상태간에 서로 전이될 수 있도록 설정
Animator Menu : idle(State) >> make Transition >> Run(State)
Animator Menu : Run(State) >> make Transition >> idle(State)
Motion Blending Animation은 하지 않도록 설정(전이할 때 모션이 합쳐지는 것)
일정 값을 비교하여 Idle 상태인지 Run 상태인지를 정의할 수 있도록 Parameters 추가
Animator Menu : Parameters >> Float
Speed(float 변수 이름 생성)
Animator Menu : idle(State) >> Inspector >> [ idle > Run ] Click
Has Exit Time : Uncheck
Conditions : Speed > 0.1 면 Transition
Animator Menu : idle(State) >> Inspector >> [ Run > idle ] Click
Has Exit Time : Uncheck
Conditions : Speed < 0.1 면 Transition
이제 Speed의 설정 값에 따라 상태의 변이가 생길 수 있게 된다.
Script (PlayerControls)를 이용하여 키입력에 따라 Speed값에 변화를 주기
anim.SetFloat("Speed", v); v의 값을 (Animator View에서 생성한 파라미터인 )Speed에 값을 전달
<Source>playerControls04.cs
Play 테스트
Hero의 Jump 상태 만들기
Hero를 선택한 이후 Animation 창으로 이동
Create New Clip(왼쪽 윗 부분) ... 클릭
Hero의 Jump을 위한 애니메이션을 생성
Animator View 에서 Jump State 확인
Motion : Jump
Jump.anim
Idle 상태와 Jump 상태간에 서로 전이될 수 있도록 설정
Animator Menu : idle(State) >> make Transition >> Jump(State)
Animator Menu : Jump(State) >> make Transition >> idle(State)
Motion Blending Animation은 하지 않도록 설정(전이할 때 모션이 합쳐지는 것)
일정 값을 비교하여 Idle 상태인지 Jump 상태인지를 정의할 수 있도록 Parameters 추가
Animator Menu : Parameters >> Trigger
Jump(Trigger 변수 이름 생성)
Animator Menu : idle(State) >> Inspector >> [ idle -> Jump ] Click
Has Exit Time : Uncheck
Conditions : Jump가 Trigger 되면 Transition
Animator Menu : idle(State) >> Inspector >> [ Jump -> idle ] Click
Has Exit Time : Uncheck
Conditions : 한번 실행되면 끝나는 애니메이션으로 Exit Time으로 설정
Script (PlayerControls)를 이용하여 키입력에 따라 Jump에 변화 주기
anim.SetTrigger("Jump"); (Animator View에서 생성한 파라미터인 )Jump를 구동시킴
<Source>playerControls05.cs
Play 테스트
Run 상태와 Jump 상태간에 서로 전이될 수 있도록 설정
Animator Menu : Run(State) >> make Transition >> Jump(State)
Animator Menu : Jump(State) >> make Transition >> Run(State)
Motion Blending Animation은 하지 않도록 설정(전이할 때 모션이 합쳐지는 것)
일정 값을 비교하여 Run 상태인지 Jump 상태인지를 정의할 수 있도록 조건 주기
Animator Menu : Run(State) >> Inspector >> [ Run -> Jump ] Click
Conditions : Jump가 Trigger 되면 Transition
Animator Menu : Jump(State) >> Inspector >> [ Jump -> Run ] Click
Conditions 1: 한번 실행되면 끝나는 애니메이션으로 Exit Time으로 설정
Conditions 2: Speed > 0.1 면 Transition
Play 테스트
Hero가 공중에서 점프를 뛰지 못하게 하기(나중에 처리)
Prefab으로 만들기
[ Package ]
[ Scene 관리 및 빌드 ]
Scene 생성
File >> New Scene
Scene 전환
Application.LoadLevel() : Scene을 전환하는 함수
Unity 5.3 버전 이전 방법에서 사용했던 함수
SceneManager.LoadScene() 함수를 사용해야 함
"UnityEngine.SceneManagement ;" namespace를 사용해야 함
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
public class ChangeScene : MonoBehaviour {
public void SceneChange1() {
SceneManager.LoadScene (1);
}
public void SceneChange2() {
SceneManager.LoadScene (0);
}
}
File >> Build Setting ...
빌드하고자 하는 씬들을 포함시켜야 함
실습 : 실습으로 Scene 전환 이해하기