게임개발 예제모음

오브젝트간 상호작용을 통한 애니메이션 클립 재생 본문

유니티 메모장

오브젝트간 상호작용을 통한 애니메이션 클립 재생

게임을만들어보자 2025. 6. 11. 21:19

○ 구현목표

- 플레이어가 이동하며 필드에 떨어진 아이템에 접촉하면 아이템을 획득
- 획득과 동시에 애니메이션 클립/효과 재생
- 아이템 오브젝트와 애니메이션 클립은 이벤트 발생 이후 제거
- 플레이어 오브젝트는 이동에 관련된 기능은 설정 완료된것으로 가정한다.

  ※ 오브젝트 이동 참고자료

2025.06.03 - [유니티 메모장] - InputSystem (RigidBody) 이동 예제

 

InputSystem (RigidBody) 이동 예제

2025.06.03 - [유니티 메모장] - 인풋시스템을 통한 오브젝트 이동 (ActionMap) 인풋시스템을 통한 오브젝트 이동 (ActionMap)○ 오브젝트에 Player Input 컴포넌트 추가○ Action에서 액션맵편집 (확인) 필요○

capsuleer.tistory.com

 

 

○ 논리 흐름

 

 

○  플레이어 오브젝트 각종 설정

  ※ Tag는 Player로 설정

  ※ Player Input, Rigidbody 2D의 경우 이동관련 설정중에 추가된다.

  ※ 상호작용 체크를 위해 콜라이더를 추가한다. 상황에 따라 다른 모양의 콜라이더를 사용해도 무방하다.

 

 

○ 아이템 오브젝트 설정

  ① 스크립트 작성 - 신규 스크립트(item.cs)를 생성하여 아이템 오브젝트에 어태치 및 Circle Collider 2d 추가

    ※ 콜라이더의 [Is Trigger] 체크

  ② 스크립트 작성

using Unity.Mathematics;
using UnityEngine;

public class Item : MonoBehaviour
{
    [SerializeField] GameObject pickUpClip;   //애니메이션 클립 변수
    Transform myTransform;  //아이템의 위치 확인을 위한 Transform컴포넌트 캐싱 변수
    Vector3 itemPosition;   //위치 확인 후 기억을 위한 Vector3 변수

    void Start()
    {
        myTransform = GetComponent<Transform>();  //Transform 캐싱
    }
    
    void OnTriggerEnter2D(Collider2D other) //콜라이더 내부로 진입을 체크
    {
        itemPosition = myTransform.position;  //현재 아이템의 위치 확인

        if (other.tag == "Player")
        {
            Instantiate(pickUpClip, itemPosition, quaternion.identity);  
            //애니메이션 클립 호출 
            //Quaternion.identity : 별도의 회전값을 주지 않겠다
            
            Destroy(gameObject);  //아이템 오브젝트 제거
        }
    }
}
Instantiate 기본형
------------
Instantiate(오브젝트, new Vector3(x, y, z) , 오브젝트 배치 각도);  

//오브젝트의 각도 관련 Quaternion내용은 유니티 매뉴얼 참고

https://docs.unity3d.com/kr/2021.3/Manual/class-Quaternion.html

 

중요 클래스 - Quaternion - Unity 매뉴얼

Unity는 Quaternion 클래스를 사용하여 게임 오브젝트의 3차원 방향을 저장하고, 이를 통해 한 방향에서 다른 방향으로의 상대 회전을 설명합니다.

docs.unity3d.com

 

 

○ 애니메이션 클립 작성

  ① Hierarchy에 애니메이션 클립을 위한 빈 오브젝트를 작성

  ② 애니메이션 클립 작성을 위해 Sprite를 자식 오브젝트로 추가 

    ※ 애니메이션 작성 시 오브젝트의 Position을 리셋하여 (0,0,0)으로 맞춰준다.

  ③ 애니메이션 작성

    ※ 프레임을 활용 하거나 애니메이션 녹화를 사용하여 애니메이션 작성

 

 

○ 애니메이션 클립 제어용 스크립트 작성

  ① 스크립트 생성 및 어태치

 

  ② 스크립트 작성

using UnityEngine;

public class AnimationClip : MonoBehaviour
{
    [SerializeField] GameObject parentsObject;  //애니메이션 클립 자기자신을 가리키는 변수
    Animator myAnimator;  // Animator 캐싱용

    void Start()
    {
        myAnimator = GetComponent<Animator>(); //Animator 캐싱
    }

    void Update()
    {
        if (!AnimatorIsPlaying())  //애니메이션 클립 재생이 완료되면 
        {
            Destroy(parentsObject);   // 클립 오브젝트를 파괴한다
        }
    }

    bool AnimatorIsPlaying()   //클립의 재생 여부 확인용 함수
    {        
        return myAnimator.GetCurrentAnimatorStateInfo(0).normalizedTime < 1f;
    }

}

 

  ③ 작성한 오브젝트를 프리펩으로 만든 후 하이라키의 오브젝트는 삭제한다.

 

 

○ 스크립트에 선언한 변수에 각각의 오브젝트 어태치

  ① 아이템 오브젝트

 

  ② 애니메이션 클립 오브젝트 : 애니메이션 클립의 부모 오브젝트를 어태치

 

 

○ 실행 테스트