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下载

放置路径位置:

相关推荐
Java程序员威哥2 小时前
Java应用容器化最佳实践:Docker镜像构建+K8s滚动更新(生产级完整模板+避坑指南)
java·开发语言·后端·python·docker·kubernetes·c#
垂葛酒肝汤2 小时前
C#的const和static的问题
开发语言·c#
xb11322 小时前
WinForms 多窗体应用程序详解
数据库·microsoft·c#
xb11323 小时前
C# WinForms界面设计
开发语言·c#
心前阳光4 小时前
Unity发布运行在PICO4的安卓程序
android·unity·游戏引擎
阿蒙Amon4 小时前
C#每日面试题-简述类成员
开发语言·c#
孟无岐4 小时前
【Laya】Scene3D 介绍
typescript·游戏引擎·游戏程序·laya
sunfove4 小时前
Python制作小游戏:用线性代数思想构建 2048 游戏引擎
python·线性代数·游戏引擎
孟无岐4 小时前
【Laya】Sprite3D 介绍
typescript·游戏引擎·游戏程序·laya