Unity3D笔记六 GUI游戏界面

1、Label:标签控件,可以在游戏中用来展示文本字符串信息,不仅可以写字还可以贴图片。

2、Button:按钮控件,一般分图片按钮和普通的按钮,还有一个连续按钮RepeatButton注意,这个在WebForm里面是没有的。

Ps:用GUI.Button(new Rect(10,200,70,30),"文字按钮" )来添加按钮时这个方法是有返回值的bool类型;

3、TextField:主要用于监听用户输入的信息。

    Ps:GUI.TextField(),返回用户输入的字符串信息,GUI.PasswordField()

4、ToolBar:用于创建工具栏,以Tab页面形式来展示,选择任意一项后可返回所选的ID。

  

 5、Slider控件

  基本知识:Slider控件由滑块与滑动条组成;按展示方式划分为:水平滑动条(HorizontalSlider [ˌhɔriˈzɔntəl] adj.),垂直滑动条(VerticalSlider[ˈvɜ:tɪkl]adj. 垂直的,竖立的 ),二者之间的用法基本相同;

  作  用:常使用滑动条来调节音量或者颜色等

6、ScrollView控件 =>相当于webform中的滚动条

  使用条件:若游戏界面中的GUI控件过多,超出了屏幕的显示范围,就需要使用ScrollView控件来完成它的展示效果。

 7、群视图:GroupView控件

  1、群组视图(GroupView控件)可将多个视图全部放在一个群组当中。将视图添加进群组当中后,群组中任何视图的坐标都是相对坐标,它是相对群组视图左上角的坐标。

    2、使用GUI.BeginGroup()方法可以创建一个群组视图,但是必须以GUI.EndGroup()方法结束群组视图

 8、窗口

  窗口在游戏开发中并不陌生,所有视图都需要依赖窗口来显示,我们可以把窗口理解为视图的父类。 游戏视图,它们都属于窗口的子类。游戏界面可以由若干个窗口组成,窗口又由若干个视图组成。 

