public Chat(string name, string firstMsg, GameObject obj) { ChatObject = obj; ChatName = name; Messages.Add(("msg", firstMsg)); chatNameText = obj.transform.GetChild(1).GetChild(0).GetComponent <Text>(); previewText = obj.transform.GetChild(1).GetChild(1).GetComponent <Text>(); ChatObject.GetComponent <Button>().onClick.AddListener(delegate { activeChatName = name; instance.isTyping.text = $"{name} is typing..."; ChatList.ForEach(A => A.active = false); active = true; instance.MessagePanel.SetActive(true); for (int i = instance.MessageHolder.childCount - 1; i >= 0; i--) { Destroy(instance.MessageHolder.GetChild(i).gameObject); } Messages.ForEach(A => { GameObject msg; switch (A.Item1) { case "msg": msg = Instantiate(instance.MessageFromPrefab, instance.MessageHolder, false); break; case "r": msg = Instantiate(instance.MessageToPrefab, instance.MessageHolder, false); break; case "img": msg = Instantiate(instance.MessageImgPrefab, instance.MessageHolder, false); //IMAGE break; default: msg = new GameObject(); break; } Text msgText = msg.transform.GetChild(0).GetChild(0).GetComponent <Text>(); msgText.text = A.Item2; msgText.GetComponent <ContentSizeFitter>().SetLayoutVertical(); msg.GetComponent <LayoutElement>().minHeight = 60 + (msgText.transform as RectTransform).sizeDelta.y; Button copyBtn = msg.transform.GetChild(0).GetChild(1).GetComponent <Button>(); copyBtn.onClick.AddListener(delegate { TextEditor te = new TextEditor(); te.text = A.Item2; te.SelectAll(); te.Copy(); }); }); }); chatNameText.text = name; previewText.text = string.Join(string.Empty, firstMsg.Take(20)) + "..."; }