Unity2D_Basic #10

haechi·2021년 8월 8일
0

unity

목록 보기
31/39

210808
Unity2D_Basic #10


  • Animation
    지난번 PlayerIdle 애니메이션을 적용시켰다.

-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가 정상적으로 호출되는 것을 확인할 수 있다.

참고
https://www.inflearn.com/course/%EA%B3%A0%EB%B0%95%EC%82%AC-%EC%9C%A0%EB%8B%88%ED%8B%B0-%EA%B8%B0%EC%B4%88/dashboard

profile
공부중인 것들 기록

0개의 댓글