public void Initialize(bool displayFrontLine, bool isFrontLine, int defaultCount, string defaultLabel, List <WeaponSelectionSection> weaponSelections) { IsFrontLine.gameObject.SetActive(displayFrontLine); if (displayFrontLine) { IsFrontLine.isOn = isFrontLine; } int yPos = -5; GameObject defaultLine = Instantiate(NumberPickerPrefab, new Vector3(0, yPos, 0), Quaternion.identity, Pane.transform); defaultLine.GetComponent <RectTransform>().anchoredPosition = new Vector2(0, yPos); _default = defaultLine.GetComponent <NumberPicker>(); _default.MakeInteractable(false); _default.OnValueChanged.AddListener(NumberPicker_OnValueChanged); int availableCount = defaultCount; //_default.CurrentValue = defaultCount; _default.Label.text = defaultLabel; _default.MaxValue = defaultCount; _default.DoChildrenSubtract = true; // it'd be cleaner to get the height from the prefab's rect transform yPos -= 50; _selections = new List <NumberPicker>(); foreach (WeaponSelectionSection section in weaponSelections) { GameObject sectionHeader = Instantiate(NumberPickerPrefab, new Vector3(0, yPos, 0), Quaternion.identity, Pane.transform); sectionHeader.GetComponent <RectTransform>().anchoredPosition = new Vector2(0, yPos); var middle = sectionHeader.GetComponent <NumberPicker>(); middle.MakeInteractable(false); middle.CurrentValue = section.CurrentCount; middle.MaxValue = section.MaxCount; middle.Label.text = section.Label + " (max " + section.MaxCount + ")"; middle.DoChildrenSubtract = false; _default.AddChild(middle); yPos -= 25; foreach (Tuple <string, int> weapon in section.Selections) { GameObject leaf = Instantiate(NumberPickerPrefab, new Vector3(0, yPos, 0), Quaternion.identity, Pane.transform); leaf.GetComponent <RectTransform>().anchoredPosition = new Vector2(0, yPos); var picker = leaf.GetComponent <NumberPicker>(); picker.MakeInteractable(true); picker.CurrentValue = weapon.Item2; availableCount -= weapon.Item2; picker.MaxValue = picker.CurrentValue + section.MaxCount - section.CurrentCount; picker.Label.text = weapon.Item1; middle.AddChild(picker); yPos -= 25; } yPos -= 25; } _default.CurrentValue = availableCount; }