9、GUI Skin 为控件添加漂亮的皮肤

  在Project视图中点击“Create”→“GUI Skin”菜单项,创建一个GUI Skin。使用GUI Skin,可以修改任何系统提供的控件皮肤。

 

 Font:可设置系统字体或者自定义字体。
 Box:可设置盒子的显示皮肤。
 Button:可设置按钮的显示皮肤。
 Toggle:可设置选择框的显示皮肤。['tɒɡl]
 Label:可设置文本框的显示皮肤。
 Text Field:可设置输入框的显示皮肤。
 Text Area:可设置多行输入框的显示皮肤。
 Window:可设置窗口的显示皮肤。
 Horizontal Slider:可设置水平滚动条的显示皮肤。[ˌhɔriˈzɔntəl] 
 Horizontal Slider Thumb:可设置水平滚动条上滑动块的显示皮肤。['slaɪdə(r)]n. 滑雪者,滑冰者;
 Vertical Slider:可设置垂直滑动条的显示皮肤。[ˈvɜ:tɪkl]
 Vertical Slider Thumb:可设置垂直滑动条上滑动块的显示皮肤。[θʌm]n.
 Horizontal Scrollbar:可设置水平滚动条的显示皮肤。
 Horizontal Scrollbar Thumb:可设置水平滚动条上滑块的显示皮肤。
 Horizontal Scrollbar Left Button:可设置水平滚动条左边按钮的显示皮肤。[skrəʊl]
 Horizontal Scrollbar Right Button:可设置水平滚动条右边按钮的显示皮肤。
 Vertical Scrollbar:可设置垂直滚动条的显示皮肤。
 Vertical Scrollbar Thumb:可设置垂直滚动条上滑块的显示皮肤。
 Vertical Scrollbar Up Button:可设置垂直滚动条上边按钮的显示皮肤。
 Vertical Scrollbar Down Button:可设置垂直滚动条下边按钮的显示皮肤。
 Scroll View:可设置滚动视图的显示皮肤。
 Custom Styles:自定义风格显示皮肤。
 Settings:一些其他设置。

学习宣老师的《Unity3D游戏开发》,老师用到是js写的,我这边C# 经运行暂时么发现问题 

using UnityEngine;
using System.Collections;

public class Csharp3_1 : MonoBehaviour
{

    #region 只有公有变量才可以在编辑器中以拖曳对象或输入的形式赋值。
    /// <summary>
    /// 接收外部赋值字符串
    /// </summary>
    public string str = string.Empty;
    /// <summary>
    /// 接收外部赋值贴图
    /// </summary>
    public Texture imageTexture;
    #endregion

    /// <summary>
    /// 贴图宽度
    /// </summary>
    private int imageWidth;
    /// <summary>
    /// 贴图高
    /// </summary>
    private int imageHeight;
    /// <summary>
    /// 当前屏幕宽度
    /// </summary>
    private int screenWidth;
    /// <summary>
    /// 当前屏幕高度
    /// </summary>
    private int screenHeight;

    //时间计数器
    private int frameTime;


    public Texture2D buttonTexture;

    #region TextField
    private string userName;
    private string pwd;
    private string message;
    #endregion

    #region ToolBar

    //工具栏选择按钮的ID
    private int sltID;

    //工具栏显示按钮的字符串
    private string[] barResource;

    //选择按钮是否被按下
    private bool sltToggle0, sltToggle1;
    #endregion

    #region 5、Slider
    //定义成公共的,否则滚动条无法拖动
    public float verticalValue = 0.0f;//垂直、纵向滑动条【ˈvə:tikəl]
    public float horizontalValue = 0.0f;//横向滑动条 [ˌhɔriˈzɔntəl]
    #endregion

    #region 6 ScrollView
    public Vector2 scrollPostion2;
    #endregion

    #region 7 GroupView
    //贴图
    public Texture2D texture1;
    public Texture2D texture2;
    #endregion
    
    #region 8窗口
    //默认窗口位置
    Rect window1 = new Rect(20, 20, 200, 200);
    Rect window2 = new Rect(260, 20, 200, 200);
    #endregion

    #region 9GUISkin
    public GUISkin guiSkin;//自定义皮肤
    private bool isSelect = false;//单选控件是否被选中
    public Rect rect = new Rect(20, 20, 120, 50);//拖动窗口的位置
    public string guiString = "请输入文字";
    #endregion


    // Use this for initialization
    /// <summary>
    /// 该方法只执行一次,所以需要将初始化的相关代码都放在Start()方法中
    /// </summary>
    void Start()
    {
        ////得到屏幕宽高
        screenWidth = Screen.width;
        screenHeight = Screen.height;

        ////得到图片宽高
        imageHeight = imageTexture.height;
        imageWidth = imageTexture.width;

        str = "请您点击按钮";

        #region TextField
        userName = "请输入您的姓名";
        pwd = "请输入密码";
        message = "请输入正确的用户名及密码!";

        #endregion

        #region ToolBar

        sltID = 0;
        barResource = new string[] { "第一个工具栏", "第二个工具栏", "第三个工具栏", "第四个工具栏" };
        sltToggle0 = false;
        sltToggle1 = false;

        #endregion

        #region 6 ScrollView
        //初始化滚动条位置 
        scrollPostion2 = new Vector2(50, 50);
        #endregion
         
    }

    // Update is called once per frame
    void Update()
    {

    }
    /// <summary>
    /// 界面绘制方法,所有GUI的绘制都需要在这个方法中实现
    /// </summary>
    private void OnGUI()
    {
        //将文字内容显示在屏幕中
        //GUI.Label(new Rect(100, 10, 100, 30), str);
        //GUI.Label(new Rect(100, 40, 100, 30), "当前屏幕宽:" + screenWidth);
        //GUI.Label(new Rect(100, 70, 100, 30), "当前屏幕高:" + screenHeight);
        ////将贴图显示在屏幕中
        //GUI.Label(new Rect(100, 100, imageWidth, imageHeight), imageTexture);



        #region Button
        //if (GUI.Button(new Rect(10, 50, buttonTexture.width, buttonTexture.height), buttonTexture))
        //{
        //    //点击按钮修改提示信息
        //    str = "您点击了图片按钮";
        //}


        ////设置按钮中文字的颜色
        //GUI.color = Color.blue;
        ////设置按钮的背景色
        //GUI.backgroundColor = Color.red;
        //if (GUI.Button(new Rect(10, 200, 70, 30), "文字按钮"))
        //{
        //    //点击按钮修改提示信息
        //    str = "您点击了文字按钮";
        //}



        //GUI.color = Color.yellow;
        ////设置按钮的背景色
        //GUI.backgroundColor = Color.white;


        //if (GUI.RepeatButton(new Rect(10, 250, 100, 30), "按钮按下中"))
        //{
        //    //点击按钮修改提示信息
        //    str = "按钮按下中的时间:" + frameTime;
        //    frameTime++;
        //}
        #endregion

        #region TextField

        //GUI.Label(new Rect(10,10,Screen.width,40),message );
        //if (GUI.Button(new Rect(10,120,100,50),"登录" ))
        //{
        //    message = "您输入的用户名为:" + userName + ";您输入的密码为:" + pwd;
        //}

        //GUI.Label(new Rect(10,40,50,30),"用户名:" );
        //GUI.Label(new Rect(10,80,50,30),"密  码:" );

        //GUI.TextField(new Rect(70, 40, 200, 30), userName, 10);
        //GUI.PasswordField(new Rect(70, 80, 200, 30), pwd ,  '*' ,12);

        #endregion

        #region ToolBar

        //var oldSltID = sltID;
        ////重新计算本次工具栏选择的ID
        //sltID = GUI.Toolbar(new Rect(10, 10, barResource.Length*100, 30), sltID, barResource);//默认选择哪个
        ////如果两次选择的是不同的工具栏,将选择按钮全部释放掉
        //if (oldSltID!=sltID)
        //{
        //    sltToggle0 = false;
        //    sltToggle1 = false;
        //}
        ////根据工具栏选择的ID显示不同的信息
        //switch (sltID)
        //{
        //    case 0:
        //        sltToggle0 = GUI.Toggle(new Rect(10, 50, 150, 30), sltToggle0, "第一个工具栏单项选择——1");
        //        sltToggle0 = true;//是否选中
        //        sltToggle1 = GUI.Toggle(new Rect(10, 80, 150, 30), sltToggle1, "第一个工具栏单项选择——2");
        //        break;
        //    case 1:
        //        sltToggle0 = GUI.Toggle(new Rect(10, 50, 150, 30), sltToggle0, "第二个工具栏单项选择——1");
        //        sltToggle1 = GUI.Toggle(new Rect(10, 80, 150, 30), sltToggle1, "第二个工具栏单项选择——2");
        //        break;
        //    case 2:
        //        sltToggle0 = GUI.Toggle(new Rect(10, 50, 150, 30), sltToggle0, "第三个工具栏单项选择——1");
        //        sltToggle1 = GUI.Toggle(new Rect(10, 80, 150, 30), sltToggle1, "第三个工具栏单项选择——2");
        //        break;
        //    case 3:
        //        sltToggle0 = GUI.Toggle(new Rect(10, 50, 150, 30), sltToggle0, "第四个工具栏单项选择——1");
        //        sltToggle1 = GUI.Toggle(new Rect(10, 80, 150, 30), sltToggle1, "第四个工具栏单项选择——2");
        //        break;
        //}
        #endregion

        #region 5 Slider
        //verticalValue = GUI.VerticalSlider(new Rect(25, 25, 30, 100), verticalValue, 100, 0);//计算滑动进度
        //horizontalValue = GUI.HorizontalSlider(new Rect(50, 25, 100, 30), horizontalValue, 0.0f, 100.0f);
        //GUI.Label(new Rect(10, 150, Screen.width, 30), "纵向滑动条当前进度:" + verticalValue + "%");
        //GUI.Label(new Rect(10, 180, Screen.width, 30), "横向滑动条当前进度向滑动条当前进度:" + horizontalValue + "%");
        #endregion

        #region 6 ScrollView
        ////开始滚动视图
        //Vector2 vector2  = GUI.BeginScrollView(new Rect(0, 0, 200, 200), scrollPostion2, new Rect(0, 0, Screen.width, 300), true, true);
        //GUI.Label(new Rect(100,40,Screen.width,30),"测试滚动视图,测试滚动视图,测试滚动视图,测试滚动视图。" );
        ////结束滚动视图
        //GUI.EndScrollView();
        #endregion

        #region 7GroupView
        ////开始这个群组
        //GUI.BeginGroup(new Rect(10, 50, 200, 400));//创建一个群组视图,但是必须以GUI.EndGroup()方法结束群组视图
        ////显示贴图,坐标为相对群组的点(10,50)的坐标
        //GUI.DrawTexture(new Rect(10,20,texture1.width,texture1.height),texture1 );
        ////标签提示信息
        //GUI.Label(new Rect(10, 150, 100, 40), "群组视图1");
        ////按钮
        //GUI.Button(new Rect(10, 190, 100, 40), "按钮1");
        ////结束这个群组
        //GUI.EndGroup();


        ////开始第二个群组 同上
        //GUI.BeginGroup(new Rect(300,0,500,400));
        //GUI.DrawTexture(new Rect(10,20,texture2.width,texture2.height),texture2 );
        //GUI.Label(new Rect(10, 150, 100, 40), "群组视图2");
        //GUI.Button(new Rect(10, 190, 100, 40), "按钮2");  
        //GUI.EndGroup(); 
        #endregion

        #region 8窗口

        //GUI.Window(1, window1, OneWindow, "我是第一个窗口");
        //GUI.Window(2, window2, TwoWindow, "我是第二个窗口");

        #endregion

        #region 9GUISkin

        GUI.skin = guiSkin;//设置GUI皮肤为自定义皮肤
        GUI.Button(new Rect(100, 100, 100, 100), "自定义按钮");
        isSelect = GUI.Toggle(new Rect(10, 50, 100, 30), isSelect, "单选按钮");////单项选择
        guiString = GUI.TextField(new Rect(200, 10, 200, 20), guiString, 100);//输入框
        rect = GUI.Window(111, rect, GuiWindow, "GUI窗口");//注册窗口

        #endregion
    }
    /// <summary>
    /// 窗口1
    /// </summary>
    /// <param name="id"></param>
    private void OneWindow(int id)
    {
        GUI.Box(new Rect(10, 50, 150, 50), "这个窗口的ID是:" + id);
        if (GUI.Button(new Rect(10, 120, 150, 50), "普通按钮1"))
        { 
            Debug.Log("窗口ID = " + id + "按钮被点击");
        }
    }
    /// <summary>
    /// 窗口2
    /// </summary>
    /// <param name="id"></param>
    private void TwoWindow(int id)
    {
        GUI.Box(new Rect(10, 50, 150, 50), "这个窗口的ID是:" + id);
        if (GUI.Button(new Rect(10,120,150,50),"普通按钮2" ))
        {
            Debug.Log("窗口ID = " + id + "按钮被点击");
        }
    }
    /// <summary>
    /// 9GUI窗口
    /// </summary>
    /// <param name="id"></param>
    private void GuiWindow(int id)
    {
        GUI.DragWindow();//创建一个可以自由拖动的窗口
        GUI.Button(new Rect(10, 10, 100, 30), "拖动的窗口按钮");
    }
}


作者:PEPE
出处:http://pepe.cnblogs.com/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

原文地址:https://www.cnblogs.com/PEPE/p/3484859.html