using SC.XR.Unity; using System.Collections; using System.Collections.Generic; using UnityEngine; /// /// 双排扇形 /// public class DRFanLayout : MonoBehaviour { public static List CalLayout(MaterialObl materialObls, GameObject par, out MaterialObl newmaterial) { 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 (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.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); } } #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; } /// /// 根据数量排列图片或文字 /// /// 图片和视频列表 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); data[2].transform.localPosition += new Vector3(0, 0, -0.2f); data[2].transform.localRotation = Quaternion.Euler(0, 30, 0); data[3].transform.localPosition += new Vector3(0, 0, -0.2f); data[3].transform.localRotation = Quaternion.Euler(0, -30, 0); data[5].transform.localPosition += new Vector3(0, 0, -0.2f); data[5].transform.localRotation = Quaternion.Euler(0, 30, 0); } }