유니티 개발 관련

Export FBX in Unity

DualQuaternion 2023. 5. 26. 10:39

유니티에서 생성한 FBX 파일을 스크립트 코드를 통해 익스포트해야 하는 미션이 주어졌다.

 

이 fbx파일은 애니메이션을 포함하는 버전인데, 어떻게 진행해야 하는지 알아보자.

 

char GPT를 통해서 알아보니 유니티에서 제공하는 FBXExporter 클래스가 있다고 한다. (결국 사실이 아님이 들통났다...)

using UnityEditor;
using UnityEngine;

public class FBXExporterScript : MonoBehaviour
{
    [MenuItem("Custom/Export FBX With Animation")]
    static void ExportFBXWithAnimation()
    {
        string path = "Assets/ExportedAnimation.fbx"; // Specify the file path and name for the exported FBX file
        
        // Select the GameObject with the animation you want to export
        GameObject gameObject = Selection.activeGameObject;
        if (gameObject == null)
        {
            Debug.LogError("Please select a GameObject with animation.");
            return;
        }
        
        // Create a new FBXExporter instance
        var fbxExporter = new FBXExporter();
        
        // Set up the exporter with the GameObject and animation settings
        fbxExporter.Init(gameObject, new FBXExportSettings());
        
        // Export the FBX file with animation
        fbxExporter.Export(path);
        
        // Destroy the exporter instance
        fbxExporter.Dispose();
        
        Debug.Log("FBX export completed: " + path);
    }
}

샘플 예제 코드는 위와 같다. 

 

이걸 응용해서 작업해보자.

일단 패키지 매니저를 열고 exporter를 깔아주자. 

 

다음 작업은 

https://docs.unity3d.com/Packages/com.unity.formats.fbx@2.0/manual/devguide.html

 

Developer’s Guide | FBX Exporter | 2.0.3-preview.3

Developer’s Guide As a developer you have access to the FBX Exporter from C# scripting. You can use the basic API by providing a single GameObject or a list of GameObjects. Note that default export settings are used for exporting the GameObjects to the F

docs.unity3d.com

를 보고 진행해주자.

 

사실 매우 간단하다.

        
using UnityEditor.Formats.Fbx.Exporter;

        GameObject[] gameObject = new GameObject[1];
        gameObject[0] = GameObject.Find("actor1");

        if (gameObject == null)
        {
            Debug.LogError("Please select a GameObject with animation.");
            return;
        }

        // Create a new FBXExporter instance
        string path = "Assets/ExportedAnimation.fbx"; // Specify the file path and name for the exported FBX file
        ModelExporter.ExportObjects(path, gameObject);

 

이런식으로 짜주면 끝. 과연 잘 돌아갈까?

 

 

이런 에러가 발생한다. 관련 모델로 가서 

read/write 항목을 켜주자. 그런다음 다시 실행

 

설마 이렇게 간단하게 되나?

 

일단 익스포트가 되긴 하는데 용량이 엄청 크다.

 

메시의 형상은 잘 출력해주는것으로 확인된다. 애니메이션은 내가 특수한 구조를 사용하기 때문에 내가 원하는 형태의 출력은 되지 않네..

 

 

그리고 내가 이 객체에 애니메이션을 주는 방식이 매 프레임마다 관절각을 넣어주는 방식인데, 첫 프레임만 익스포트 된 것으로 확인된다. 어떻게 하면 애니메이션을 다 넣어서 익스포트 할 수 있을까?....

 

모델 객체에 cli manager 안에 flag를 Play로 바꾼 후에 익스포트 하면 애니메이션이 잘 나올지도 모르겠다는 생각이 들어서 해본다. 

 

음 딱 익스포트한 해당 프레임만 뽑혀져서 나오는 것이 확인된다.

 

어떻게 하면 애니메이션을 넣어서 익스포트 할 수 있으려나?....