【Unity开发】Unity实现glb模型上传到场景中使用功能

一、效果展示

点击按钮上传glb格式的模型,进行后续移动、旋转和缩放操作,上传的模型会出现在原点(0,0,0)位置【Unity开发】Unity实现glb模型上传到场景中使用功能_第1张图片
演示视频:

Unity实现glb模型上传到场景中使用功能

二、环境要求

需要下载安装用于加载glb模型的插件,下载好后直接拖入项目中进行使用
下载链接:https://github.com/Siccity/GLTFUtility/releases

三、实现完整代码

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.IO;
using System.Windows.Forms;
using Button = UnityEngine.UI.Button;
#if UNITY_EDITOR
using UnityEditor;
#endif
using Siccity.GLTFUtility;

public class UploadModel : MonoBehaviour
{
    public Transform modelParent; // 模型的父节点
    public Button uploadButton;   // UI按钮,点击触发上传

    void Start()
    {
        uploadButton.onClick.AddListener(OnUploadButtonClicked);
    }

    void OnUploadButtonClicked()
    {
        //在unity编辑器中进行模型上传
#if UNITY_EDITOR
        string path = EditorUtility.OpenFilePanel("选择模型", "", "glb,gltf");
        if (!string.IsNullOrEmpty(path))
        {
            StartCoroutine(LoadModel(path));
        }
        //导出exe后进行模型上传
#elif UNITY_STANDALONE_WIN
    string path = OpenFileDialogWin("选择模型文件", "glb|*.glb|gltf|*.gltf");
    if (!string.IsNullOrEmpty(path))
    {
        StartCoroutine(LoadModel(path));
    }
#else
    Debug.LogWarning("当前平台暂不支持文件选择功能!");
#endif
    }

    /// 
    /// 模型加载方法
    /// 
    /// 
    /// 
    IEnumerator LoadModel(string path)
    {
        Debug.Log("加载模型: " + path);
        GameObject loadedModel = Importer.LoadFromFile(path);
        if (loadedModel != null)
        {
            loadedModel.transform.SetParent(modelParent, false);
            loadedModel.transform.localPosition = Vector3.zero;
            loadedModel.transform.localRotation = Quaternion.identity;
            loadedModel.transform.localScale = Vector3.one;


            
            if (!loadedModel.GetComponent<Collider>())
            {
                // 加载成功后,添加 Collider组件
                loadedModel.AddComponent<BoxCollider>();
                // 添加控制模型移动、旋转和缩放的组件
                loadedModel.AddComponent<ModelControl>();
            }
            Debug.Log("模型加载成功!");
        }
        else
        {
            Debug.LogError("模型加载失败!");
        }

        yield return null;
    }

    /// 
    /// 带出exe打开文件加载模型方法
    /// 
    /// 
    /// 
    /// 
#if UNITY_STANDALONE_WIN
    string OpenFileDialogWin(string title, string filter)
    {
        OpenFileDialog ofd = new OpenFileDialog();
        ofd.Title = title;
        ofd.Filter = filter;
        ofd.Multiselect = false;

        DialogResult result = ofd.ShowDialog();
        if (result == DialogResult.OK)
        {
            return ofd.FileName;
        }
        return null;
    }
#endif
}

你可能感兴趣的:(Unity,unity,游戏引擎)