[Unity] 6. 애니메이션 & Instantiate

치치·2025년 2월 24일
0

Unity

목록 보기
8/27
post-thumbnail

애니메이션

정적 게임 오브젝트

  • 애니메이션을 적용했고 실제 위치값도 변하고 있는데 게임씬에서 확인되지 않는다면 Static이 되어있는지 확인하자
  • 체크 중이면 정적 게임 오브젝트라는 의미이고, 게임 중 이동, 회전, 크기 변경이 없을 것이라고 가정한다

애니메이션 이벤트 추가

  • 애니메이션 중 특정 타이밍에 이벤트를 발생시킬 수 있다 (효과음, 파티클 등등 원하는 함수)
  • Add event로 이벤트를 등록했는데 지정해주지 않으면 오류가 발생한다

애니메이션 클립 추가

  • 한 오브젝트의 여러 애니메이션을 추가하고 싶다면 클립을 추가해야한다 Create New Clip
  • 저장 할 경로를 지정하고 애니메이션 작업

애니메이션 기본 단위

Any State

  • 어떤 상태에서도 해당 상태로 바로 전환이 가능한 경우이다

  • ex) 즉각적으로 애니메이션을 바꿔야할 경우, Die()나 피격당했을때 바로 호출되야할때 사용됨

  • 피격당한뒤 다시 Idle상태로 이동해야한다

Entry

  • 애니메이션이 실행될 때 처음 실행된다 (시작상태)

Exit

  • 현재 애니메이션을 종료하고 다른 동작으로 나갈 때 사용된다
  • 이전 애니메이션을 실행하고, Exit로 넘어가서 탈출하고 다시 Entry로 이동


Make Transition

  • 애니메이션 클립 간 연결
    -> 양방향으로도 가능하다

  • Transition을 누르면 애니메이션이 넘어가는 지점도 셋팅할 수 있고, Has Exit Time 체크 여부도 설정할 수 있다

Has Exit Time

  • 체크 해제 : 애니메이션이 다 끝난 상태가 아니더라도 바로 특정 조건이 맞다면 애니메이션이 넘어가는 기능

  • Entry가 가리키는 애니메이션을 바꾸려면? Set as Layer Default State

Parameters (매개변수)

애니메이션의 상태 전환을 제어하는 변수

  • 4가지 유형의 파라미터

사용 방법

  • 컴포넌트를 가져온 후
    참조변수.Set파라미터 타입("이름", 해당 값);

  • 아래의 예시에선 SetFloat를 사용하여 speed값이 변경하면 Float Speed애니메이션을 진행

  • 스페이스바를 누르면 SetBool로 지정한 isJumpingtrue 가 되어 애니메이션 진행

  • 애니메이션 컨트롤러 내부의 Condition에서 transition간 파라미터를 지정할 수 있다



Instantiate

  • 동적으로 게임 오브젝트를 생성하는 함수
  • Instantiate(원본객체, 위치값, 회전값);
    -> 매개변수로 위치값과 회전값을 넣지않으면 default값 (0,0,0)과 (회전x)가 들어간다

ex)

  • 게임오브젝트 knife를 동적생성하기

  • clone게임오브젝트 타입의 생성된 knife를 가리키는 참조변수
    -> 참조변수를 통해서 회전값, 위치값을 변경할 수 있다 (생성될 때 바로 값을 정할 수도 있음)

  • 회전값을 변경하기
    회전 값 변경전에 유니티의 회전을 다룰 때 사용하는 오일러 각(Euler Angles)사원수(Quaternion) 방법에 대해 알아보자

Euler Angles (오일러 각)

  • X, Y, Z 축을 기준으로 회전값을 표현하는 방식
  • Vector3(x, y, z) 형태로 표현된다

(Gimbal Lock) 짐벌락 현상

  • 오일러 각을 사용하면 특정 각도에서 축이 겹쳐지면서 회전 방향을 잃는 현상(짐벌락)이 발생할 수 있다
  • 즉, X = 90도가 되면 Y축과 Z축이 동일한 축으로 정렬되어 회전 방향이 모호해짐.

Quaternion (사원수)

  • 4차원(𝑥, 𝑦, 𝑧, 𝑤)으로 표현되는 회전 방식

  • Quaternion(x, y, z, w) 형태로 표현된다

  • 짐벌락의 문제가 없어서 안정적인 회전이 가능하다

  • 사용 시에 Quaternion.Euler(x, y, z);로 사용하면 오일러 각을 사원수로 변환한다

  • Quaternion.Identity; 는 회전을 안하겠다는 뜻 (회전값이 없다)


키 입력받기

Input.GetKeyDown(KeyCode._);

  • 키보드의 특정 키가 눌렀을때 발생하는 함수


수업 예시 코드

  1. 배열에 무기 게임 오브젝트들을 미리 할당해준다
  2. 동적으로 게임 오브젝트들을 게임씬에 하나씩 생성한다
  3. 생성된 게임 오브젝트들을 List에 저장한다
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UIElements;

public class WeaponManager : MonoBehaviour
{
    [SerializeField] GameObject knife;

    [SerializeField] GameObject [] weapons;

    // 게임 오브젝트 타입 리스트
    [SerializeField] List<GameObject> weaponList;
     
    private int count;
    
    void Start()
    {
        count = 0;
    }

    public void Equip()
    {
        if(weapons.Length <= count)
        {
            return;
        }

        GameObject clone = Instantiate(weapons[count++]);
        clone.gameObject.SetActive(false);

        // 리스트에 생성된 게임 오브젝트 추가
        weaponList.Add(clone);


    }

    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            Equip();
        }
       
    }
}
profile
뉴비 개발자

0개의 댓글