- Home /
Ingame Chat script
Hi, I found this script in one of unity demo projects...
GUI.FocusControl("Chat input field"); }
function OnGUI () { GUI.skin = skin;
//if (GUILayout.Button(showChat ? "Hide Chat" : "Display Chat"))
if (GUI.Button(new Rect(Screen.width-100, Screen.height-30, 90, 20), showChat ? "Hide Chat" : "Display Chat"))
{
// Focus first element
if (showChat)
{
CloseChatWindow ();
}
else
{
showChat = true;
FocusControl();
}
}
if (showChat)
window = GUI.Window (1, window, GlobalChatWindow, "Chat");
}
function GlobalChatWindow (id : int) {
var closeButtonStyle = GUI.skin.GetStyle("close_button");
if (GUI.Button(Rect (4, 4, closeButtonStyle.normal.background.width, closeButtonStyle.normal.background.height), "", "close_button"))
{
CloseChatWindow();
}
// Begin a scroll view. All rects are calculated automatically -
// it will use up any available screen space and make sure contents flow correctly.
// This is kept small with the last two parameters to force scrollbars to appear.
scrollPosition = GUILayout.BeginScrollView (scrollPosition);
for (var entry : ChatEntry in entries)
{
GUILayout.BeginHorizontal();
if (!entry.mine)
{
GUILayout.FlexibleSpace ();
GUILayout.Label (entry.text, "chat_rightaligned");
}
else
{
GUILayout.Label (entry.text, "chat_leftaligned");
GUILayout.FlexibleSpace ();
}
GUILayout.EndHorizontal();
GUILayout.Space(3);
}
// End the scrollview we began above.
GUILayout.EndScrollView ();
if (Event.current.type == EventType.keyDown && Event.current.character == "\n" && inputField.Length > 0)
{
//@TODO: This should be dependent on who actually sent the message
//var mine = entries.Count % 2 == 0;
ApplyGlobalChatText(inputField, 1);
networkView.RPC("ApplyGlobalChatText", RPCMode.Others, inputField, 0);
inputField = "";
}
GUI.SetNextControlName("Chat input field");
inputField = GUILayout.TextField(inputField);
GUI.DragWindow();
}
@RPC function ApplyGlobalChatText (str : String, mine : int) { var entry = new ChatEntry(); entry.sender = "Not implemented"; entry.text = str; if (mine == 1) entry.mine = true; else entry.mine = false;
entries.Add(entry);
if (entries.Count > 50)
entries.RemoveAt(0);
scrollPosition.y = 1000000;
}
Don't know how to use it or apply it yet... Can someone please help?
Answer by Tarun · Nov 10, 2010 at 10:02 PM
I believe you are talking about the Chat folder in Networking.zip that's out there in http://unity3d.com/support/resources/example-projects/networking-example
This folder comes with a demo scene called "test". If you open that, it'll tell you how this chat script is used. Essentially, you need an empty gameobject with this script added and with NetworkView. Create another empty gameobject with ConnectGUI script for initiating server/client. And you are good to go with a chat scene (using Unity's in-built networking; I'm assuming you've a PRO or 30 day license.)
I did the same as the demo, except that the demo has the window with the typing form... I don't! I replaced all missing components and stuff but I don't have the type box to type in!
When I do that, why appears to me the message:"$$anonymous$$issingReferenceException: The object of type 'Texture2D' has been destroyed but you are still trying to access it.". It is supposed that the Texture2D is being taken from the GUIStyle, isn't it?. I suppose that the code lacks of something or needs something more...
Your answer
Follow this Question
Related Questions
BeginScrollView question on auto increasing 1 Answer
Unity freezes when changing GUI.Color.a 1 Answer
Re Enable C# script on camera 1 Answer
Create GUI button in update function? 3 Answers
Quick help on a gui script. 1 Answer