210808
Unity2D_Basic #10
-player die 추가
1. 지난번 idle과 동일하게 Sprite mode -> multiple -> Sprite editor -> slice -> automatic
이미지가 분할 된 것을 확인할 수 있음
2. Animation파일 생성 -> Loop Time은 false (사망시 1회만 실행이기때문) -> player의 animator view 에 애니메이션 등록
3. Animation view에서 편집 할 애니메이션인 playerdie 를 선택
4. Samples수치를 6으로 설정 후 이미지를 Animation view의 편집창에 드래그 드랍
5. 애니메이션 전환을 위해 Transition을 생성
PlayerIdle 애니메이션 우클릭 -> Make transition -> 전활 할 애니메이션으로 화살표 연결
현재 아무 조건이 없고 Idle과 Die가 서로 연결되어있어서 서로 한번씩 애니메이션 진행 후 전환 된다.
여기서 Transition 이란?
애니메이션이 전환될 수 있는 길을 열어주는 것이라고 할 수 있음.
조건을 설정할 수 있으며 조건이 없으면 애니메이션 1회 재생 후 상태전이 화살표 방향으로 이어져 있는 애니메이션으로 전환
6. Transition -> conditions 설정 -> 원하는 시점에전환 가능 -> Tirgger 타입 -> isDie 생성 -> condition등록
conditions에 등록되는 변수는 animator의 parametor에서 등록하고 생성할 수 있다.
parameters : float/int/bool/trigger
(trigger의 경우 공격, 피격, 사망과 같이 단발적으로 호출되는 애니메이션에 주로 사용된다)
애니메이션 재생 중에 isDie Trigger에 체크를 해주면 1회 사망 애니메이션이 나오고 전환된다.
-Has Exit Tiem
현재 상태전이(Transition)의 조건을 만족했을 때 바로 동작을 변경할지 해당 동작을 끝까지 재생하고 변경할지 설정
-ture : 해당 동작을 마저 재생하고 동작 변경
-false : Conditions를 만족하는 순간 동작 변경
애니메이션 전환을 위한 코드
-PlayerController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
private Animator animator; // Animator 타입의 변수
private void Awake()
{
animator = GetComponent<Animator>(); // 컴포넌트 가져오기
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space)) // 스페이스바 입력 시
{
animator.SetTrigger("isDie"); // isDie 트리거 활성화
}
}
}
파라미터(Paraeters)값 설정 함수
animator.SetBool(string name, bool value)
animator.SetFloat(string name, float value)
animator.SetInteger(string name, int value)
animator.SetTrigger(string name)
파라미터(Paraeters)값 참조 함수
bool value = animator.GetBool(string name)
float value = animator.GetFloat(string name)
int value = animator.GetInteger(string name)
플레이어 오브젝트에 PlayerController 추가
실행 시 코드대로 space키를 입력시 isDie 실행
-애니메이션 재생 중에 함수를 호출할 수도 있다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
private Animator animator; // Animator 타입의 변수
private void Awake()
{
animator = GetComponent<Animator>(); // 컴포넌트 가져오기
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space)) // 스페이스바 입력 시
{
animator.SetTrigger("isDie"); // isDie 트리거 활성화
}
}
public void OnDieEvent()
{
Debug.Log("End of Die Animation");
}
}
-함수 수정 후 Animation view에서 Add event
여기서의 event는 애니메이션 재생 중 특정 프레임에 원하는 함수를 호출하게 하는 것
-위치 이동 후 function설정
isDie호출 뒤 onDieEvent가 정상적으로 호출되는 것을 확인할 수 있다.