i want to make 3D object can load with www and streamingasset, but i have a problem in load assetbundle with streamingasset after www
example: i scan image one and image one have metadata to load assetbundle with WWW object its show. and then i scan image two load assetbundle with streamingasset the object cannot show. but debug.log show "the asset bundle cannot be loaded because another assetbundle with the same file..."
and this the code:
BundleAugmneterStream
[code]
using System.Collections.Generic; using UnityEngine; using Vuforia; using System.IO;
public class BundleAugmenterStream : MonoBehaviour, ITrackableEventHandler {
private string AssetName; private int Version; private GameObject mBundleInstance = null; public static TrackableBehaviour mTrackableBehaviour; private bool mAttached = false; private string metadata = ""; private GameObject cloningan;
// Use this for initialization void Start() {
mTrackableBehaviour = GetComponent<TrackableBehaviour>(); if (mTrackableBehaviour) { mTrackableBehaviour.RegisterTrackableEventHandler(this); } }
void OnDestroy() { if (mTrackableBehaviour) mTrackableBehaviour.UnregisterTrackableEventHandler(this); }
// Update is called once per frame IEnumerator DownloadAndCache() { metadata = CloudHandler.mTargetMetadata; var bundleLoadRequest = AssetBundle.LoadFromFileAsync(Path.Combine(Application.streamingAssetsPath, "bakteri")); // bakteri nama assetbundle yield return bundleLoadRequest;
var myLoadedAssetBundle = bundleLoadRequest.assetBundle; if (myLoadedAssetBundle == null) { Debug.Log("Failed to load AssetBundle!"); yield break; }
var assetLoadRequest = myLoadedAssetBundle.LoadAssetAsync<GameObject>(metadata); yield return assetLoadRequest;
//GameObject prefab = assetLoadRequest.asset as GameObject; //Instantiate(prefab); mBundleInstance = Instantiate(assetLoadRequest.asset) as GameObject; mBundleInstance.transform.gameObject.SetActive(false); cloningan = Instantiate(mBundleInstance) as GameObject; cloningan.transform.parent = mTrackableBehaviour.transform; cloningan.transform.localScale = new Vector3(100f, 100f, 100f); cloningan.transform.localPosition = new Vector3(0.0f, 0.0f, 0.0f); cloningan.transform.localRotation = Quaternion.identity; cloningan.transform.gameObject.SetActive(true); myLoadedAssetBundle.Unload(false); }
public void OnTrackableStateChanged( TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus) { if (newStatus == TrackableBehaviour.Status.DETECTED || newStatus == TrackableBehaviour.Status.TRACKED) { OnTrackingFound(); } else { OnTrackingLost(); } }
private void OnTrackingFound() { StartCoroutine(DownloadAndCache()); }
private void OnTrackingLost() { Destroy(cloningan); }
// Update is called once per frame void Update () { } }[/code]
AssetBundleAugmenter
[code]
using System.Collections.Generic; using UnityEngine; using Vuforia;
public class AssetBundleAugmenter : MonoBehaviour, ITrackableEventHandler {
private string AssetName; private int Version; private GameObject mBundleInstance = null; public static TrackableBehaviour mTrackableBehaviour; private bool mAttached = false; private string metadata = ""; private GameObject cloningan;
// Use this for initialization void Start () { mTrackableBehaviour = GetComponent<TrackableBehaviour>(); if (mTrackableBehaviour) { mTrackableBehaviour.RegisterTrackableEventHandler(this); } }
void OnDestroy() { if (mTrackableBehaviour) mTrackableBehaviour.UnregisterTrackableEventHandler(this); }
// Update is called once per frame IEnumerator DownloadAndCache() { // example URL of file on PC filesystem (Windows) // string bundleURL = "file:///D:/Unity/AssetBundles/MyAssetBundle.unity3d"; // example URL of file on Android device SD-card metadata = CloudHandler.mTargetMetadata;
string bundleURL = metadata;
using (WWW www = new WWW(bundleURL)) { yield return www; if (www.error != null) throw new UnityException("WWW download had an error:" + www.error); AssetBundle bundle = www.assetBundle; if (AssetName == "") mBundleInstance = Instantiate(bundle.mainAsset) as GameObject; else mBundleInstance = Instantiate(bundle.LoadAsset("arcloud")) as GameObject; mBundleInstance.transform.gameObject.SetActive(false); cloningan = Instantiate(mBundleInstance) as GameObject; cloningan.transform.parent = mTrackableBehaviour.transform; cloningan.transform.localScale = new Vector3(100f, 100f, 100f); cloningan.transform.localPosition = new Vector3(0.0f, 0.0f, 0.0f); cloningan.transform.localRotation = Quaternion.identity; cloningan.transform.gameObject.SetActive(true); // Unload the AssetBundles compressed contents to conserve memory bundle.Unload(false); } }
public void OnTrackableStateChanged( TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus) { if (newStatus == TrackableBehaviour.Status.DETECTED || newStatus == TrackableBehaviour.Status.TRACKED) { OnTrackingFound(); } else { OnTrackingLost(); } }
private void OnTrackingFound() { StartCoroutine(DownloadAndCache()); }
private void OnTrackingLost() { Destroy(cloningan); }
// Update is called once per frame void Update () { } }[/code]