一、代码:
using UnityEngine; using System.Collections; /// <summary> /// 选项卡二 /// </summary> [System.Serializable] public class Item { public Texture icon; public string name;//key name public int amount;//数量 public string itemName; /// <summary> /// 处理ItemName /// </summary> public void SetUpItemName() { int iLength = this.name.Length + this.amount.ToString().Length; if (iLength < 25) { while (this.name.Length < 17) { this.name += " "; } } if (iLength < 10) { itemName = this.name + " " + this.amount; } else { itemName = this.name + this.amount; } } /// <summary> /// 获得ItemName /// </summary> /// <returns></returns> public string GetItemName() { return itemName; } } public class myTest : MonoBehaviour { #region 选项卡2 Rect rItemBox = new Rect(237, 67, 360, 247); Rect rTipBox = new Rect(237, 330, 360, 107); Rect rItemsBox = new Rect(257, 350, 340, 87); Rect rTipButton = new Rect(257, 350, 340, 87); Rect rVerScroll = new Rect(600, 87, 20, 227); float fScrollPos = 1.0f; Vector2 scrollPosition = Vector2.zero;//写Vector2(0, 0)的简码 Vector2 scrollPosition2 = Vector2.zero; Vector2 scrollPosition3 = Vector2.zero; public Item[] items; Item currentItem; int inToolItem = 0; #endregion /// <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; /// <summary> /// 选项卡中的图片位置 /// </summary> Rect imgRect = new Rect(19, 35, 225, 441); #region 个性化Box控件 Rect stateBox = new Rect(237, 67, 360, 147); Rect weaponBox = new Rect(237, 230, 360, 147); public Texture box1; public Texture box2; public Texture box3; Rect box1Rect = new Rect(252, 77, 331, 125); Rect box2Rect = new Rect(252, 244, 331, 125); Rect box3Rect = new Rect(460, 284, 117, 125); #endregion #region 实现Status窗口 选项卡一 GUIContent guiWeaponCon = new GUIContent(); GUIContent guiArmorCon = new GUIContent(); GUIContent guiAccessCon = new GUIContent(); GUIContent guiSkillCon = new GUIContent(); Rect weaponLable = new Rect(252, 240, 180, 40); Rect armorLable = new Rect(252, 340, 180, 40); Rect accessLable = new Rect(252, 360, 180, 40); Rect skillLable = new Rect(252, 288, 180, 40); string uneuip = "Hello"; Rect hpLabel = new Rect(313, 70, 120, 25); Rect mpLabel = new Rect(313, 102, 120, 25); Rect lvLabel = new Rect(313, 120, 120, 25); Rect expLabel = new Rect(313, 150, 120, 25); Rect nextLabel = new Rect(313, 176, 120, 25); Rect atkLabel = new Rect(529, 71, 50, 25); Rect defLabel = new Rect(529, 100, 50, 25); Rect agiLabel = new Rect(529, 120, 50, 25); Rect intLabel = new Rect(529, 150, 50, 25); Rect lucLable = new Rect(529, 180, 50, 25); int fullHP = 9999; int fullMP = 99999; int hp = 9999; int mp = 999; int lv = 90; int exp = 1000; int next = 909; int atk = 123; int def = 345; int agi = 444; int ints = 666; int luc = 8888; #endregion #region 选项卡3 Rect equipBox = new Rect(237, 67, 360, 207); Rect equipWeanponBox = new Rect(237, 280, 360, 157); Rect statTextureEquip = new Rect(252, 81, 331, 142); Rect skillBoxEquip = new Rect(460, 121, 127, 125); Rect[] equipRect = { new Rect(252, 101, 180, 40), new Rect(252, 161, 180, 40), new Rect(252, 221, 180, 40), new Rect(252, 281, 180, 40) }; Rect equipWindow = new Rect(500, 0, 70, 100); //Vector2 scrollPosition = Vector2.zero; bool[] equipBool = new bool[4]; int inToolWeapons = 0; int inToolArmors = 0; int inToolAccess = 0; int inToolSkill = 0; public Texture tStatusBox1; public Texture tStatusBox2; public Texture tSkillBox; public Item[] weapons; public Item[] armors; public Item[] access; public Texture[] skills; Item currentWeapon; Item currentArmors; Item currentAccess; Texture currentSkill; #endregion // Use this for initialization void Start() { isOpenMenu = false; guiWeaponCon = new GUIContent(uneuip); guiArmorCon = new GUIContent(uneuip); //guiAccessCon = new GUIContent(uneuip); //位置 要调节下 目前位置有点错位 guiSkillCon = new GUIContent(uneuip); //选项卡一初始化 if (items.Length > 0) { items[0].SetUpItemName(); currentItem = items[0]; } } // Update is called once per frame void 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,否则返回value myWindow.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); //end GUI.DragWindow();//拖动窗口 #region 实现Status窗口 switch (toolsCount) { case 0: StatusWindow(); break; case 1: ItemWindow(); break; case 2: EquipWindow(); break; default: break; } #endregion } /// <summary> /// 选项卡一 /// </summary> void StatusWindow() { GUI.Box(stateBox, ""); GUI.Box(weaponBox, "");//['wepən] n. 武器,兵器 GUI.DrawTexture(box1Rect, box1); GUI.DrawTexture(box2Rect, box2); //GUI.Box(equipBox, ""); //GUI.Box(equipWeanponBox, ""); //GUI.DrawTexture(statTextureEquip, tStatusBox2); //GUI.DrawTexture(skillBoxEquip, tSkillBox); GUI.DrawTexture(box3Rect, box3); GUI.Label(hpLabel, hp.ToString() + "/" + fullHP.ToString(), "TextAmount"); GUI.Label(mpLabel, mp.ToString() + "/" + fullMP.ToString(), "TextAmount"); GUI.Label(lvLabel, lv.ToString(), "TextAmount"); GUI.Label(expLabel, exp.ToString(), "TextAmount"); GUI.Label(nextLabel, next.ToString(), "TextAmount"); GUI.Label(atkLabel, atk.ToString(), "TextAmount"); GUI.Label(defLabel, def.ToString(), "TextAmount"); GUI.Label(agiLabel, agi.ToString(), "TextAmount"); GUI.Label(intLabel, ints.ToString(), "TextAmount"); GUI.Label(lucLable, luc.ToString()); GUI.Label(weaponLable, guiWeaponCon, "TextItem"); GUI.Label(armorLable, guiArmorCon, "TextItem"); GUI.Label(accessLable, guiAccessCon, "TextItem"); GUI.Label(skillLable, guiSkillCon, "TextItem"); } /// <summary> /// 选项卡二 /// </summary> void ItemWindow() { int inItems = 8; GUI.Box(rItemBox, ""); GUI.Box(rTipBox, ""); //定义纵向滚动条 scrollPosition = GUI.BeginScrollView(new Rect(257, 87, 320, 200), scrollPosition, new Rect(0, 0, 280, 40 * inItems)); GUIContent[] itemsContent = new GUIContent[inItems]; for (int i = 0; i < inItems; i++) { if (items.Length > 0) { if (i == 0) { itemsContent[i] = new GUIContent(currentItem.itemName, currentItem.icon, "Test Hello World Hello WorldHello WorldHello WorldHello World ********************"); } else { itemsContent[i] = new GUIContent(currentItem.itemName, currentItem.icon, "This key is" + i); } } else { itemsContent[i] = new GUIContent("None", ""); } } inToolItem = GUI.SelectionGrid(new Rect(0, 0, 280, 40 * inItems), inToolItem, itemsContent, 1, GUI.skin.GetStyle("SelectedItem"));//SelectionGrid()选择表格,创建一个网格按钮 GUI.EndScrollView(); //下部分滚动条 string sInfos = itemsContent[inToolItem].tooltip; if (string.IsNullOrEmpty(sInfos)) { sInfos = "show items information here "; } GUIStyle style = GUI.skin.GetStyle("label"); if (GUI.tooltip != "") { float fHeight = style.CalcHeight(new GUIContent(GUI.tooltip), 330.0f);//计算高度 scrollPosition2 = GUI.BeginScrollView(new Rect(257, 343, 320, 75), scrollPosition2, new Rect(0, 0, 280, fHeight)); GUI.Label(new Rect(0, 0, 280, fHeight), GUI.tooltip); } else { float fHeight = style.CalcHeight(new GUIContent(sInfos), 330.0f);//计算高度 scrollPosition2 = GUI.BeginScrollView(new Rect(257, 343, 320, 75), scrollPosition2, new Rect(0, 0, 280, fHeight)); GUI.Label(new Rect(0, 0, 280, fHeight), sInfos); } GUI.EndScrollView(); } /// <summary> /// 选项卡3 /// </summary> void EquipWindow() { GUI.Box(equipBox, ""); GUI.Box(equipWeanponBox, ""); GUI.DrawTexture(statTextureEquip, tStatusBox2); GUI.DrawTexture(skillBoxEquip, tSkillBox); SetupEuiqipBox(); } void SetupEuiqipBox() { GUIContent[] equipContent = { guiWeaponCon, guiArmorCon, guiAccessCon, guiSkillCon }; for (int i = 0; i < equipBool.Length; i++) { if (equipBool[i]) { GUI.Label(equipRect[i], equipContent[i], "DisabledClick "); switch (i) { case 0: ShowWeapon(); break; case 1: ShowArmor();//['ɑ:mə] 装甲;盔甲; break; case 2: ShowAccess(); break; case 3: ShowSkill(); break; default: break; } } else { if (GUI.Button(equipRect[i], equipContent[i], "SelectedItem")) { equipBool[i] = true; for (int j = 0; j < equipBool.Length; j++) { if (i != j) { equipBool[j] = false; } } } } } } void ShowWeapon() { int inItems = 6; GUIContent[] itemsContent = new GUIContent[inItems]; for (int i = 0; i < inItems; i++) { if (i == 0) { itemsContent[i] = new GUIContent(uneuip, ""); } else { itemsContent[i] = new GUIContent(weapons[0].name, weapons[0].icon, ""); } } scrollPosition3 = GUI.BeginScrollView(new Rect(257, 300, 320, 120), scrollPosition3, new Rect(0, 0, 280, 40 * inItems)); inToolWeapons = GUI.SelectionGrid(new Rect(0, 0, 280, 40 * inItems), inToolWeapons, itemsContent, 1, GUI.skin.GetStyle("SelectedItem")); GUI.EndScrollView(); guiWeaponCon = itemsContent[inToolWeapons]; } void ShowArmor() { int inItems = 6; GUIContent[] itemsContent = new GUIContent[inItems]; for (int i = 0; i < inItems; i++) { if (i == 0) { itemsContent[i] = new GUIContent(uneuip, ""); } else { itemsContent[i] = new GUIContent(armors[0].name, armors[0].icon, ""); } } scrollPosition3 = GUI.BeginScrollView(new Rect(257, 300, 320, 120), scrollPosition3, new Rect(0, 0, 280, 40 * inItems)); inToolArmors = GUI.SelectionGrid(new Rect(0, 0, 280, 40 * inItems), inToolWeapons, itemsContent, 1, GUI.skin.GetStyle("SelectedItem")); GUI.EndScrollView(); guiWeaponCon = itemsContent[inToolArmors]; } void ShowAccess() { int inItems = 6; GUIContent[] itemsContent = new GUIContent[inItems]; for (int i = 0; i < inItems; i++) { if (i == 0) { itemsContent[i] = new GUIContent(uneuip, ""); } else { itemsContent[i] = new GUIContent(access[0].name, access[0].icon, ""); } } scrollPosition3 = GUI.BeginScrollView(new Rect(257, 300, 320, 120), scrollPosition3, new Rect(0, 0, 280, 40 * inItems)); inToolAccess = GUI.SelectionGrid(new Rect(0, 0, 280, 40 * inItems), inToolWeapons, itemsContent, 1, GUI.skin.GetStyle("SelectedItem")); GUI.EndScrollView(); guiWeaponCon = itemsContent[inToolAccess]; } void ShowSkill() { int inItems = 6; GUIContent[] itemsContent = new GUIContent[inItems]; for (int i = 0; i < inItems; i++) { if (i == 0) { itemsContent[i] = new GUIContent(tSkillBox); } else { itemsContent[i] = new GUIContent(skills[i-1]); } } scrollPosition3 = GUI.BeginScrollView(new Rect(253, 286, 330, 140), scrollPosition3, new Rect(0, 0, 600, 117)); inToolSkill = GUI.SelectionGrid(new Rect(0, 4, 600, 117), inToolWeapons, itemsContent, inItems, GUI.skin.GetStyle("SelectedItem")); GUI.EndScrollView(); if (inToolSkill != 0) { guiSkillCon = itemsContent[inToolSkill]; } else { guiSkillCon = new GUIContent(""); } } }
二、有问题的效果
有个问题,还没解决就是GUI.Button() 没有执行,所以看下面效果就没有出来。。。
三、断点调式:
就是没有进入到Button方法下去。
怎么解决呢???
断点调式: