본문 바로가기

유니티/애니메이션

[Unity] 런타임 애니메이션 녹화 - GameObjectRecorder

반응형

런타임 도중 애니메이션 녹화 필요성

플레이어를 런타임 도중에 조작하고, 움직인 동작을 애니메이션 클립으로 저장할 수 없을까?

 

GameObjectRecorder를 사용하면 런타임에 실행된 변화를 애니메이션 클립으로 저장할 수 있다.

이렇게 하면 인게임에서 리플레이 시스템으로 활용할 수 있고 버츄얼 프로덕션 등에도 유의미하게 활용할 수 있다.


어떻게 런타임에 녹화할 수 있을까?

GameObjectRecorder를 사용하면 가능하다.

아래의 스크립트는 예시중 일부이다.

 

using System.Collections;
using System.Collections.Generic;
using UnityEditor.Animations;
using UnityEngine;

public class RuntimeRecorder : MonoBehaviour
{
    public AnimationClip clip;

    private GameObjectRecorder m_Recorder;

    void Start()
    {
        // Create recorder and record the script GameObject.
        m_Recorder = new GameObjectRecorder(gameObject);

        // Bind all the Transforms on the GameObject and all its children.
        m_Recorder.BindComponentsOfType<Transform>(gameObject, true);
        m_Recorder.BindComponentsOfType<RecordingTest>(gameObject, true);
    }

    void LateUpdate()
    {
        if (clip == null)
            return;

        // Take a snapshot and record all the bindings values for this frame.
        m_Recorder.TakeSnapshot(Time.deltaTime);
    }

    void OnDisable()
    {
        if (clip == null)
            return;

        if (m_Recorder.isRecording)
        {
            // Save the recorded session to the clip.
            m_Recorder.SaveToClip(clip);
        }
    }
}

 

반응형