在使用Unity3d開發一個簡易的聊天程序時,需要在客戶端顯示聊天記錄列表,做為一個初學者,開發這個功能具然快用了兩天了。最后通過調一個參數解決了。這里記錄一下,希望對新手有所幫助。
最終的顯示效果是這樣的:
項目結構如圖所示:
項目中的StartPanel是用來輸入昵稱和連接服務器用的,這里先不用管它。ChatPanel中實現了聊天歷史列表記錄和聊天消息的發送。
開發步驟如下所示:
-
添加ChatPanel,做為聊天內容管理的Panel界面。
-
在ChatPanel下面添加聊天信息輸入框ChatInputField
-
在ChatPanel下面添加一個Scroll View ,它的參數面板如下所示:
-
給Scroll View->Viewport->Content添加Content Size Filter和Vertical Layout Group,參數如下所示:
-
然后添加如下腳本,這里的思路是每一條聊天記錄都會動態加載到一個Text組件中,這方便處理不同組件顯示的內容。
// Update is called once per frame
void Update()
{
if (Input.GetKeyDown(KeyCode.Return) || Input.GetKeyDown(KeyCode.KeypadEnter))
{
if (chatInput.text != "")
{
string username = Player.GetInstance().NickName;
string addText = "\n " + "<color=red>" + username + "</color>: " + chatInput.text;
GameObject textShowPanel = showPannel.gameObject;
GameObject chatTextArea = (GameObject)Instantiate(Resources.Load("ChatTextArea"));
chatTextArea.transform.SetParent(textShowPanel.transform, false);
Text text = chatTextArea.GetComponent<Text>();
text.text = addText;
chatInput.text = "";
chatInput.ActivateInputField();
//強制更新,如果滾動條顯示了,讓滾動條始終在最低下。
Canvas.ForceUpdateCanvases();
scrollRect.verticalNormalizedPosition = 0f;
Canvas.ForceUpdateCanvases();
}
}
}
關注下面的公眾號,獲取源碼 