楼层一层一层的加,把模型分开,弄成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项目,会用到需要动态加载模型的地方。简单总结一下。