카테고리 없음

UNITY에서 실행 중에 3D Model파일 로드하기

Wood Pecker 2024. 6. 23. 16:41

1. 개요

    프로그램이 실행 중에 서버로 부터 3D 모델을 읽고 이를 보여주도록 한다.  

2.  GLB/GLTF 로드하기  

     필요한 라이브러리 파일을 설정한다. 
     [참고]   https://docs.unity3d.com/Packages/com.unity.cloud.gltfast@6.6/manual/installation.html

     go to Windows > Package Manager.
     select the Add (+) button.  Add PAckage from git URL
       ==>      com.unity.cloud.gltfast

 

 

using UnityEngine;
using UnityEngine.Networking;
using System.Collections;
using GLTFast;
using GLTFast.Loading;
using System.IO;
using System.Threading.Tasks;

public class Load3DModels : MonoBehaviour
{
     private string modelUrl = "https://server_url/drone3.glb";
     //file에서 읽기 
     // private string modelUrl = "file://C:\\MyApp\\Assets\\drone3.glb";
     

    async void Start()
    {
        await LoadModel();
    }

    async Task LoadModel()
    {
        var gltf = new GLTFast.GltfImport();
        var success = await gltf.Load(modelUrl);
        
        if (success)
        {
            // New, async instantiation
            GameObject loadedModel = new GameObject("LoadedModel");
            success = await gltf.InstantiateMainSceneAsync(loadedModel.transform);
            if (success)
            {
                Debug.Log("glTF instantiated successfully!");
                // 모델의 트랜스폼 설정
                Transform modelTransform = loadedModel.transform;
                modelTransform.SetParent(transform);
                modelTransform.localPosition = Vector3.zero; // 모델의 위치 설정
                modelTransform.localRotation = Quaternion.identity; // 모델의 방향 설정
                modelTransform.localScale = Vector3.one * 10; // 모델의 크기 설정
            }
            else
            {
                Debug.LogError("Failed to instantiate glTF model");
            }
        }
        else
        {
            Debug.LogError("Failed to load model from data");
        }
    }
}

 

[후기] 3D 모델 파일 크기는  일반적으로 매우 크다. 매번 서버에서 로드하기 보다는 로컬 기기에 먼저 필요한 파일을 복사해 놓고 로컬에서 불러 오지 못하는 경우에만 서버에서 불러오는 방식을 생각해 볼 수 있다. 유니티에디터에서 작업한 위 코드를 오큘러스 Quest2에서 실행하려고 시도하는 과정에서 어려움이 있었다. 모든 안드로이드 퍼미션을 주어도 로컬파일에서는 glb 파일을 읽어 올 수 없었다.  결국 확장자를 jpg로 변경해서 사용하는 변칙을 사용하였다. 

 

반응형