Browse Source

Merge branch 'F/0710_2.1+2.0' of https://gogs.ghz-tech.com:8843/GHzGlass/GHZMRNavigatorProXR into F/0710_2.1+2.0

# Conflicts:
#	ProjectSettings/ProjectSettings.asset
胡佳骏 1 year ago
parent
commit
53ace30a82

+ 1 - 1
Assets/2.0/Tools/DownLoadItem.cs

@@ -120,7 +120,7 @@ public class DownLoadItem : MonoBehaviour
             else
             {
                 Debug.Log(webRequest.isDone + "    " + webRequest.downloadHandler.data.Length);
-                Debug.LogError("Download Failed: " + webRequest.error);
+               // Debug.LogError("Download Failed: " + webRequest.error);
               
                 downLoadData = webRequest.downloadHandler.data;
                 isDownLoad = true;

+ 1 - 0
Assets/2.0/Tools/HttpAction.cs

@@ -11,6 +11,7 @@ public class HttpAction :Singleton<HttpAction>
     //private string token = "";
     public const string baseurl = "http://office.ghz-tech.com:9904/api";
     public const string baseurl20 = "https://office.ghz-tech.com:3424/api";
+    public const string baseurvideo = "https://office.ghz-tech.com:3424/";
     public const string client_snInfo = "/client/snInfo";
 
     public const string project_detail = "/project/detail";

+ 8 - 5
Assets/2.0/Tools/LoadManager.cs

@@ -7,14 +7,17 @@ using XRTool.Util;
 
 public class LoadManager : Singleton<LoadManager>
 {
-    const int maxLoad = 10;
+    const int maxLoad = 3;
     int nowLoad = 0;
     public LoadManager()
     {
         TimerMgr.Instance.CreateTimer(() => {
-            if(downloadQueueList.Count>0&& nowLoad< maxLoad)
+            Debug.Log("正在下载=ct==>   ==>" + nowLoad);
+            if (downloadQueueList.Count>0&& nowLoad< maxLoad)
             {
-                for (int i = 0; i < downloadQueueList.Count; i++)
+                int ct = downloadQueueList.Count;
+                Debug.Log("正在下载=ct==>" + ct+"   ==>" + nowLoad);
+                for (int i = 0; i < ct; i++)
                 {
                     DownLoadItem item = downloadQueueList.Dequeue();
                     Debug.Log("正在下载===>"+ item.name);
@@ -25,7 +28,7 @@ public class LoadManager : Singleton<LoadManager>
 
                     item.callback += (bool b) => {
 
-                        Debug.Log("下载完成===>" );
+                        Debug.Log("下载完成===>" + nowLoad);
                         nowLoad--;
                     };
                    GameScene.Instance.StartCoroutine( item.DownloadFile());
@@ -39,7 +42,7 @@ public class LoadManager : Singleton<LoadManager>
             }
         
         
-        }, -1);
+        }, 1,-1);
 
     }
 

+ 30 - 18
Assets/2.0/User/Model/ModelItem.cs

@@ -36,21 +36,25 @@ public class ModelItem
 
                 Debug.Log(" ModelName>>>>  " + name + "   Type    " + type);
 
-                if(modelType!= ModelType.Video)
-                LoadManager.Instance.load(this, (float f)=> {
+                if (modelType != ModelType.Video)
+                    LoadManager.Instance.load(this, (float f) =>
+                    {
 
-                   //显示加载
-                
-                
-                },(GameObject obj)=> {
+                        //显示加载
 
 
-                    obj.transform.transform.parent = _model.transform;
+                    }, (GameObject obj) =>
+                    {
 
-                    obj.transform.localPosition = Vector3.zero;
-                    obj.transform.localEulerAngles = Vector3.zero;
 
-                });
+                        obj.transform.transform.parent = _model.transform;
+
+                        obj.transform.localPosition = Vector3.zero;
+                        obj.transform.localEulerAngles = Vector3.zero;
+
+                    });
+                else
+                    SetData(null);
             }
             return _model; }
     }
