/// <summary> /// 从缓存池中加载对象 /// </summary> /// <param name="prefab"></param> /// <param name="set"></param> /// <returns></returns> private GameObject GetPreviewFromPool(GameObject prefab, PreviewSet set) { GameObject instence = null; if (pool.ContainsKey(prefab) && pool[prefab].Count > 0) { instence = pool[prefab].Dequeue(); if (instence) { SetTranform(instence.transform, set); instence.gameObject.SetActive(true); } } return(instence); }
/// <summary> /// 内部创建预制体 /// </summary> /// <param name="prefab"></param> /// <param name="set"></param> /// <returns></returns> private static GameObject CreatePreviewInternal(GameObject prefab, PreviewSet set) { var renderObjs = prefab.GetComponentsInChildren <Renderer>(); var instence = new GameObject(prefab.name); if (renderObjs.Length > 0) { foreach (var item in renderObjs) { var render = Object.Instantiate(item); render.transform.SetParent(instence.transform); } } SetTranform(instence.transform, set); ScaleInstence(instence, prefab); instence.transform.SetParent(actionSystem.transform); return(instence); }
/// <summary> /// 激活匹配点 /// </summary> /// <param name="pickedUp"></param> public static void TryActiveLinkPorts(LinkItem pickedUp) { var linkItems = GameObject.FindObjectsOfType <LinkItem>(); var linkPorts = new List <PreviewSet>(); for (int i = 0; i < pickedUp.ChildNodes.Count; i++) { var node = pickedUp.ChildNodes[i]; if (node.ConnectedNode == null && node.connectAble.Count > 0) { for (int j = 0; j < node.connectAble.Count; j++) { var info = node.connectAble[j]; var otheritem = (from x in linkItems where (x != null && x != pickedUp && x.Name == info.itemName) select x).FirstOrDefault(); if (otheritem != null) { var otherNode = otheritem.ChildNodes[info.nodeId]; if (otherNode != null && otherNode.ConnectedNode == null) { Debug.Log("在" + otheritem + "的" + info.nodeId + "端口上显示出 + " + pickedUp); var set = new PreviewSet(); LinkUtil.GetWorldPosFromTarget(otheritem, info.relativePos, info.relativeDir, out set.position, out set.eulerAngle); linkPorts.Add(set); } } } } } if (linkPorts.Count > 0) { previewCtrl.Notice(pickedUp.Body, linkPorts.ToArray()); } }
/// <summary> /// 设置物体的坐标 /// </summary> /// <param name="obj"></param> /// <param name="set"></param> public static void SetTranform(Transform obj, PreviewSet set) { obj.transform.position = set.position; obj.transform.eulerAngles = set.eulerAngle; }