123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452 |
- using SC.XR.Unity.Module_InputSystem;
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.IO;
- using System.IO.Compression;
- using System.Reflection;
- using TriLibCore;
- using TriLibCore.Extensions;
- using UnityEngine;
- public class TemplateModel : BaseTemPlate
- {
- private GameObject m_ModelObj = null;
- protected override void OnEnable()
- {
- base.OnEnable();
- if (GameManager.Instance.IsRuning && m_ModelObj == null)
- {
- Debug.Log("ExtractZipFile===>1");
- if (IsAB())
- LoadABModel();
- else
- TriLibModel();
- }
- else
- {
- if (m_ModelObj && m_ModelObj.GetComponent<Animation>())
- {
- Debug.Log("Animation===>1"+ m_ModelObj.name);
- Animation _animation = m_ModelObj.GetComponent<Animation>();
- List<AnimationClip> _animations = _animation.GetAllAnimationClips();
- m_ModelObj.GetComponent<Animation>().Play(_animations[0].name, PlayMode.StopAll);
- }
- }
- }
- private IEnumerator LoadModel()
- {
- yield return new WaitForSeconds(0.01f);
- if (GameManager.Instance.IsRuning && m_ModelObj == null)
- {
-
- Debug.Log("DGJ ==>> "+Data.localLoadPath);
- var ab = AssetBundle.LoadFromFileAsync(Data.localLoadPath);
- yield return ab;
- if (ab == null)
- {
- Debug.Log("Failed to load AssetBundle!");
- }
- else
- {
- var allab = ab.assetBundle.LoadAllAssetsAsync<GameObject>();
- yield return allab;
- var prefab = ab.assetBundle.LoadAssetAsync<GameObject>((allab.allAssets[0] as GameObject).name);
- yield return prefab;
- switch (prefab.asset.name)
- {
- case "GHZ_OOBE_230721":
- var objload = Resources.LoadAsync<GameObject>("GongYe");
- yield return objload;
- GameObject obj = null;
- if (objload.asset is GameObject)
- {
- obj = objload.asset as GameObject;
- }
- if (obj == null)
- {
- Debug.LogError(" GHZ_OOBE_230721 物体加载失败,请查看是否导入相关Packages ");
- obj = new GameObject();
-
- }
- m_ModelObj = GameObject.Instantiate(obj,transform);
- m_ModelObj.name = "GongYe";
- if (GameObject.Find("AudioManager") ==null)
- {
- GameObject audio = Resources.Load<GameObject>("AudioManager");
- if(audio ==null)
- {
- Debug.LogError(" GHZ_OOBE_230721 Packages内AudioManager组件丢失");
- audio = new GameObject();
- }
- GameObject Audio = GameObject.Instantiate(audio, transform);
- Audio.name = "AudioManager";
- }
- break;
- case "GHZ_XXXXXX_230721":
- break;
- default:
- m_ModelObj = Instantiate(prefab.asset as GameObject, transform);
- break;
- }
-
-
-
- gameObject.AddComponent<ManipulationHandler>();
- gameObject.AddComponent<BoundingBox>();
- gameObject.AddComponent<Patch_ModelController>();
- yield return new WaitForSeconds(0.3f);
- ab.assetBundle.Unload(false);
- HideCollider();
- }
-
-
-
-
-
-
-
-
- }
- }
- public void LoadModel(AssetBundle ab)
- {
- GameManager.Instance.StartCoroutine(LoadABModel(ab));
-
- }
- private IEnumerator LoadABModel(AssetBundle ab)
- {
- if (ab == null)
- {
- Debug.Log("Failed to load AssetBundle!");
- }
- else
- {
- var allab = ab.LoadAllAssetsAsync<GameObject>();
- yield return allab;
- var prefab = ab.LoadAssetAsync<GameObject>((allab.allAssets[0] as GameObject).name);
- switch (prefab.asset.name)
- {
- case "GHZ_OOBE_230721":
- var objload = Resources.LoadAsync<GameObject>("GongYe");
- yield return objload;
- GameObject obj = null;
- if (objload.asset is GameObject)
- {
- obj = objload.asset as GameObject;
- }
- m_ModelObj = GameObject.Instantiate(obj, transform);
- m_ModelObj.name = "GongYe";
- if (GameObject.Find("AudioManager") == null)
- {
- GameObject audio = Resources.Load<GameObject>("AudioManager");
- if (audio == null)
- {
- Debug.LogError(" GHZ_OOBE_230721 Packages内AudioManager组件丢失");
- audio = new GameObject();
- }
- GameObject Audio = GameObject.Instantiate(audio, null);
- Audio.name = "AudioManager";
- }
- break;
- case "GHZ_XXXXXX_230721":
- break;
- default:
- m_ModelObj = Instantiate(prefab.asset as GameObject, transform);
- break;
- }
-
-
- gameObject.AddComponent<ManipulationHandler>();
- gameObject.AddComponent<BoundingBox>();
-
- ab.Unload(false);
- HideCollider();
- ModelItem.isLoad = false;
- }
- }
- protected override void OnAwake()
- {
- base.OnAwake();
- }
- public override void SetData(MaterialObjValue value, int updateTime)
- {
-
- base.SetData(value, updateTime);
-
-
-
-
-
- if (!GameManager.Instance.IsRuning|| Data == null)
- {
-
- DownLoadMaterial data = new DownLoadMaterial();
- this.Data = data;
- data.downLoadPath = value.DownloadPath;
- data.localLoadPath = Application.persistentDataPath + "/Material/" + Path.GetFileName(value.DownloadPath);
- data.updataTime = GameManager.Instance.m_SceneValue.updateTime;
- data.type = "3";
- MsgHandler.AddListener(value.DownloadPath, HandleMsg);
- DownloadResManager.Instance.DownLoad(data);
- Debug.Log(" SetData " + updateTime);
- }
- else
- {
- if (IsAB())
- LoadABModel();
- else
- TriLibModel();
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
-
- }
- private void HandleMsg(Msg msg)
- {
- Debug.Log("DGJ TemplateModel ");
- if(msg.Value!=null)
- {
- if (IsAB())
- LoadABModel();
- else
- TriLibModel();
- }
- else
- {
- InstantiateCommand Command = new InstantiateCommand(
- InstantiateSystem.Instance.BlueObject.WarningPopUp,
- InstantiateSystem.Instance.BlueObject.NetErrorText);
- CommandSystem.Instance.Send(Command);
- Debug.LogError(" 模型下载失败 ");
- }
- }
- private bool IsAB()
- {
- bool finish = false;
- string fileName = Path.GetFileName(Data.localLoadPath);
- Debug.Log("HJJ fileName===>"+ fileName);
- if(fileName.Contains(".ghb") ||!fileName.Contains("."))
- {
- finish = true;
- }
- return finish;
- }
- private void LoadABModel()
- {
- AssetBundle ab = AssetBundle.LoadFromFile(Data.localLoadPath);
- if (ab == null)
- {
- Debug.Log("Failed to load AssetBundle!");
- return;
- }
- var prefab = ab.LoadAsset<GameObject>(ab.LoadAllAssets<GameObject>()[0].name);
- m_ModelObj = Instantiate(prefab, transform);
- ab.Unload(false);
- ManipulationHandler manipulation = gameObject.AddComponent<ManipulationHandler>();
- manipulation.enabled = false;
- BoundingBox boundingBox = gameObject.AddComponent<BoundingBox>();
- boundingBox.enabled = false;
- }
-
-
-
-
-
- public bool ExtractZipFile(string zipFilePath)
- {
- bool isAB=false;
- if(!zipFilePath.Contains(".zip"))
- {
- return false;
- }
- Debug.Log("ExtractZipFile===>1");
- using (ZipArchive archive = ZipFile.OpenRead(zipFilePath))
- {
- byte[] ghbbytes = null;
- byte[] csbytes = null;
- Debug.Log("ExtractZipFile===>2");
- foreach (ZipArchiveEntry entry in archive.Entries)
- {
- Debug.Log("ExtractZipFile==FullName=>2" + entry.FullName);
- if (entry.FullName.Contains(".ghb") || !entry.FullName.Contains(".")|| entry.FullName.Contains(".bytes"))
- {
- isAB = true;
- if (entry.Name != "")
- {
- entry.ExtractToFile(Application.persistentDataPath+"/"+ entry.FullName,true);
- FileInfo finfo = new FileInfo(Application.persistentDataPath + "/" + entry.FullName);
- byte[] bytes= readbytes(finfo.OpenRead());
- if (!entry.FullName.Contains(".bytes"))
- {
- ghbbytes = bytes;
- }
- else
- {
- csbytes = bytes;
- }
- }
- }
- }
- if(isAB)
- {
- Debug.Log("ExtractZipFile===>3");
- if (csbytes != null)
- {
- Debug.Log("ExtractZipFile===>4");
- Assembly.Load(csbytes);
- }
- if (ghbbytes!=null)
- {
- Debug.Log("ExtractZipFile===>5");
- AssetBundle ab = AssetBundle.LoadFromMemory(ghbbytes);
- var prefab = ab.LoadAsset<GameObject>(ab.LoadAllAssets<GameObject>()[0].name);
- m_ModelObj = Instantiate(prefab, transform);
- ab.Unload(false);
- ManipulationHandler manipulation = gameObject.AddComponent<ManipulationHandler>();
- manipulation.enabled = false;
- BoundingBox boundingBox = gameObject.AddComponent<BoundingBox>();
- boundingBox.enabled = false;
- }
- }
-
- return isAB;
- }
- }
- public byte[] readbytes(Stream stream)
- {
- using (Stream fs = stream)
- {
- byte[] bytes = new byte[fs.Length];
- fs.Read(bytes, 0, bytes.Length);
- fs.Close();
- return bytes;
- }
- }
- public void TriLibModel()
- {
- Debug.Log("模型加载完成TriLibModel" + Data.localLoadPath);
- if (false)
- {
- }
- else
- {
- Debug.Log("模型加载完成TriLibModel" + Data.localLoadPath);
- TriLibModelLoad.Load(Data.localLoadPath, (AssetLoaderContext ac) => {
- Debug.Log("模型加载完成");
- }, (AssetLoaderContext ac) => {
- Debug.Log("载材质加完成");
- Bounds bounds = GetAllBounds.GetRendererBounds(ac.RootGameObject);
- GameObject obj = new GameObject("Test");
- obj.transform.position = bounds.center;
- obj.transform.SetParent(ac.RootGameObject.transform);
- float bizhi = 0.4f / bounds.size.x;
- ac.RootGameObject.transform.localScale = Vector3.one * bizhi;
- ac.RootGameObject.transform.SetParent(this.transform);
- ac.RootGameObject.transform.localPosition = Vector3.zero - obj.transform.position ;
- ac.RootGameObject.SetActive(true);
-
- m_ModelObj = Instantiate(ac.RootGameObject, transform);
- ManipulationHandler manipulation = gameObject.AddComponent<ManipulationHandler>();
- manipulation.enabled = false;
- BoundingBox boundingBox = gameObject.AddComponent<BoundingBox>();
- boundingBox.enabled = false;
- ac.RootGameObject.SetActive(false);
- if (m_ModelObj && m_ModelObj.GetComponent<Animation>())
- {
- Debug.Log("Animation===>1" + m_ModelObj.name);
- Animation _animation = m_ModelObj.GetComponent<Animation>();
- List<AnimationClip> _animations = _animation.GetAllAnimationClips();
- m_ModelObj.GetComponent<Animation>().Play(_animations[0].name, PlayMode.StopAll);
- }
- }, (AssetLoaderContext ac, float f) => {
- Debug.Log("加载中==》" + f);
- }, (IContextualizedError error) => {
- Debug.Log("加载失败" + error);
- });
- }
- }
- public override void HideCollider()
- {
- base.HideCollider();
- }
- }
|