@@ -160,30 +164,38 @@ public class ModelItem
 
     public void SetData(byte[] data)
     {
-        switch (type)
+        if(data ==null && modelType!= ModelType.Video)
         {
-            case 1:  // 图片
-                     // prefabModel.GetComponent<TemplateImage>().
+            Debug.LogError(name + " 未下载完成  !!!!!");
+        }
+
+        
+        switch (modelType)
+        {
+            case ModelType.Image:
                 Texture2D texture = new Texture2D(1, 1);
                 texture.LoadImage(data);
                 Sprite sprite = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), Vector2.one * 0.5f);
 
                 prefabModel.GetComponent<TemplateImage>().M_Image.sprite = sprite;
                 break;
-            case 2:  // 视频
-                prefabModel.GetComponent<TemplateVideo>().SetData(DownloadPath);
+            case ModelType.Video:
+                Debug.Log("  DownloadPath   " + DownloadPath);
+                prefabModel.GetComponent<TemplateVideo>().SetData(HttpAction.baseurvideo + DownloadPath);
                 break;
-            case 3:  // 模型
+            case ModelType.ABModel:
                 AssetBundle assetBundle = AssetBundle.LoadFromMemory(data);
                 Debug.Log(data.Length);
                 prefabModel.GetComponent<TemplateModel>().LoadModel(assetBundle);
                 break;
-            case 4:  // 文字
-                prefabModel.GetComponent<TemplateText>().SetData(textContent , TextBJ);
+            case ModelType.Text:
+                prefabModel.GetComponent<TemplateText>().SetData(textContent, TextBJ);
                 break;
             default:
                 break;
         }
+
+      
     }
 
 }

+ 11 - 4
Assets/2.0/User/Model/ModelList.cs

@@ -2,7 +2,7 @@ using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
-public class ModelList
+public class ModelList: System.ICloneable
 {
    public int id { get; set; }
     public bool select { get; set; }
@@ -324,13 +324,13 @@ public class ModelList
                SRTitleLayout.CalLayout(material, spoit);
                 break;
             case "2":
-              //  objects = SRSectorLayout.CalLayout(material, spoit);
+                 SRSectorLayout.CalLayout(material, spoit);
                 break;
             case "3":
-               // objects = DRTitleLayout.CalLayout(material, spoit);
+                DRTitleLayout.CalLayout(material, spoit);
                 break;
             case "4":
-              //  objects = DRFanLayout.CalLayout(material, spoit,);
+                DRFanLayout.CalLayout(material, spoit);
                 break;
             case "5":
                 SRTitleLayout.CalLayout(material, spoit);
@@ -371,4 +371,11 @@ public class ModelList
         ObjectValue objectValue = new ObjectValue(id, parentid, mat.name, go, go.transform.localPosition, go.transform.localEulerAngles, go.transform.localScale);
         return objectValue;
     }
+
+    public object Clone()
+    {
+        ModelList clonedObject = (ModelList)this.MemberwiseClone();
+
+        return clonedObject;
+    }
 }

+ 40 - 18
Assets/2.0/User/Model/ModelManager.cs

