- Home /
Add a gui layout into a scroll view
if(isinoptions == 8){ var data : HostData[] = MasterServer.PollHostList(); // Go through all the hosts in the host list for (var element in data) { GUILayout.BeginHorizontal(); GUILayout.Space(20); var name = element.gameName + " " + element.connectedPlayers + " / " + element.playerLimit; GUILayout.Label(name); GUILayout.Space(5); var hostInfo; hostInfo = "["; for (var host in element.ip) hostInfo = hostInfo + host + ":" + element.port + " "; hostInfo = hostInfo + "]"; GUILayout.Label(hostInfo); GUILayout.Space(5); GUILayout.Label(element.comment); GUILayout.Space(5); GUILayout.FlexibleSpace(); if (GUILayout.Button("Connect")) { connectStatus="Connecting"; // Set NAT functionality based on the host information Network.useNat=!Network.HavePublicAddress; if (Network.useNat) print("Using Nat punchthrough to connect to host"); else print("Connecting directly to host"); Network.Connect(element.ip, element.port); } GUILayout.EndHorizontal(); } if (data.length>0){ serverFoundStatus=data.length+" Servers Found"; } if (data.length==0){ serverFoundStatus="No public servers found yet"; } GUI.Label(Rect(25,220,300,300),connectStatus); GUI.Label(Rect(25,240,300,300),serverFoundStatus); if (GUI.Button (Rect (25,200,100,20), "Refresh List")) { connectStatus="Refreshing Master server list on ip :"+MasterServer.ipAddress; //MasterServer.ClearHostList(); MasterServer.RequestHostList("StealthReduxCoop");
} if (GUI.Button (Rect (125,200,50,20), "Back")){ isinoptions=0;
} }
i have this code right here , what i want to do is explained in the image below , currently it can get out of the screen if a lot of servers are present
Answer by Bampf · Sep 13, 2010 at 05:29 PM
You can wrap the for-loop (that walks the list of servers) with a ScrollView.
Adding a ScrollView to what you already have will probably only require 3 lines of code: a BeginScrollView and an EndScrollView, plus the declaration of the Vector2 that holds the current position scrolled to. Plenty of examples in the docs.
It's going to end up looking something like this. I inserted three new lines (not including comments) marked with "//@@".
// New variable; should go near the top of the file. It belongs to the whole class, // not inside OnGUI(). var scrollPos : Vector2; //@@
function OnGUI() { // .. .. if (isinoptions == 8) { scrollPos = GUILayout.BeginScrollView (scrollPos, false/alwaysShowHoriz/, true /alwaysShowVert/); //@@
// Go through all the hosts in the host list
for (var element in data)
{
GUILayout.BeginHorizontal();
GUILayout.Space(20);
var name = element.gameName + " " + element.connectedPlayers + " / " + element.playerLimit;
// .. rest of for-loop code ..
}
GUILayout.EndScrollView (); //@@
if (data.length>0){
serverFoundStatus=data.length+" Servers Found";
}
// etc
There are other options you can pass to BeginScrollView; see the docs for more.
Hope this helps, but if this still doesn't address your issue, feel free to clarify with a comment or by adding details to your original question.
sorry , i was busy throughout the week so i didnt got the chance to respond , i mentioned scrollviews but i do not know much about layout coding so i was asking to learn more about it
I added an (untested) example of what the code might look like.