unity webGL导出.glb模型

@CSDN冰翼无痕冰翼无痕-CSDN博客感谢支持!

提示:AI没有解决方案,有也是从这来的,目前全网独家,现在咋感觉ai都跟搜索引擎一样,家家自己做了个数据库搜索引擎工具,AI现在基本上是个搜索引擎2.0或3.0,有时间聊聊底层数学算法逻辑。

这里导出的格式为:.glb

使用unity Japan的开源插件,需要对插件进行一些修改

插件:com.vrmc.gltf

GLTF importer and exporter 2021.3

开始我们需要理解一下模型的构成,一般模型不会是一个整体,而是有节点一层一层的,因此一般模型会有个根节点,人物角色模型换装,更换武器等,也是根据模型的这个特性进行的。

一般模型的坐标系通常与unity的不一样,因此通常需要左右手坐标系转换

需要您将包放到:packet 下

1、将想要的模型都放在一个节点下

2、实例化加载模型

3、导出下载

步骤一:

cs 复制代码
//实例化根节点 
GameObject exportObj = new GameObject("Root");
//实例化模型
GameObject cloneObj = Instantiate(frameObj);
//归置坐标节点,到原点
exportObj.transform.position = cloneObj.transform.position;
//设置到子集
cloneObj.transform.SetParent(exportObj.transform);

步骤二:

cs 复制代码
 // ---------------------------UniGLTF--------------------------------------------
//设置模型导出的一些参数,(这是默认的)是在这里设置了一些数据块
 var data = new ExportingGltfData();
//创建参数设置值
 var settings = new GltfExportSettings
 {
     // 1. 解决位置偏移:保持模型原始坐标,不重置中心点
     InverseAxis = Axes.Z,

     // 2. 解决材质差异:是否保留纹理(WebGL建议设为true)
     // 如果发现贴图丢失,请确保材质使用的是 Standard 或 UniGLTF 支持的 Shader

     // 3. 解决顶点错乱:如果模型导出后变碎或面片反了,尝试切换此项
     DivideVertexBuffer = true,

     // 4. 解决蒙皮骨骼问题:如果是角色模型,确保导出当前的姿态
     // UseCurrentShape = true
 };
//创建导出
 using (gltfExporter exporter = new gltfExporter(data, settings))
 {
      //设置实体对象
     exporter.Prepare(exportObj);
     //导出
     exporter.Export();
 }
 //创建数据流
 byte[] bytes = data.ToGlbBytes();
//下载导出,设置名称
 DownloadFileByBin(bytes, "NewModel.glb");
 // ---------------------------UniGLTF--------------------------------------------
 //清理内存 立即销毁对象"obj"。强烈建议您使用"Destroy"函数。
 DestroyImmediate(exportObj);

步骤三:下载的代码

cs 复制代码
[DllImport("__Internal")]//这里得用一个三方插件
private static extern void BinFileDownloader(string str, string fn, string type);

 
 /// <summary>
 /// 传入二进制数据转二进制字符串
 /// </summary>
 /// <param name="binData"></param>
 /// <param name="fileName"></param>
 private static void DownloadFileByBin(byte[] binData, string fileName)
 {
     if (binData != null)
     {
         Debug.Log("Downloading..." + fileName);
         //将二进制数据转化为js可识别的Base64String
         BinFileDownloader(System.Convert.ToBase64String(binData), fileName, "application/octet-stream");
     }
 }

以上为关键部分代码,分析,他们写的这个还是比较明确的,具体内容略,这也不是新手该看的内容,上面足够解决使用问题了

cs 复制代码
public virtual void Prepare(GameObject go)
{
    // コピーを作って左手系を右手系に変換する   
    //制作副本并将左手系转换为右手系
    Copy = GameObject.Instantiate(go);
    Copy.transform.ReverseRecursive(m_settings.InverseAxis.Create());

    // Export の root は gltf の scene になるので、
    // エクスポート対象が単一の GameObject の場合に、
    // ダミー親 "m_tmpParent" を一時的に作成する。

    // 由于导出的根节点将成为 glTF 的场景,
    // 因此当导出对象为单个游戏对象时,
    // 临时创建一个虚拟父对象 "m_tmpParent"。


    //
    // https://github.com/vrm-c/UniVRM/pull/736
    if (Copy.transform.childCount == 0)
    {
        m_tmpParent = new GameObject("tmpParent");
        Copy.transform.SetParent(m_tmpParent.transform, true);
        Copy = m_tmpParent;
    }

    if (Copy.transform.TryGetComponent<Renderer>(out var r))
    {
        // should throw ?
        UniGLTFLogger.Error("root mesh is not exported");
    }

    ReportProgress("prepared", 0.1f);
}

插件上传到csdn,免费

【免费】unity桥接网页前端下载代码资源-CSDN下载

放置路径位置:

相关推荐
2501_930707784 小时前
使用C#代码在 PowerPoint 中组合或取消组合形状
开发语言·c#
玄米乌龙茶12311 小时前
LLM成长笔记(十三):系统设计与项目实战
笔记·unity·游戏引擎
baivfhpwxf202312 小时前
c# 中对像之间频繁的转换会慢吗?
开发语言·c#
加号314 小时前
【C#】 实现 XRC 异或冗余校验:原理与实践
c#·xrc
GISer_Jing14 小时前
Three.js渲染架构:从WebGL到WebGPU的演进
javascript·架构·webgl
小钻风336614 小时前
Java + Spring Boot 操作 Kafka 完整学习指南
c#·linq
叫我少年14 小时前
C# 程序的常规结构 — 命名空间、类型、入口点与表达式
c#
_Evan_Yao18 小时前
游戏和编程两不误:用Unity做一个简单小游戏
后端·游戏·unity·游戏引擎
步步为营DotNet19 小时前
探秘.NET 11:C# 14 特性在后端性能优化中的深度应用
性能优化·c#·.net
2601_9560028119 小时前
钢铁雄心4/Hearts of Iron IV2026官方正版最新版pc免费下载(看到请立即转存 资源随时失效)手机版通用
大数据·游戏·游戏引擎·动画·游戏策划