当前位置: 首页 > news >正文

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

一、效果展示

点击按钮上传glb格式的模型,进行后续移动、旋转和缩放操作,上传的模型会出现在原点(0,0,0)位置在这里插入图片描述
演示视频:

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_EDITORstring path = EditorUtility.OpenFilePanel("选择模型", "", "glb,gltf");if (!string.IsNullOrEmpty(path)){StartCoroutine(LoadModel(path));}//导出exe后进行模型上传
#elif UNITY_STANDALONE_WINstring path = OpenFileDialogWin("选择模型文件", "glb|*.glb|gltf|*.gltf");if (!string.IsNullOrEmpty(path)){StartCoroutine(LoadModel(path));}
#elseDebug.LogWarning("当前平台暂不支持文件选择功能!");
#endif}/// <summary>/// 模型加载方法/// </summary>/// <param name="path"></param>/// <returns></returns>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;}/// <summary>/// 带出exe打开文件加载模型方法/// </summary>/// <param name="title"></param>/// <param name="filter"></param>/// <returns></returns>
#if UNITY_STANDALONE_WINstring 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
}
http://www.lryc.cn/news/580071.html

相关文章:

  • 秘塔AI搜索的通过Prompt生成互动式网页探索(二)
  • python脚本编程:使用BeautifulSoup爬虫库获取热门单机游戏排行榜
  • Android发展历程
  • 面试版-前端开发核心知识
  • Oracle如何使用序列 Oracle序列使用教程
  • Java 大视界 -- Java 大数据实战:智能安防入侵检测的特征工程与模型融合全解析
  • 硬件嵌入式学习路线大总结(一):C语言与linux。内功心法——从入门到精通,彻底打通你的任督二脉!
  • Java教程——线程池和future
  • Spring Boot 应用启动时,端口 8080 已被其他进程占用,怎么办
  • 批量PDF转换工具,一键转换Word Excel
  • Jenkins 介绍
  • 后端密码加密:守护用户数据的钢铁长城
  • [尚庭公寓]06-Redis快速入门
  • 通过 Ansys Discovery CFD 仿真探索电池冷板概念
  • Excel 如何进行多条件查找或求和?
  • WPF 右键菜单 MenuItem 绑定图片时只显示最后一个 Icon
  • 深度分析:Microsoft .NET Framework System.Random 的 C++ 复刻实现
  • c# 使用GADL: Can‘t load requested DLL错误处理
  • PixiJS教程(004):点击事件交互
  • gic 中断触发类型
  • Python 中线程和进程在实际项目使用中的区别和联系
  • FastAPI 小白教程:从入门级到实战(源码教程)
  • 基于Docker构建OrangePi5 SDK环境
  • 使用mindie:2.0.RC2-800I-A2-py311-openeuler24.03-lts制作一个通用的模型推理性能测试的镜像
  • Windows 10/11 PC平台关闭禁用系统自动上传相关隐私数据手册
  • TDengine STMT2 API 使用指南
  • HarmonyOS-ArkUI 手势系列4--多层级手势
  • Spring Boot 中常用的工具类库及其使用示例(完整版)
  • 洛谷P1941 [NOIP 2014 提高组] 飞扬的小鸟
  • 行阶梯形矩阵和行最简形矩阵的区别