@@ -8,7 +8,9 @@ public class ModelManager : Singleton<ModelManager>
 {
   //  public Dictionary<string, ModelItem> modellist = new Dictionary<string, ModelItem>();
     public Dictionary<int, ModelList> modellist = new Dictionary<int, ModelList>();
+    
     public GameObject materialLibrary;
+    private List<ModelList> Models;
     public void init(string message)
     {
         GameManager.Instance.text.text = " 获取素材列表";
@@ -26,39 +28,59 @@ public class ModelManager : Singleton<ModelManager>
         AddDicModelList(single);
         AddDicModelList(library);
         AddDicModelList(combination);
-      
+
+
+        //ModelList model = GetModelList(687);
+
+        //model.name = "AAAAAAAAA";
+        //Debug.Log(" New ModelList" + model.name + "   Old ModelList  " + modellist[687].name);
+
     }
 
     private void AddDicModelList(string message)
     {
      if (!string.IsNullOrWhiteSpace(message))
         {
-          
-            List<ModelList> ModelList = JsonConvert.DeserializeObject<List<ModelList>>(message);
-            Debug.Log(ModelList.Count + " AddDicModelList " + message);
-            for (int i = 0; i < ModelList.Count; i++)
-            {
-                ModelList[i].materalLibrary = materialLibrary.transform;
-                modellist.Add(ModelList[i].id, ModelList[i]);
-                if (ModelList[i].Model == null)
-                    Debug.Log(" 初始化 Model ");
-                for (int j = 0; j < ModelList[i].materialList.Count; j++)
-                {
-                    ModelList[i].materialList[j].init(ModelList[i].Model);
-                }
+
+            Models = JsonConvert.DeserializeObject<List<ModelList>>(message);
+            Debug.Log(Models.Count + " AddDicModelList " + message);
+            for (int i = 0; i < Models.Count; i++)
+            {            
+                modellist.Add(Models[i].id, Models[i]);          
+                StartModelList(Models[i], materialLibrary);
                 // DownLoadModel(ModelList[i]);
             }
         }
 
     }
 
+    /// <summary>
+    ///  初始化 ModelList , 根据ModelList生成组合素材
+    /// </summary>
+    /// <param name="modelList"></param>
+    /// <param name="parent"> </param>
+    public void StartModelList( ModelList modelList, GameObject parent )
+    {
 
+        modelList.materalLibrary = parent.transform;     
+        for (int j = 0; j < modelList.materialList.Count; j++)
+        {         
+            modelList.materialList[j].init(modelList.Model);
+        }
+    }
+
+    /// <summary>
+    /// 从素材库中查找指定素材
+    /// </summary>
+    /// <param name="id"> 素材ID </param>
+    /// <returns></returns>
     public ModelList GetModelList(int id)
     {
-        GameObject obj = GameObject.Instantiate(modellist[id].Model);
-        return obj.GetComponent<ModelList>();
-
-       
+        
+        if (modellist.ContainsKey(id))
+            return (ModelList)modellist[id].Clone();
+        else
+            return null;
     }
    
 

+ 113 - 1
Assets/Scripts/LayoutGroup/DRFanLayout.cs

@@ -1,4 +1,4 @@
-using SC.XR.Unity;
+using SC.XR.Unity;
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
@@ -118,6 +118,118 @@ public class DRFanLayout : MonoBehaviour
         return objectValues;
     }
 
+    public static void CalLayout(ModelList materialObls, GameObject par)
+    {
+       
+        BaseTemPlate text = new BaseTemPlate();
+        ModelItem textmat = null;
+        List<BaseTemPlate> noText = new List<BaseTemPlate>();
+        List<ObjectValue> objectValues = new List<ObjectValue>();
+
+        for (int i = 0; i < materialObls.materialList.Count; i++)
+        {
+            var mat = materialObls.materialList[i];
+            GameObject go = null;
+            switch (mat.type)
+            {
+                case (int)MaterialType.None:
+                    break;
+                case (int)MaterialType.Image:
+                    var pImage = ResMgr.Instance.Load<GameObject>("Template/Prefab/Image");
+                    go = Instantiate(pImage, par.transform);
+                    var imageitem = go.AddComponent<TemplateImage>();
+                    go.SetActive(true);
+                   // imageitem.SetData(mat, materialObls.updateTime);
+                    noText.Add(imageitem);
+                    break;
+                case (int)MaterialType.Video:
+                    var pVideo = ResMgr.Instance.Load<GameObject>("Template/Prefab/Video");
+                    go = Instantiate(pVideo, par.transform);
+                    var videoitem = go.AddComponent<TemplateVideo>();
+                    go.SetActive(true);
+                 //   videoitem.SetData(mat, materialObls.updateTime);
+                    noText.Add(videoitem);
+                    break;
+                case (int)MaterialType.Text:
+                    textmat = mat;
+                    var pText = ResMgr.Instance.Load<GameObject>("Template/Prefab/Text");
+                    go = Instantiate(pText, par.transform);
+                    var textitem = go.AddComponent<TemplateText>();
+                    go.SetActive(true);
+                  //  textitem.SetData(mat, materialObls.updateTime);
+                    text = textitem;
+                    go.SetActive(false);
+                    break;
+                default:
+                    break;
+            }
+
+            if (go != null)
+            {
+                go.name = string.IsNullOrWhiteSpace(mat.name) ? par.name + "-" + i.ToString() : mat.name;
+                go.AddComponent<EditorEventHandler>().Type = (MaterialType)(mat.type);
+                if (materialObls.select)
+                {
+                    go.transform.localPosition = mat.objectTransform.nowPos;
+                    go.transform.localEulerAngles = mat.objectTransform.nowRot;
+                    go.transform.localScale = mat.objectTransform.nowScale;
+                }
+                else
+                {
+                    go.transform.localEulerAngles = Vector3.zero;
+                    go.transform.localScale = new Vector3(1, 1, 1);
+
+                    if (mat.type != (int)MaterialType.Text)
+                    {
+                        go.transform.localPosition = Vector3.zero;
+                    }
+                    else
+                    {
+                        //Set text position
+                        if (mat.textPosition == "top")
+                        {
+                            go.transform.localPosition = new Vector3(0, 0.3f, 0);
+                        }
+                        else if (mat.textPosition == "bottom")
+                        {
+                            go.transform.localPosition = new Vector3(0, -0.3f, 0);
+                        }
+                    }
+                    mat.objectTransform.SetStartValue(go.transform.localPosition, go.transform.localEulerAngles, go.transform.localScale);
+                }
+
+                ObjectValue objectValue = new ObjectValue(i, materialObls.id, mat.name, go);
+                objectValues.Add(objectValue);
+                mat.prefabModel = go;
+                
+            }
+        }
+
+        #region 需要判断是否是第一次编辑坐标,若是则执行下方代码,不是则直接返回
+
+        if (!materialObls.select)
+        {
+            Column(noText, par);
+
+            //第一次排列后,需调整初始坐标和当前坐标保持一致
+            for (int i = 0; i < objectValues.Count; i++)
+            {
+                objectValues[i].InitTransform();
+                objectValues[i].Object.SetActive(true);
+                var go = objectValues[i].Object;
+                materialObls.materialList[objectValues[i].ID].objectTransform.SetStartValue(go.transform.localPosition, go.transform.localEulerAngles, go.transform.localScale);
+            }
+        }
+
+        if (textmat != null)
+        {
+            text.gameObject.SetActive(true);
+        }
+        #endregion
+
+       
+    }
+
     /// <summary>
     /// 根据数量排列图片或文字
     /// </summary>

+ 135 - 1
Assets/Scripts/LayoutGroup/DRTitleLayout.cs

@@ -1,4 +1,4 @@
-using SC.XR.Unity;
+using SC.XR.Unity;
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
@@ -151,6 +151,140 @@ public class DRTitleLayout : MonoBehaviour
         return objectValues;
     }
 
