楼层一层一层的加,把模型分开,弄成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. 如何处理webView跳转

    - (void)webView:(UIWebView *)wv didFailLoadWithError:(NSError *)error {    // Give iOS a chance to o ...

  2. 我的WebService入门

    ERP: 1. Data Layer: (ProductInfoDBHelper.cs) /// <summary> /// 获取门店图片信息 /// </summary> p ...

  3. 46 个非常有用的 PHP 代码片段

    在编写代码的时候有个神奇的工具总是好的!下面这里收集了 40+ PHP 代码片段,可以帮助你开发 PHP 项目. 这些 PHP 片段对于 PHP 初学者也非常有帮助,非常容易学习,让我们开始学习吧- ...

  4. 跟我一起学WCF(5)——深入解析服务契约[上篇]

    一.引言 在上一篇博文中,我们创建了一个简单WCF应用程序,在其中介绍到WCF最重要的概念又是终结点,而终结点又是由ABC组成的.对于Address地址也就是告诉客户端WCF服务所在的位置,而Cont ...

  5. Unity3D——键盘控制移动

    public float speed = 6f; Vector3 movement; void FixedUpdate () { float h = Input.GetAxisRaw("Ho ...

  6. Node.js 爬虫,自动化抓取文章标题和正文

    持续进行中... 目标: 动态User-Agent模拟浏览器 √ 支持Proxy设置,避免被服务器端拒绝 √ 支持多核模式,发挥多核CPU性能 √ 支持核内并发模式 √ 自动解码非英文站点,避免乱码出 ...

  7. [BTS] Deploy Command

    BizTalkDeploymentTools.AddResource.bat @Echo OFF SET ApplicationName=%~1 SET ComponentType=%~2 SET C ...

  8. ubuntu下firefox无法看bilibili解决方案

    突然发现,在ubuntu中使用firefox打开bilibili网站无法加载视频与弹幕,在网上搜到的可能的问题为:linux下的firefox使用的flash player是老版本,bilibili不 ...

  9. atitit.java解析sql语言解析器解释器的实现

    atitit.java解析sql语言解析器解释器的实现 1. 解析sql的本质:实现一个4gl dsl编程语言的编译器 1 2. 解析sql的主要的流程,词法分析,而后进行语法分析,语义分析,构建sq ...

  10. paip.gui控件tabs控件加载内容的原理以及easyui最佳实现

    paip.gui控件tabs控件加载内容的原理以及easyui最佳实现 //////////////tabs控件的加载 同form窗体一样,俩个方式 两个方式:一个是url,简单的文本可以使用这个,不 ...