Unity3D笔记 GUI 一

要实现的功能:

  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 initialization
    void Start()
    {

    }

    // 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();//拖动窗口 
    }

}
复制代码

 

posted @   PEPE YU  阅读(584)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示