Beispiel #1
0
    public void AddMessage(string nick, string message)
    {
        GameObject go;

        if (items.Count == historySize)         // первое сообщение ставим в конец
        {
            go = items[0];
            go.transform.SetParent(null);
            items.RemoveAt(0);
            //Destroy(i);
            print("reuse chat item");
        }
        else             // если не достигли истории, то создаём
        {
            go = Instantiate(Prefabs.Me.MsgItem) as GameObject;
        }

        var v           = scrollRect.verticalNormalizedPosition;
        var scrollToEnd = (v < 0.01f);

        items.Add(go);
        go.transform.SetParent(chatArea);
        go.transform.localScale    = Vector3.one;
        go.transform.localRotation = Quaternion.identity;
        go.transform.localPosition = Vector3.zero;

        var txt = go.transform.Find("Text").GetComponent <Text>();

        message  = Smiles.Replace(message);
        txt.text = message;

        txt = go.transform.Find("Nick").GetComponent <Text>();
        if (nick != null)
        {
            txt.text = nick;
        }
        else
        {
            txt.gameObject.SetActive(false);
        }

        if (scrollToEnd)
        {
            // если скроллим сразу после добавления элемента, то ничего не происходит
            // нужно подождать немного
            Invoke("ScrollChatToEnd", 0.1f);
        }
    }