楼层一层一层的加,把模型分开,弄成prefab放到Resourse文件夹里,在代码里用Instantiate(Resources.Load("模型名字") as GameObject);

不同的按钮用Resources.Load加载不同的物体。加载其中一个prefab的时候如何把之前加载的Prefab销毁呢?因为prefab后面会加(clone),所以可以用destroy(XXX(clone));

文章转载:http://www.j2megame.com/html/xwzx/ty/2623.html

动态加载FBX文件 方法1(已测试过) 1 将模型拖动到场景中,调整好位置。(制作prefab需要) 2 新建Resources(如果工程中有的话就不用新建了,Resource.Load调用的就是该文件夹下的资源),在该文件夹下建一个prefab,将上面的模型拖动到这个prefab上 3 删除场景中的该物体模型 4 编写脚本,把它仍随便一个GameObject 主要代码如下
using UnityEngine; using System.Collections;
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 url;     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 www;         GameObject GO = (GameObject)Instantiate(www.assetBundle.mainAsset);     }

========================================================================================

下面部分来自:http://www.unity3d8.com/content/如何动态加载模型-0

如何动态加载模型   1,加载封装好的内部文件。 var aaa : Material;//空材质    var bbb : GameObject;//要绑定材质的模型    function Start()    {            aaa.mainTexture = Resources.Load("你的资源名,例如“pic1”不需要文件扩展名");           bbb.renderer.material = aaa;    }  2,加载磁盘文件 var bbb : GameObject;    function Start () {           var www = new WWW ("file://D:\\pic1.jpg"这里也可以是网络图片地址);           yield www;           bbb.renderer.material.SetTexture("_MainTex", www.texture);    }

最近做的项目是一个iphone的u3d项目,会用到需要动态加载模型的地方。简单总结一下。

 
1,如果模型是项目工程里面的模型, 可以将模型放到Resources文件夹下面,然后再用Resource.Load("") 方法来加载;
GameObject modelResource = Resource.Load("xxx") as GameObject;//加载资源文件
GameObject obj = Object.Instantiate(modelResource) as GameObject;//
当然之后还可以设定obj的Material等。(注意一定要将资源放到Resources文件夹中)
 
2,如果模型是远程下载下来的,就最好将模型和相关资源打包成.unity文件,再用WWW进行加载。
WWW www = new WWW("url");
yield return www;
GameObject obj = Object.Instantiate(www.assetBundle.Load("ModelName")) as GameObject;
 
需要注意的是,如果模型是直接从比如3dmax导出的fbx文件,这样加载就会导致每次物体的Material都会被新建,也就是导致即使是相同的模型,也无法使用同一个draw call,如果会重复加载多次同样的模型,最好存成prefab进行处理,这样可以规避draw call的问题。
 
为了方便将fbx处理成prefab,我大体写了一个editor的工具,可以将fbx的model转化成prefab。有需要的话可以我和进行联系。这个转化比较简单,主要是用了这个方法(当然要大体知道U3D的Editor如何来写):
Object prefab = EditorUtility.CreateEmptyPrefab("Assets/Resources/Model/" + obj.name + ".prefab");
EditorUtility.ReplacePrefab(obj, prefab);

