using SC.XR.Unity; using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 单排平铺 /// public class SRTitleLayout : MonoBehaviour { /// /// 根据素材数量对物体进行布局组合 /// 忽略文字类型 /// /// 素材 /// 素材父物体,景点 /// public static List CalLayout(MaterialObl materialObls, GameObject par, out MaterialObl newmaterial,string type ="1") { newmaterial = materialObls; BaseTemPlate text = new BaseTemPlate(); List noText = new List(); MaterialObjValue textmat = null; List objectValues = new List(); for (int i = 0; i < materialObls.materialList.Count; i++) { var mat = materialObls.materialList[i]; GameObject go = null; switch (int.Parse(mat.type)) { case (int)MaterialType.None: break; case (int)MaterialType.Image: var pImage = ResMgr.Instance.Load("Template/Prefab/Image"); go = Instantiate(pImage, par.transform); var imageitem = go.AddComponent(); go.SetActive(true); imageitem.SetData(mat, materialObls.updateTime); noText.Add(imageitem); break; case (int)MaterialType.Video: var pVideo = ResMgr.Instance.Load("Template/Prefab/Video"); go = Instantiate(pVideo, par.transform); var videoitem = go.AddComponent(); go.SetActive(true); videoitem.SetData(mat, materialObls.updateTime); noText.Add(videoitem); break; case (int)MaterialType.Text: textmat = mat; var pText = ResMgr.Instance.Load("Template/Prefab/Text"); go = Instantiate(pText, par.transform); var textitem = go.AddComponent(); 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().Type = (MaterialType)(int.Parse(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 (int.Parse(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.6f, 0); } else if (mat.textPosition == "bottom") { go.transform.localPosition = new Vector3(0, -0.6f, 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); } } #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; newmaterial.materialList[objectValues[i].ID].ObjectTransform.SetStartValue(go.transform.localPosition, go.transform.localEulerAngles, go.transform.localScale); } if(type !="1") // 判断是不是巨幕 { if (objectValues.Count > 0) { objectValues[0].Object.transform.parent.localScale=new Vector3(3,3,3); } } } if (textmat != null) { text.gameObject.SetActive(true); } #endregion return objectValues; } /// /// 根据素材数量对物体进行布局组合 /// 忽略文字类型 /// /// 素材 /// 素材父物体,景点 /// public static void CalLayout(ModelList materialObls, GameObject par) { BaseTemPlate text = new BaseTemPlate(); List noText = new List(); ModelItem textmat = null; List objectValues = new List(); 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("Template/Prefab/Image"); go = Instantiate(pImage, par.transform); var imageitem = go.AddComponent(); go.SetActive(true); // imageitem.SetData(mat, materialObls.updateTime); noText.Add(imageitem); break; case (int)MaterialType.Video: var pVideo = ResMgr.Instance.Load("Template/Prefab/Video"); go = Instantiate(pVideo, par.transform); var videoitem = go.AddComponent(); go.SetActive(true); // videoitem.SetData(mat, materialObls.updateTime); noText.Add(videoitem); break; case (int)MaterialType.Text: textmat = mat; var pText = ResMgr.Instance.Load("Template/Prefab/Text"); go = Instantiate(pText, par.transform); var textitem = go.AddComponent(); 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().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); } 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); } } if (textmat != null) { text.gameObject.SetActive(true); } #endregion } /// /// 排列顺序 /// /// /// public static void Column(List data, GameObject game) { var scgrid = game.AddComponent(); scgrid.IsIgnoreInactiveObj = true; scgrid.LayoutType = LayoutTypes.Vertical; scgrid.Rows = 1; scgrid.SpaceX = 0.7f; scgrid.RefreshInfo(); Destroy(scgrid); } }