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;
导⼊后将模型的位置设置为(0, 0, 0)。
得到并处理⽂件名的代码如下:
// file path like F:\Project\Assets\Resources\fbx\Tile_+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];
unity 教程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 功能,后续将逐渐完善。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论