protected void Init(RectTransform _rectTransform, ObservableList <TYPE> _dataProvider, params GameObject[] _prefabs) { ViewComponent = _rectTransform.gameObject.AddComponent <ViewComponent>(); DataProvider = _dataProvider; RenderedDataList = new List <TYPE>(); ListItemInfoQueueByPrefabName = new Dictionary <string, Queue <ListItemInfo> >(); ViewComponent.ScrollEvent += OnScroll; RegisterEvents(); ListItemRendererPool = new SimpleGameObjectPool(); PrefabByName = new Dictionary <string, GameObject>(); PrefabSizeByName = new Dictionary <string, Vector2>(); foreach (GameObject prefab in _prefabs) { if (PrefabByName.ContainsKey(prefab.name) == false) { PrefabByName.Add(prefab.name, prefab); var rectTransform = prefab.GetComponent <RectTransform>(); PrefabSizeByName.Add(prefab.name, rectTransform.rect.size); } } }
private void InitScrollView() { RectTransform itemTemplateLine = testData.itemTemplateLine; poolEdge = new SimpleGameObjectPool(itemTemplateLine.gameObject, 100); float lineHeight = itemTemplateLine.rect.height; foreach (var edge in testData.edges) { Vector2 pos0 = testData.nodes[edge[0]]; Vector2 pos1 = testData.nodes[edge[1]]; Vector2 pos = 0.5f * (pos0 + pos1); float length = Vector2.Distance(pos0, pos1); float rot = Vector2.SignedAngle(pos1 - pos0, Vector2.right); var handle = scrollRect.AddChild( () => { GameObject go = poolEdge.Get(); go.transform.SetParent(this.scrollRect.content, false); RectTransform r = go.GetComponent <RectTransform>(); Vector2 size = r.rect.size; size.x = length; r.sizeDelta = size; Vector3 angles = r.localEulerAngles; angles.z = rot; r.localEulerAngles = angles; r.SetAsFirstSibling(); return(r); }, (rect) => { poolEdge.Recycle(rect.gameObject); }, (pos0 + pos1) * 0.5f, new Vector2(length, lineHeight), rot); edgeHandles.Add(handle); } RectTransform itemTemplateIcon = testData.itemTemplateIcon; poolIcon = new SimpleGameObjectPool(itemTemplateIcon.gameObject, 100); Vector2 iconSize = itemTemplateIcon.rect.size; foreach (var iconPos in testData.nodes) { var handle = scrollRect.AddChild( () => { GameObject go = poolIcon.Get(); go.transform.SetParent(this.scrollRect.content, false); RectTransform r = go.GetComponent <RectTransform>(); r.SetAsLastSibling(); return(r); }, (rect) => { poolIcon.Recycle(rect.gameObject); }, iconPos, iconSize, 0); iconHandles.Add(handle); } scrollRect.SetDirty(true); scrollRect.normalizedPosition = new Vector2(0, 0.5f); }