+    public static void CalLayout(ModelList materialObls, GameObject par)
+    {    
+        BaseTemPlate text = new BaseTemPlate();
+        ModelItem textmat = null;
+        List<BaseTemPlate> noText = new List<BaseTemPlate>();
+        List<ObjectValue> objectValues = new List<ObjectValue>();
+        if (materialObls.materialList != null || materialObls.materialList.Count > 0)
+            for (int i = 0; i < materialObls.materialList.Count; i++)
+            {
+                var mat = materialObls.materialList[i];
+                GameObject go = null;
+                switch (mat.type)
+                {
+                    case (int)MaterialType.None:
+                        break;
+                    case (int)MaterialType.Image:
+                        var pImage = ResMgr.Instance.Load<GameObject>("Template/Prefab/Image");
+                        go = Instantiate(pImage, par.transform);
+                        var imageitem = go.AddComponent<TemplateImage>();
+                        go.SetActive(true);
+                       // imageitem.SetData(mat, materialObls.updateTime);
+                        noText.Add(imageitem);
+                        break;
+                    case (int)MaterialType.Video:
+                        var pVideo = ResMgr.Instance.Load<GameObject>("Template/Prefab/Video");
+                        go = Instantiate(pVideo, par.transform);
+                        var videoitem = go.AddComponent<TemplateVideo>();
+                        go.SetActive(true);
+                      //  videoitem.SetData(mat, materialObls.updateTime);
+                        noText.Add(videoitem);
+                        break;
+                    case (int)MaterialType.Text:
+                        textmat = mat;
+                        var pText = ResMgr.Instance.Load<GameObject>("Template/Prefab/Text");
+                        go = Instantiate(pText, par.transform);
+                        var textitem = go.AddComponent<TemplateText>();
+                        go.SetActive(true);
+                       // textitem.SetData(mat, materialObls.updateTime);
+                        text = textitem;
+                        go.SetActive(false);
+                        break;
+                    default:
+                        break;
+                }
+
+                if (go != null)
+                {
+                    go.name = string.IsNullOrWhiteSpace(mat.name) ? par.name + "-" + i.ToString() : mat.name;
+                    go.AddComponent<EditorEventHandler>().Type = (MaterialType)(mat.type);
+
+                    if (materialObls.select)
+                    {
+                        go.transform.localPosition = mat.objectTransform.nowPos;
+                        go.transform.localEulerAngles = mat.objectTransform.nowRot;
+                        go.transform.localScale = mat.objectTransform.nowScale;
+
+                    }
+                    else
+                    {
+                        go.transform.localEulerAngles = Vector3.zero;
+                        go.transform.localScale = new Vector3(1, 1, 1);
+
+                        if (mat.type != (int)MaterialType.Text)
+                        {
+                            go.transform.localPosition = Vector3.zero;
+                        }
+                        else
+                        {
+                            //Set text position
+                            if (mat.textPosition == "top")
+                            {
+                                go.transform.localPosition = new Vector3(0, 0.3f, 0);
+                            }
+                            else if (mat.textPosition == "bottom")
+                            {
+                                go.transform.localPosition = new Vector3(0, -0.3f, 0);
+                            }
+                        }
+                        mat.objectTransform.SetStartValue(go.transform.localPosition, go.transform.localEulerAngles, go.transform.localScale);
+                    }
+
+                    ObjectValue objectValue = new ObjectValue(i, materialObls.id, mat.name, go);
+                    objectValues.Add(objectValue);
+
+                    mat.prefabModel = go;
+                }
+            }
+
+        #region 需要判断是否是第一次编辑坐标,若是则执行下方代码,不是则直接返回
+
+        if (!materialObls.select)
+        {
+            var count = noText.Count;
+            switch (count)
+            {
+                case 2:
+                    Column_2(noText, 2, par);
+                    break;
+                case 3:
+                    Column_3(noText);
+                    break;
+                case 4:
+                    Column_2(noText, 4, par);
+                    break;
+                case 5:
+                    Column_5(noText, par);
+                    break;
+                case 6:
+                    Column_2(noText, 6, par);
+                    break;
+                default:
+                    break;
+            }
+
+
+            //第一次排列后,需调整初始坐标和当前坐标保持一致
+            for (int i = 0; i < objectValues.Count; i++)
+            {
+                objectValues[i].InitTransform();
+                objectValues[i].Object.SetActive(true);
+                var go = objectValues[i].Object;
+                materialObls.materialList[objectValues[i].ID].objectTransform.SetStartValue(go.transform.localPosition, go.transform.localEulerAngles, go.transform.localScale);
+            }
+        }
+        if (textmat != null)
+        {
+            text.gameObject.SetActive(true);
+        }
+
+        #endregion
+
+      
+    }
+
     private static void Column_2(List<BaseTemPlate> data, int colum, GameObject game)
     {
         var scgrid = game.AddComponent<SCGridLayoutGroup>();

+ 130 - 1
Assets/Scripts/LayoutGroup/SRSectorLayout.cs

@@ -1,4 +1,4 @@
-using SC.XR.Unity;
+using SC.XR.Unity;
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
@@ -142,6 +142,135 @@ public class SRSectorLayout : MonoBehaviour
         return objectValues;
     }
 
