快捷搜索: 王者荣耀 脱发

Unity3D导入fbx模型(使用脚本批量导入模型)


采坑记录...

最近有需求要将倾斜摄影模型导入到Unity中,由于Unity只支持fbx类型的模型。于是就在想将.osgb类型转化为fbx类型。 经历好一段时间之后才知道FME2018可以支持这两种类型的文件相互转换。于是将模型类型转换好了之后,我发现Unity模型导入也成了 一个问题…(最近才开始学的渣渣)。 后来发现fbx导入Unity有两种方式:

    直接将fbx模型放到项目目录下,从project视图中直接拖拽至Hierarchy视图中。 写脚本

第一种方法很简单,并且可以直接实例化模型,即拖即用(神似IPV6 DHCP协议…),当然坏处也是有的。这种方式方便是方便,但是 当我需要导入的fbx模型不止数个的时候问题就来了。这种方法不支持多选,然后群体拖入Hierarchy视图中这种方法。这时候我就比较 头疼了,开始探索第二种方式:写脚本。


刚开始写脚本的时候又是踩了无数坑,一开始网上的教程都比较麻烦。我去GITHUB搜了脚本,搜到一个FBX importer,但更多的是FBX exporter… 无奈那个脚本clone下来了也不会用。只得自己写。后来发现Resources.Load()方法可以直接将fbx文件导入unity,再循环遍历一下文件夹 就实现了fbx模型的批量导入,但是load方法的输入路径参数比较复杂,在这个地方走了好多弯路。要注意Load的参数不能带后缀。 我把fbx文件都保存在Assets/Resources/fbx文件夹中,方法如下:

string filename = "fbx/" + file;
UnityEngine.Object obj = Resources.Load(filename);
GameObject go = Instantiate(obj) as GameObject;
go.transform.position = new Vector3(0, 0, 0);

导入后将模型的位置设置为(0, 0, 0)。


得到并处理文件名的代码如下:

// file path like F:ProjectAssetsResourcesfbxTile_+001_+004_L22_0003010.fbx
string[] files = Directory.GetFiles(path, "*.fbx", SearchOption.AllDirectories);
    foreach (string file in files)
    {
        char[] sp1 = { \ };
        char[] sp2 = { . };
        char[] s3 = { _ };
        string name_p1 = file.Split(x)[1];
        string name_p2 = name_p1.Split(sp1)[1];
        string name_p3 = name_p2.Split(sp2)[0];
        try
        {
            string flag = name_p3.Split(s3)[3];
            if (flag == "L19")
            {
                Lod1Name.Add(name_p3);
            }
            else if (flag == "L22")
            {
                Lod0Name.Add(name_p3);
            }
            //Debug.Log(flag);
        }
        catch (Exception e)
        {
            //Debug.Log(name_p3);
            Lod2Name.Add(name_p3);
        }
    }

处理完后的文件名就是无后缀的纯文件名,直接使用Resources.Load(filename)就可以动态,批量加载fbx模型了。

这三个连续的判断语句是为了将导入的fbx模型先分类,并Set给不同的Parent,然后直接将Parent的renderer赋给LODGroup实现LOD功能,后续将逐渐完善。

经验分享 程序员 微信小程序 职场和发展