[Unity 3 d]Assetbundleをパッケージ化してロード

6685 ワード

何気なく巨大牛の人工知能のチュートリアルを見つけて、思わず共有してあげました.教程は基礎がゼロなだけではなくて、分かりやすくて、白も学ぶことができて、その上とても面白くてユーモアがあって、また時々内包のネタがあって、小説を読むように、はは~私は勉強中で、あまりにも牛だと感じて、だからみんなに分かち合います.ここをクリックするとチュートリアルにジャンプできます!
モデルリソースをリモートのサーバ側に配置するため、fbxモデルを直接配置してもロードできない場合は、fbxをプリセットにしたり、assetbundle形式にパッケージしたりして、wwwでロードして取得することができます.
その他のチュートリアル
http://dingxiaowei.cn/
使用方法を説明します.
1、添付ファイルのスクリプトを工事フォルダの下に置く...AssetsEditorフォルダの下にあります.
2、プロジェクトのプロジェクトビューで保存したいリソースをクリックします.ネット上ではPrefabをお勧めします.右クリックして、メニューの一番下の2つのオプションのいずれかを選択してもいいです.1つ目のオプションに対応するカスタム属性は期限切れですが、使用には影響しません.
3、ファイルの構築パスとファイル接尾辞を指定し、接尾辞はどうでもいい.
4、推奨製造方法:
空のGameObjectを作成したり、関連付けたい他のすべてのGameObjectをドラッグしたり、プロジェクトビューにprefabを作成したりして、prefabとしてドラッグします.上記の手順2、3を実行します.
 
公式の説明:http://game.ceeger.com/Script/BuildPipeline/BuildPipeline.BuildAssetBundle.html
 
 
1.まず、異なるプラットフォームの下にあるStreamingAssetsパスについて説明します.これは違います.
 
	    //     StreamingAssets       ,        。
	    public static readonly string PathURL =
#if UNITY_ANDROID   //  
		"jar:file://" + Application.dataPath + "!/assets/";
#elif UNITY_IPHONE  //iPhone
		Application.dataPath + "/Raw/";
#elif UNITY_STANDALONE_WIN || UNITY_EDITOR  //windows   web  
	"file://" + Application.dataPath + "/StreamingAssets/";
#else
        string.Empty;
#endif

 
 
 
これにより、異なるプラットフォームのパスが取得され、パッケージされたファイルをこれらのパスの下に置いてから、このパスからリソースを読み取ることができます.
2.assetbundleをパッケージするスクリプトについて
 
using UnityEngine;
using System.Collections;
using UnityEditor;

public class Test : Editor
{
	//    
	[MenuItem("Custom Editor/Create AssetBunldes Main")]
	static void CreateAssetBunldesMain ()
	{
        //   Project            
		Object[] SelectedAsset = Selection.GetFiltered (typeof(Object), SelectionMode.DeepAssets);
 
        //         
		foreach (Object obj in SelectedAsset) 
		{
			//    :     Assetbundle  StreamingAssets    ,         ,               
			//StreamingAssets     ,    
			//     :        ,        www     。
			string targetPath = Application.dataPath + "/StreamingAssets/" + obj.name + ".assetbundle";
			if (BuildPipeline.BuildAssetBundle (obj, null, targetPath, BuildAssetBundleOptions.CollectDependencies)) {
  				Debug.Log(obj.name +"      ");
			} 
			else 
			{
 				Debug.Log(obj.name +"      ");
			}
		}
		//     
		AssetDatabase.Refresh ();	
		
	}
	
	[MenuItem("Custom Editor/Create AssetBunldes ALL")]
	static void CreateAssetBunldesALL ()
	{
		
		Caching.CleanCache ();
 

		string Path = Application.dataPath + "/StreamingAssets/ALL.assetbundle";
 
		
		Object[] SelectedAsset = Selection.GetFiltered (typeof(Object), SelectionMode.DeepAssets);
 
		foreach (Object obj in SelectedAsset) 
		{
			Debug.Log ("Create AssetBunldes name :" + obj);
		}
		
		//           
		if (BuildPipeline.BuildAssetBundle (null, SelectedAsset, Path, BuildAssetBundleOptions.CollectDependencies)) {
			AssetDatabase.Refresh ();
		} else {
			
		}
	}
	
