u3d動態加入模型

樓層一層一層的加,把模型分開,弄成prefab放到Resourse文件夾裏,在代碼裏用Instantiate(Resources.Load("模型名字") as GameObject);html

不一樣的按鈕用Resources.Load加載不一樣的物體。加載其中一個prefab的時候如何把以前加載的Prefab銷燬呢?由於prefab後面會加(clone),因此能夠用destroy(XXX(clone));網絡

文章轉載:http://www.j2megame.com/html/xwzx/ty/2623.htmliphone

 

動態加載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/如何動態加載模型-0this

如何動態加載模型   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);    url

 

最近作的項目是一個iphone的u3d項目,會用到須要動態加載模型的地方。簡單總結一下。spa

 
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);
相關文章
相關標籤/搜索