using SC.XR.Unity; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 双排扇形 /// public class DRFanLayout : MonoBehaviour { public static List CalLayout(MaterialObl materialObls, GameObject par, out MaterialObl newmaterial) { Debug.LogError("HJJmaterialObls.select DRFanLayout " ); newmaterial = materialObls; BaseTemPlate text = new BaseTemPlate(); MaterialObjValue textmat = null; List noText = new List(); 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("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("Video"); go = Instantiate(pVideo, par.transform); var videoitem = go.AddComponent(); videoitem.autoplay = materialObls.autoplay; go.SetActive(true); videoitem.SetData(mat, materialObls.updateTime); noText.Add(videoitem); break; case (int)MaterialType.Text: textmat = mat; var pText = ResMgr.Instance.Load("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; } Debug.LogError("HJJmaterialObls.select 123 " ); if (go != null) { Debug.LogError("HJJmaterialObls.select 42121 " ); go.name = string.IsNullOrWhiteSpace(mat.name) ? par.name + "-" + i.ToString() : mat.name; go.AddComponent().Type = (MaterialType)(mat.type); if (materialObls.select) { Debug.LogError("HJJmaterialObls.select " + go.transform.name +" "+ mat.ObjectTransform.nowPos); 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, 1f, 0); } else if (mat.textPosition == "bottom") { go.transform.localPosition = new Vector3(0, -1f, 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 (textmat != null) { text.gameObject.SetActive(true); } #endregion return objectValues; } public static IEnumerator CalLayout(ModelList materialObls, GameObject par) { BaseTemPlate text = new BaseTemPlate(); ModelItem textmat = null; List noText = new List(); 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.LoadAsync("Image"); yield return pImage; go = Instantiate(pImage.asset as GameObject, 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.LoadAsync("Video"); yield return pVideo; go = Instantiate(pVideo.asset as GameObject, par.transform); var videoitem = go.AddComponent(); videoitem.autoplay = materialObls.autoplay; go.SetActive(true); // videoitem.SetData(mat, materialObls.updateTime); noText.Add(videoitem); break; case (int)MaterialType.Text: textmat = mat; var pText = ResMgr.Instance.LoadAsync("Text"); yield return pText; go = Instantiate(pText.asset as GameObject, 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); } ObjectValue objectValue = new ObjectValue(i, materialObls.id, mat.name, go); objectValues.Add(objectValue); mat.prefabModel = go; // mat.initFrist(); } } #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 } /// /// 根据数量排列图片或文字 /// /// 图片和视频列表 private static void Column(List data, GameObject game) { var scgrid = game.AddComponent(); scgrid.IsIgnoreInactiveObj = true; scgrid.LayoutType = LayoutTypes.Horizontal; scgrid.Columns = 3; scgrid.SpaceX = 0.7f; scgrid.SpaceY = 0.7f; scgrid.RefreshInfo(); Destroy(scgrid); data[0].transform.localPosition += new Vector3(0, 0, -0.2f); data[0].transform.localRotation = Quaternion.Euler(0, -30, 0); if(data.Count>2) { data[2].transform.localPosition += new Vector3(0, 0, -0.2f); data[2].transform.localRotation = Quaternion.Euler(0, 30, 0); } if(data.Count>3) { data[3].transform.localPosition += new Vector3(0, 0, -0.2f); data[3].transform.localRotation = Quaternion.Euler(0, -30, 0); } if (data.Count < 6) Debug.LogWarning("双排扇形不足六个元素图片或视频"); else { data[5].transform.localPosition += new Vector3(0, 0, -0.2f); data[5].transform.localRotation = Quaternion.Euler(0, 30, 0); } } }