	[MenuItem("Custom Editor/Create Scene")]
	static void CreateSceneALL ()
	{
		//      
		Caching.CleanCache();
		string Path = Application.dataPath + "/MyScene.unity3d";
		string  []levels = {"Assets/Level.unity"};
    	//    
    	BuildPipeline.BuildPlayer( levels, Path,BuildTarget.WebPlayer, BuildOptions.BuildAdditionalStreamedScenes);
		AssetDatabase.Refresh ();
	}
	
}

新しい手動でStreamingAssetsフォルダを作成することを前提としています
 
3.リソースを読み込みます.ここでは、ローカルからの読み込みのみを例に挙げます.ネットワークからの読み込みと同じです.公式ドキュメントを参照してください.
http://game.ceeger.com/Script/WWW/WWW.html
 
using UnityEngine;
using System.Collections;

public class RunScript : MonoBehaviour
{
	

	    //     StreamingAssets       ,        。
	    public static readonly string PathURL =
#if UNITY_ANDROID
		"jar:file://" + Application.dataPath + "!/assets/";
#elif UNITY_IPHONE
		Application.dataPath + "/Raw/";
#elif UNITY_STANDALONE_WIN || UNITY_EDITOR
	"file://" + Application.dataPath + "/StreamingAssets/";
#else
        string.Empty;
#endif
	
	void OnGUI()
	{
		if(GUILayout.Button("Main Assetbundle"))
		{
			//StartCoroutine(LoadMainGameObject(PathURL + "Prefab0.assetbundle"));
			//StartCoroutine(LoadMainGameObject(PathURL +  "Prefab1.assetbundle"));
		
			StartCoroutine(LoadMainCacheGameObject(PathURL + "Prefab0.assetbundle"));
			StartCoroutine(LoadMainCacheGameObject(PathURL +  "Prefab1.assetbundle"));
		}
		
		if(GUILayout.Button("ALL Assetbundle"))
		{
			StartCoroutine(LoadALLGameObject(PathURL + "ALL.assetbundle"));
		}
		
		if(GUILayout.Button("Open Scene"))
		{
			StartCoroutine(LoadScene());
		}
		
	}
	
	//      
	
	private IEnumerator LoadMainGameObject(string path)
	{
		 WWW bundle = new WWW(path);
		 
		 yield return bundle;
		 
		 //      
		 yield return Instantiate(bundle.assetBundle.mainAsset);
		 
		 bundle.assetBundle.Unload(false);
	}
	
	//      
	
	private IEnumerator LoadALLGameObject(string path)
	{
		 WWW bundle = new WWW(path);
		 
		 yield return bundle;
		 
		 //  Prefab           
		 Object  obj0 =  bundle.assetBundle.Load("Prefab0");
		 Object  obj1 =  bundle.assetBundle.Load("Prefab1");
		
		 //      	
		 yield return Instantiate(obj0);
		 yield return Instantiate(obj1);
		 bundle.assetBundle.Unload(false);
	}
	
	private IEnumerator LoadMainCacheGameObject(string path)
	{
		 WWW bundle = WWW.LoadFromCacheOrDownload(path,5);
		 
		 yield return bundle;
		 
		 //      
		 yield return Instantiate(bundle.assetBundle.mainAsset);
		 
		 bundle.assetBundle.Unload(false);
	}
	
	
	private IEnumerator LoadScene()
	{
		 WWW download = WWW.LoadFromCacheOrDownload ("file://"+Application.dataPath + "/MyScene.unity3d", 1);
			
		  yield return download;
		  var bundle = download.assetBundle;
  		  Application.LoadLevel ("Level");
	}
}

 
 
assetbundleファイルがサーバ側に置かれている場合は、www.loadfromcacheordownload()を使用して、サーバからダウンロードしてローカルに保存するかどうかをバージョンで直接制御します.本人が直接テストして、この方法は現地にダウンロードすることができて、ダウンロードが現地のどこにあるかはよく分かりませんが、砂箱ファイルの下にあると思います(モバイル開発者の友达は知っているはずです)、もちろん自分でバージョンコントロールをすることもできます.それはもっと柔軟で、www.loadfromcacheordownload()方法の束縛から抜け出すことができます.この方法でファイルを保存するのは空間の大きさの制限があるようです.50 Mだと言われています.私は自分で考証していません.後期は自分でバージョン管理をします.
 
 
 
 
========================================
MyBlog:http://blog.csdn.net/dingxiaowei2013             MyQQ:1213250243
Unity QQ群:3751422 cococos 2 dx QQ群:280818155
=================================================================