u3d动态加入模型的更多相关文章

  1. Python 学习 第四篇:动态类型模型

    Python的变量不用声明,赋值之后就可以直接使用,类型是在运行过程中自动确定的,这就是动态类型模型.该模型把变量和对象设计成两个不同的实体,对象是存储数据的地方,对象的类型是由初始值自动决定的,而变 ...

  2. Unreal Engine 4 动态切割模型实现

    转自:http://gad.qq.com/article/detail/33199 <合金装备:复仇>里面,有一个很有趣的设定,游戏里大部分的场景和物件都可以用主角的刀动态切割. UE4中 ...

  3. JS面向对象——动态原型模型、寄生构造模型

    动态原型模型 组合使用构造函数模型和原型模型,使得OO语言程序员在看到独立的构造函数和原型时很困惑.动态原型模型致力于解决该问题,它把所有的信息封装在构造函数中,通过在构造函数中初始化原型(仅在必要情 ...

  4. Entity Framework 7 动态 DbContext 模型缓存 ModelCaching

    EF7里实例化DbContext变的有点麻烦了, 下面这个基类会有所帮助: public abstract class BaseDbContext : DbContext { private stri ...

  5. [EF] - 动态创建模型:System.Reflection.Emit + Code First

    动态创建Entity Framework模型并且创建数据库 使用System.Reflection.Emit+Code First model创建以下的一个实体类和DbContext并且创建数据库: ...

  6. IOS开发之动态获取模型的属性值

    #import "model.h" #import <objc/runtime.h> @implementation model +(instancetype)mode ...

  7. Gin 如何动态生成模型 swagger 文档

    在做 API 接口开发时, 一般会统一 API 返回格式, 例如 { "code": 200, "data": { //xxxxx //xxxxx }, &qu ...

  8. Ember.js之动态创建模型

    本人原文地址发布在:点击这里 What problem did we meet? As ember document suggestion, we may define a model as a st ...

  9. Entityframework core 动态添加模型实体

    重新DBContext中OnModelCreating protected override void OnModelCreating(ModelBuilder modelBuilder)  { // ...

随机推荐

  1. 工资低的.Net程序员,活该你工资低

    这两天博客园上关于“.Net工资低”的讨论挺多的,让我不禁想起一句话“拉不出屎来怪地球没引力”. 那些抱怨“做.Net工作三年了月薪才6千,我的同学做Java现在都一万二”的哥们,你问问自己“我会什么 ...

  2. 用c#开发微信 (22) 微信商城 - 微信支付 (c#源码)

    微信支付有几种支付模式:刷卡支付,扫码支付,公众号支付,APP支付.本文介绍用于在微信商城里的公众号支付. 1. 效果图 在商城里购买商品后,到支付页面: 点击上面的确认支付,转到下面微信支付页面: ...

  3. Linux:用户&用户组操作

    用户:查看用户:whoami.who am i.who mom likes创建用户:adduser dgw切换登录用户:su -l dgw退出当前用户: exit删除用户:deluser dgw -- ...

  4. 如何真正重写window对象的方法

    重写window对象的方法不是一件新奇的事,比如我们可能需要改变默认alert的行为,如何安全的重写呢? 小菜看到某知名IT网站是这样的写法: window.alert = function(){}; ...

  5. ActiveReports 9实战教程(3): 图文并茂的报表形式

    基于上面2节内容,我们搭建了AR9的开发环境,配置好了数据源.在本节,我们以官方提供的3个中文图文并茂的报表来展示AR9的功能,并通过实战的方式一一分享. 以往做报表相关的工作时,最害怕的是报表的UI ...

  6. 【Android】进入Material Design时代

    由于本文引用了大量官方文档.图片资源,以及开源社区的Lib和相关图片资源,因此在转载的时候,务必注明来源,如果使用资源请注明资源的出处,尊重版权,尊重别人的劳动成果,谢谢! Material Desi ...

  7. Couldn't create temporary file to work with

    Ubuntu中当你编译安装软件的时候可能会出现Couldn't create temporary file to work with,原因可能是: 1.权限问题  2.根目录下没有tmp文件夹 解决办 ...

  8. bind() live()和delegate 区别

    Event bubbling (aka event propagation)冒泡 我们的页面可以理解为一棵DOM树,当我们在叶子结点上做什么事情的时候(如click一个a元素),如果我们不人为的设置s ...

  9. 还有人在用SQL Server 2000或2005吗? 2014来了!

    你的项目,还在用SQL Server 2000或2005吗? 很多人甚至还没有来得及用过SQL Server 2008,SQL Server 2012,现在SQL Server 2014已经出来了! ...

  10. DataGridViewComboBoxColumn值无效

    值无效,可能是你下拉框选项,没有这样的值,而你却设置这个值. dataGridView1.Rows[i].Cells[].Value = "选项一"; 解决方法就是在窗体的构造函数 ...