+
+    public static void CalLayout(ModelList materialObls, GameObject par)
+    {
+       
+        BaseTemPlate text = new BaseTemPlate();
+        ModelItem textmat = null;
+        List<BaseTemPlate> noText = new List<BaseTemPlate>();
+        List<ObjectValue> objectValues = new List<ObjectValue>();
+
+        for (int i = 0; i < materialObls.materialList.Count; i++)
+        {
+            var mat = materialObls.materialList[i];
+            GameObject go = null;
+            switch (mat.type)
+            {
+                case (int)MaterialType.None:
+                    break;
+                case (int)MaterialType.Image:
+                    var pImage = ResMgr.Instance.Load<GameObject>("Template/Prefab/Image");
+                    go = Instantiate(pImage, par.transform);
+                    var imageitem = go.AddComponent<TemplateImage>();
+                    go.SetActive(true);
+                  //  imageitem.SetData(mat, materialObls.updateTime);
+                    noText.Add(imageitem);
+                    break;
+                case (int)MaterialType.Video:
+                    var pVideo = ResMgr.Instance.Load<GameObject>("Template/Prefab/Video");
+                    go = Instantiate(pVideo, par.transform);
+                    var videoitem = go.AddComponent<TemplateVideo>();
+                    go.SetActive(true);
+                    //videoitem.SetData(mat, materialObls.updateTime);
+                    noText.Add(videoitem);
+                    break;
+                case (int)MaterialType.Text:
+                    textmat = mat;
+                    var pText = ResMgr.Instance.Load<GameObject>("Template/Prefab/Text");
+                    go = Instantiate(pText, par.transform);
+                    var textitem = go.AddComponent<TemplateText>();
+                    go.SetActive(true);
+                   // textitem.SetData(mat, materialObls.updateTime);
+                    text = textitem;
+                    go.SetActive(false);
+                    break;
+                default:
+                    break;
+            }
+
+            if (go != null)
+            {
+                go.name = string.IsNullOrWhiteSpace(mat.name) ? par.name + "-" + i.ToString() : mat.name;
+                go.AddComponent<EditorEventHandler>().Type = (MaterialType)(mat.type);
+
+                if (materialObls.select)
+                {
+                    go.transform.localPosition = mat.objectTransform.nowPos;
+                    go.transform.localEulerAngles = mat.objectTransform.nowRot;
+                    go.transform.localScale = mat.objectTransform.nowScale;
+
+                }
+                else
+                {
+                    go.transform.localEulerAngles = Vector3.zero;
+                    go.transform.localScale = new Vector3(1, 1, 1);
+
+                    if (mat.type != (int)MaterialType.Text)
+                    {
+                        go.transform.localPosition = Vector3.zero;
+                    }
+                    else
+                    {
+                        //Set text position
+                        if (mat.textPosition == "top")
+                        {
+                            go.transform.localPosition = new Vector3(0, 0.3f, 0);
+                        }
+                        else if (mat.textPosition == "bottom")
+                        {
+                            go.transform.localPosition = new Vector3(0, -0.3f, 0);
+                        }
+                    }
+                    mat.objectTransform.SetStartValue(go.transform.localPosition, go.transform.localEulerAngles, go.transform.localScale);
+                }
+
+                ObjectValue objectValue = new ObjectValue(i, materialObls.id, mat.name, go);
+                objectValues.Add(objectValue);
+                mat.prefabModel = go;
+            }
+        }
+
+        #region 需要判断是否是第一次编辑坐标,若是则执行下方代码,不是则直接返回
+
+        if (!materialObls.select)
+        {
+            var count = noText.Count;
+            switch (count)
+            {
+                case 3:
+                    Column_3(noText, par);
+                    break;
+                case 4:
+                    Column_4(noText, par);
+                    break;
+                case 5:
+                    Column_5(noText, par);
+                    break;
+                default:
+                    break;
+            }
+
+
+            //第一次排列后,需调整初始坐标和当前坐标保持一致
+            for (int i = 0; i < objectValues.Count; i++)
+            {
+                objectValues[i].InitTransform();
+                objectValues[i].Object.SetActive(true);
+                var go = objectValues[i].Object;
+                materialObls.materialList[objectValues[i].ID].objectTransform.SetStartValue(go.transform.localPosition, go.transform.localEulerAngles, go.transform.localScale);
+            }
+        }
+        if (textmat != null)
+        {
+            text.gameObject.SetActive(true);
+        }
+
+        #endregion
+
+       
+    }
+
     /// <summary>
     /// 根据数量排列图片或文字
     /// </summary>

+ 3 - 0
Assets/Scripts/LayoutTemplate/TemplateVideo.cs

@@ -60,6 +60,9 @@ public class TemplateVideo : BaseTemPlate
 
     public void SetData(string url)
     {
+        Debug.Log(url);
+        if(m_VideoCtr ==null)
+            m_VideoCtr = transform.Find("Screen/Video").GetComponent<Navigator.VideoControl>();
         m_VideoCtr.VideoURL = url;
     }