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로 변경해서 사용하는 변칙을 사용하였다.
반응형