您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 程序开发 > 开发经验 >
    unity 动态加载fbx的方法
    时间:2015-05-21 09:05 来源:互联网 作者:网络 浏览:收藏 挑错 推荐 打印

    方法1

    1 将模型拖动到场景中 ,调整好位置。(制作prefab需要)
    2 新建Resources(如果工程中有的话 就不用新建了,Resource.Load调用的就是该文件夹下的资源),在该文件夹下建一个prefab,将上面的模型拖动到这个prefab上
    3 删除场景中的该物体模型
    4 编写脚本,把它仍随便一个GameObject
    主要代码如下

    [csharp] view plaincopy
    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:

    1 按方法1 制作prefab 注意调整好位置

    2 然后使用AssetBundle导出包选项 create single AssetBundle(这之前需要在工程文件夹中新建一个叫做“Dynamic_Asset”的文件夹)

    3 这时可以看到导出的.AssetBundle文件了
    4 编写代码

    如下

    [csharp] view plaincopy
    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);  
        }  

    ========================================================================================
    如何动态加载模型-0
    如何动态加载模型   1,加载封装好的内部文件。 var aaa : Material;//空材质   
    var bbb : GameObject;//要绑定材质的模型

    [csharp] view plaincopy
    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);     
    }   
    初学Unity的过程中,会发现打包发布程序后,unity会自动将场景需要引用到的资源打包到安装包里,没有到的不会跟进去。我们在编辑器里看到的Asset中的文件结构只是工作于编辑器环境下的,在游戏中unity会重新组织数据库。这是我们一定会遇到一个需求,即动态的加载我们自己的文件,而且想维护这个文件存储和加载的位置,并且是各种自定义的文件。
    比如说你换装,需要动态从磁盘load一个模型,正常情况下如果这个模型没有被场景引用到,它都根本不会被打进安装包的。再比如说我想存储一个自己定义的配置的文件,想把它放在磁盘的某个位置,动态的读,这些需求就要动态的加载资源。


    1.首先总结下unity有哪几种资源类型
    unity资源的类型:
      -a) Unity内置的常用asset,                   fbx\jpg...
      - b) textasset:                                         txt、binary等,对应了它的TextAsset类,可以直接读入文本或者二进制byte
       -c) scriptable object                             它是序列化的Object实例,例如把一个Object实例保存成scriptable object,读入进来后就直接在内存中变成那个实例
       - d) asset bundle                                  它是一个资源压缩包,里面包含了一堆资源

    2.动态load资源的几种途径:
       -通过Resources模块,调用它的load函数:可以直接load并返回某个类型的Object,前提是要把这个资源放在Resource命名的文件夹下,Unity不关有没有场景引用,都会将其全部打入到安装包中。
            -通过bundle的形式:即将资源打成 asset bundle 放在服务器或本地磁盘,然后使用WWW模块get 下来,然后从这个bundle中load某个object。
            -通过AssetDatabase.loadasset :这种方式只在editor范围内有效,游戏运行时没有这个函数,它通常是在开发中调试用的

           Resources的方式需要把所有资源全部打入安装包,这对游戏的分包发布(微端)和版本升级(patch)是不利的,所以unity推荐的方式是不用它,都用bundle的方式替代,把资源达成几个小的bundle,用哪个就load哪个,这样还能分包发布和patch,但是在开发过程中,不可能没更新一个资源就打一次bundle,所以editor环境下可以使用AssetDatabase来模拟,这通常需要我们封装一个dynamic resource的loader模块,在不同的环境下做不同实现。

    (责任编辑:雷霆风)
    免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。