要实现的功能:
1、个性化Windows界面
2、减少个性化的背景图片尺寸
3、个性化样式ExitButton和TabButton
4、实现三个选项卡窗口
一、个性化Windows界面
1.1、创建一个空的GameObject、在Project中新建GUI Skin 用于绘制Windows图片
1.2 GUI Skin设置
1.3效果 按M键盘 弹出Windows窗口
二、减少个性化的背景图片尺寸
因GUISkin中图片我们用的是大图片这个在游戏中不但占资源对性能也有影响,和WebForm中相似的是都可以通过样式来使用小图片来完成大图片的功能。Unity3D也不例外:
效果很不好,设置下即可,按下面图片的尺寸
OK
三、个性化样式ExitButton和TabButton
3.1
3.2、效果
3.3、TabButton
四、实现三个选项卡窗口
4.1、效果出来了 不过不美观(代码见下有具体注释)
4.2、设置
4.3、再看看效果
五、最终效果
代码:
using UnityEngine; using System.Collections;public class myTest : MonoBehaviour {/// <summary>/// 是否打开窗口/// </summary>bool isOpenMenu = false;/// <summary>/// 窗体的大小和位置【矩形】/// </summary>Rect myWindow = new Rect(10, 10, 640, 480);/// <summary>/// GUI Skin/// </summary>public GUISkin customSkin;/// <summary>/// 关闭按钮/// </summary>Rect closeButton = new Rect(598, 8, 26, 22);/// <summary>/// 用于工具栏在屏幕上的矩形位置/// </summary>Rect tabButton = new Rect(35, 15, 490, 40);/// <summary>/// 选项卡索引号/// </summary>int toolsCount = 0;/// <summary>/// 显示在工具栏按钮上的字符串数组/// </summary>string[] toolsName = { "选项卡1", "选项卡2", "选项卡3" };/// <summary>/// 选项卡中的图片/// </summary>public Texture img;Rect imgRect = new Rect(19, 35, 225, 441);// Use this for initializationvoid Start(){}// Update is called once per framevoid Update(){if (Input.GetKey(KeyCode.M))//当通过名称指定的按键被用户按住时返回true {isOpenMenu = true;}}void OnGUI(){GUI.skin = customSkin;if (isOpenMenu){int windowId = 0;myWindow = GUI.Window(windowId, myWindow, WindowFunction, "Hello Window");#region Mathf.Clamp 限制// 限制value的值在min和max之间, 如果value小于min,返回min。 如果value大于max,返回max,否则返回valuemyWindow.x = Mathf.Clamp(myWindow.x, 0, Screen.width - myWindow.width);// [klæmp] vt.& vi. 夹紧,夹住;锁住;把(砖等)堆高myWindow.y = Mathf.Clamp(myWindow.y, 0, Screen.height - myWindow.height);#endregion}}void WindowFunction(int windowId){//begin 关闭按钮if (GUI.Button(closeButton, "", GUI.skin.GetStyle("closeButton"))){isOpenMenu = false;//单击关闭按钮:窗口菜单关闭 }//end//beign 选项卡//返回int类型,被选择按钮的索引号toolsCount = GUI.Toolbar(tabButton, toolsCount, toolsName, GUI.skin.GetStyle("tabButton"));//工具栏//end//begin 选项卡图片 GUI.DrawTexture(imgRect, img);//endGUI.DragWindow();//拖动窗口 }}