• 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/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    SDN第二次作业
    SDN第一次上机作业
    SDN第一次作业
    期末作业验收
    SDN第五次上机作业
    SDN第四次上机作业
    SDN第三次作业
    SDN第三次上机作业
    SDN第二次上机作业
    SDN第二次作业
  • 原文地址:https://www.cnblogs.com/PEPE/p/3484859.html
Copyright © 2020-2023  润新知