如何在unity3d 动态加载模型中加载大工程模型

如何在unity3d中加载大工程模型_百度知道Unity 3D怎么高效的导入大场景,比如导入一个城市?
逐个导入位置,工作量会大大增加,物体坐标也会有误差~
我们的方法是把场景中所有固定不动的东西(例如地形和房屋等)做成一个fbx,在建模软件里都摆好位置,这样导入unity以后只用调整比例就可以了
我对建模不怎么了解,但是导入过城市场景,我觉得在建模软件里应该可以作为子物体而绑定位置的,抱歉,我说的不专业……
我说两点吧!第一,实际项目中一般不会直接把一个完整的场景导入Unity3D中,就像
所说,因为这样会增加Culling和Occlusion的难度,你把整个场景作为一个模型整体导入这样是没法做剔除的,这样对效率可能会有所影响。第二、如果你希望将场景导入到Unity3D中,一个比较好的思路是将3D软件中制作的场景分割成一定粒度的小模型,然后记录下每个小模型在大模型中的相对位置,然后将这些小模型分别导出,再到Unity3D里通过脚本来重新组装
基本不会从3DS Max等专业建模软件导入大场景的几率,而是从这些软件中导出模型,然后利用引擎来编辑场景。工作量会多出一点,但是没有你说的那么多。后补内容:最近在实际经验中的确遇到了类似事情,整个场景都在max中制作好了,然后需要导入到Unity。操作方式是通过写max的脚本,把场景中的物件信息写入到格式文件中,Unity端写对应的脚本,把物件按照相应的信息在场景中生成。两边的脚本相对来说都不算复杂,所以算是一个很好的方式。
可以尝试给unity3d写过小插件 作为导入,而且可以定义导入时候物体的坐标和大小。
不好意思。我看了您一个发地图的第一桶金,很受启发,请问可以私聊我一下向你咨询一些事情吗?可以的话您回复我一下吧
已有帐号?
无法登录?
社交帐号登录当前位置: >
Unity3d 动态加载fbx模型文件
时间: 08:47 来源:Unity之家 作者:unity.jb51.net 浏览:
方法1(已测试过)1 将模型拖动到场景中 ,调整好位置。(制作prefab需要)2 新建Resources(如果工程中有的话 就不用新建了,Resource.Load调用的就是该文件夹下的资源),&&在该文件夹下建一个prefab,将上面的模型拖动到这个prefab上3 删除场景中的该物体模型4 编写脚本,把它仍随便一个GameObject主要代码如下using&UnityE
using&System.C
public&class&LoadFBX&:&MonoBehaviour&{
&&&&//&Use&this&for&initialization
&&&&void&Start&()&{
&&&&GameObject&gFbx=(GameObject)Instantiate(&Resources.Load(&che&));
&&&&//&Update&is&called&once&per&frame
&&&&void&Update&()&{
}搞定方法2:(没测试过,应该可以,因为之前能成功加载GameObject对象)1 按方法1 制作prefab 注意调整好位置2 然后使用AssetBundle导出包选项 create single AssetBundle(这之前需要在工程文件夹中新建一个叫做“Dynamic_Asset”的文件夹)3 这时可以看到导出的.AssetBundle文件了4 编写代码主要代码如下:public&string&
&&&&void&Start&()&{
&&&&&&&&string&Scname&=&&scene1_part2.assetbundle&;
&&&&&&&&url&=&&file://F:/EZGUI/Dynamic_Asset/&;
&&&&&&&&StartCoroutine(DLAsset(url,Scname));
&&&&void&Update&()&{
&&&&public&IEnumerator&DLAsset&(string&url,string&Scname)&{
&&&&&&&&WWW&www&=&new&WWW(url+Scname);
&&&&&&&&yield&return&
&&&&&&&&GameObject&GO&=&(GameObject)Instantiate(www.assetBundle.mainAsset);
&&&&}========================================================================================如何动态加载模型-0如何动态加载模型 & 1,加载封装好的内部文件。 var aaa : M//空材质 &&var bbb : GameO//要绑定材质的模型function&Start()&&&
&&&&&&&&aaa.mainTexture&=&Resources.Load(&你的资源名,例如“pic1”不需要文件扩展名&);&&&
&&&&&&&bbb.renderer.material&=&&&&
}&&2,加载磁盘文件&var&bbb&:&GameO&&&
function&Start&()&{&&&
&&&&&&&var&www&=&new&WWW&(&file://D:\\pic1.jpg&这里也可以是网络图片地址);&&&
&&&&&&&yield&&&&
&&&&&&&bbb.renderer.material.SetTexture(&_MainTex&,&www.texture);&&&
(责任编辑:脚印)
免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。
猜你也喜欢看这些 ······
其他类型的Unity编程 ······您所在的位置: &
Unity3D开发:向Unity3D中导入外部模型
Unity3D开发:向Unity3D中导入外部模型
本文属于Unity3D引擎开发基础教程系列,Unity3D支持多种外部导入的模型格式,这里列出了它支持的外部模型的属性,并且以3D MAX为例,导出FBX文件给Unity3D使用。
Unity3D支持多种外部导入的模型格式,但它并不是对每一种外部模型的属性都支持。具体的支持参数,您可以对照如下列表:
Maya的.mb和.mal格式
3D Studio Max的.maxl格式
Cheetah 3D的.jasl格式
Cinema 4D的.c4dl 2格式
Blender的.blendl格式
Lightwavel
Autodesk FBX的.dae格式
XSI 5的.xl格式
SketchUp Prol
3D Studio的.3ds格式
Wavefront的.obj格式
Drawing InterchangeFiles的.dxf格式
在下面的实例中,我们利用3D MAX来制作一个完整的动画,并导出FBX的格式给Unity3D使用。
第一步:创建新的工程文件。
创建一个名为&Turret&的项目文件夹。然后打开Unity3D软件,选择 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="24" alt="6.JPG" src="/wyfs01/M01/08/1E/wKioJlF4kMWAWT1yAAADoZDpfwc794.jpg" id="aimg_67999" style="display:" /> &&& 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="86" alt="7.JPG" src="/wyfs01/M00/08/1E/wKioJlF4kMXTU4WtAAAFjKLJOBg736.jpg" id="aimg_68000" style="display:" /> ,创建一个新工程项目,在项目路径中点击 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="84" alt="8.JPG" src="/wyfs01/M01/08/1E/wKioOVF4kMXT95KkAAAF8bH_X4o182.jpg" id="aimg_68001" style="display:" /> 找到我们刚才创建的&Turret&文件夹,并点选我们需要导入的包文件,然后点击 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="119" alt="9.JPG" src="/wyfs01/M00/08/1E/wKioOVF4kMXiRvzfAAAGrn7fEZ0875.jpg" id="aimg_68002" style="display:" /> 来创建一个新的工程文件。需要注意的是,以上步骤千万不能乱,因为Unity3D是无法以非空的文件夹作为工程文件夹来创建项目的。
在此为了节省时间,笔者直接使用刚才创建好的场景来进行示范。
第二步:制作一个炮塔模型。
打开3D MAX软件制作一个炮塔模型,并将制作好的模型保存在&Assets&【资源】文件夹下面。3D MAX中的模型样图如图8.1所示:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="558" alt="10.JPG" src="/wyfs01/M00/08/1E/wKioJlF4kMaworouAAA6wNA9MRM183.jpg" id="aimg_68003" style="display:" />
第三步:将炮塔模型放入场景。
重新来到Unity3D的软件环境中,这时大家已经能在Project【项目文件栏】看到我们刚才用3D MAX导出的模型文件和材质贴图文件了。接着我们在地形场景中找到一个合适的位置,将我们的炮塔拖拽进去。如图8.2所示:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="558" alt="11.JPG" src="/wyfs01/M01/08/1E/wKioJlF4kMbAPquGAACNGcm024M467.jpg" id="aimg_68004" style="display:" />
但是我们发现,这样似乎太小了一点。在改变外部模型尺寸的时候,有一个技巧,您不必在场景中修改它。儿科一道该模型的属性面板中去修改它的&Scale Factor&大小。如图8.3所示:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="345" alt="12.JPG" src="/wyfs01/M00/08/1E/wKioOVF4kMaghqLqAACvmrCblcU625.jpg" id="aimg_68005" style="display:" />
它的默认值都是0.01,我们在这里将它改为0.1,并在属性面板的最下方找到 498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="47" alt="13.JPG" src="/wyfs01/M01/08/1E/wKioOVF4kMaCbLGJAAAELzgU_p0480.jpg" id="aimg_68006" style="display:" /> 按钮,点击它让模型尺寸在Unity3D中得到改变。如图8.4所示:
498)this.width=498;' onmousewheel = 'javascript:return big(this)' width="558" alt="14.JPG" src="/wyfs01/M01/08/1F/wKioJlF4kMbip2I3AACBDUvS67s546.jpg" id="aimg_67991" style="display:" />
怎么样,我们的炮台是不是雄壮了许多?但是,我们并不赞同这样的模型导入方法。因为根据官方的说法,他们建议您将做好的模型导出成为FBX格式的模型文件
给Unity3D使用。也许这样会使模型在Unity3D中的运行速度得以提高吧。所以说我们还是回到3D MAX的软件环境下面,将模型导出。
第四步:将炮塔模型导出。
MAX中,点击File【文件】&&&Export【导出】,将模型文件导出为FBX文件,保存到我们创建的文件夹中的&Assets&【资源】文
件夹下面。注意一下弹出的&FBX
Export&面板,这里包含了模型动画、骨骼工具、材质等等一系列的导出设置。如果您没有在模型中添加这些东西,就需要将不必要的复选框勾选掉。
第五步:将炮塔模型再次放置到场景中。
回到Unity3D的软件环境,在Hierarchy【层次清单栏】中选中原先的炮塔模型,按下&Delete&键将其删除。然后在Project【项目
文件栏】中找到刚刚导入的FBX模型,点击选中,用前面修改模型尺寸的方法来修改FBX模型的尺寸。然后将其放置在场景中合适的位置上。于是从3D
MAX中导出的模型就顺利的导入到Unity3D的场景中了。【编辑推荐】【责任编辑: TEL:(010)】
关于&&的更多文章
Unity,也称Unity3D,是近几年非常流行的一个3D游戏开发引擎,跨
既然强大的Android Studio来了,有什么理由不去用呢?
随着秋的到来,各路才子佳人渐渐开始回到学校上课。不
百度推出轻应用引起业界火热议论,收购91和推出轻应用
App搜索对应用的影响不容忽视,目前应用商店仍采用最
本书依据最新版《软件设计师考试大纲》的考核要求,深入研究了历年软件设计师考试试题的命题风格和试题结构,对考查的知识点进行
Windows Phone专家
Android开发专家
51CTO旗下网站你的浏览器禁用了JavaScript, 请开启后刷新浏览器获得更好的体验!
强调,不是unity3d类型文件,是fbx、obj等格式的模型文件,不是放在资源文件夹下,而是通过下载的方式获取,求obj模型解析的源代码
Unity不支持对于打包出来的项目进行模型加载,如果你一定要做,可以用代码配合3dmax的fbx插件等工具,将模型转化成顶点信息,再在unity里面创建go,贴上meshrenderer后再把顶点信息赋予它。
Unity不支持对于打包出来的项目进行模型加载,如果你一定要做,可以用代码配合3dmax的fbx插件等工具,将模 ...我已经做到了,不过模型文件太大的话读取速度特别慢
我已经做到了,不过模型文件太大的话读取速度特别慢请问你是怎么做到的?可否介绍一下。
请问你是怎么做到的?可否介绍一下。读取OBJ模型文件,使用switch语句来存放读取的值,每读取完一个面后绘制网格。
unity-obj-loader-master这个文件
完美动态加载
unity-obj-loader-master这个文件
完美动态加载这个我已经用了,并且也修改好了,但是它加载大型文件的话就会出问题,而且它限制了面的顶点数,如果修改的话要该很多东西
这个我已经用了,并且也修改好了,但是它加载大型文件的话就会出问题,而且它限制了面的顶点数,如果修改 ...嗯, 是的
,还是有利有弊
是啊,问下3dmax导出的文件都比较大,如果用来做u3d里面的场景,怎么才可以减少体积呢
是啊,问下3dmax导出的文件都比较大,如果用来做u3d里面的场景,怎么才可以减少体积呢 ...你是调整文件大小么,可以在预设选中修改scale Factor的大小
pragma strict
private var oneTexture:Texture2D;
private var allTexture:Object[];
var image:Texture2D;
var text:S
function Start () {
if (GUI.Button ( Rect (10, 20, 100, 60), "loadOneTexture"))
if(oneTexture==null)
oneTexture=Resources.Load("oneTexture/Grass");//加载oneTexture文件夹里的Grass文件
if (GUI.Button ( Rect (10, 140, 100, 60), "loadallTexture"))
if(allTexture==null)
allTexture=Resources.LoadAll("allTexture");//全部加载
if(oneTexture!=null)
GUI.DrawTexture (Rect(110,30,120,120),oneTexture,ScaleMode.StretchToFill,true,100);
if(allTexture!=null)
for(var i=0;i GUI.DrawTexture (Rect(110+i*120,150,120,120),allTexture,ScaleMode.StretchToFill,true,1000);
//if((Time.time%2)<1)
if(GUI.Button(Rect(10, 200, 100, 60),GUIContent("按钮",image)))//button中左边是图片右边是”按钮“
print("用户单击按钮");
if(GUI.Button(Rect(10, 250, 100, 60),GUIContent("按钮","按钮工具")))
print("用户单击按钮");
if(GUI.Button(Rect(10, 300, 100, 60),text))
print("用户单击按钮");
GUI.Label(Rect(15, 300, 100, 60),GUI.tooltip);
if(GUI.Button(Rect(10, 200, 100, 60),image))
print("用户单击按钮");
text=GUI.TextField(Rect(100, 250, 100, 30),text);
GUILayout.Button("123");
要回复问题请先或
浏览: 2184
关注: 6 人

参考资料

 

随机推荐