• GUI使用2——总结&NGUI、tookit2D、GUI比较


    使用GUI实现窗体的主要代码

    using UnityEngine;
    using System.Collections;
    
    public class MyGUI : MonoBehaviour {
    
        //public Texture aaa;
        //public string bbb;
        //public int ccc;
        //public string ddd;
    
    
        
    	private bool showWindow;//控制主窗体是否打开状态
        private Rect windowRectB;//主窗体
        private Rect btnClose;//关闭按钮
        public GUISkin customSkin;//自定义皮肤
    
    
        public Texture tHero;
        public Texture status1;
        public Texture status2;
        public Texture killBox;
    
    
        private int intToobar = 0;//被选择按钮的索引号。
        private int selectionGrid = 0;//被选择表格按钮的索引号。
    
        public string[] toobarString = { "STATUS", "INVENTORY", "EQUIPMENT" };
    
        public Item[] items;
    
        private Vector2 scrollPosition = Vector2.zero;//定义滚动条的初始位置
      
        //public Item[]items; //定义item类型数组
        //private Item currentItem;
       
    	// Use this for initialization
    	void Start () 
        {
            showWindow = false;
            windowRectB = new Rect(10, 10, 680, 480);
            btnClose = new Rect(620,10,26,22);
    
            //items = new Item[2] { new Item(aaa, bbb, ccc, ddd), new Item(aaa, bbb, ccc, ddd) };
    	}
    
    	void Update () 
        {
            if (Input.GetKey(KeyCode.M))
            {
                showWindow = true;
            }
    	}
    
        void OnGUI()
        {
            GUI.skin = customSkin;
            if (showWindow)
            {
                windowRectB = GUI.Window(0, windowRectB, MyDoWindow, "", GUI.skin.GetStyle("windowRectB"));
    
    
    
                windowRectB.x = Mathf.Clamp(windowRectB.x, 0, Screen.width - windowRectB.width);//clamp限制函数,限制窗体的宽在0和creen.width - windowRectB.width之间
                windowRectB.y = Mathf.Clamp(windowRectB.y, 0, Screen.height - windowRectB.height);
            }
        }
    
        void MyDoWindow(int windowsID)
        {
            switch (intToobar)
            {
                case 0:
                    toolBar1();
                    break;
                case 1:
                    toolBar2();
                    break;
                case 2:
                    break;
            }
           
            intToobar = GUI.Toolbar(new Rect(35, 15, 490, 40), intToobar, toobarString, GUI.skin.GetStyle("myToolbar"));//绘制toolbar
            if (GUI.Button(btnClose,"", GUI.skin.GetStyle("btnClose")))//关闭窗体代码
    	    
    
    {
                showWindow = false;
    	    }
            GUI.DragWindow();//GUI.DragWindow()函数必须写在按钮代码的后头,否则会出现惊悚的事情
            GUI.DrawTexture(new Rect(19,35,225,441),tHero);//显示旁边的图片
        }
    
        void toolBar1()
        {
            GUI.Box(new Rect(237, 67, 360, 147), "");//绘制状态盒子
            GUI.Box(new Rect(237, 230, 360, 207), "");//绘制收获盒子
            GUI.DrawTexture(new Rect(252, 77, 331, 125), status1);
            GUI.DrawTexture(new Rect(252, 244, 331, 125), status2);
            GUI.DrawTexture(new Rect(460, 284, 117, 125), killBox);
    
            GUI.Label(new Rect(313, 75, 120, 25), "123");
            GUI.Label(new Rect(313, 100, 120, 25), "123");
            GUI.Label(new Rect(313, 124, 120, 25), "123");
            GUI.Label(new Rect(313, 150, 120, 25), "123");
            GUI.Label(new Rect(313, 177, 120, 25), "123");
     
        }
    
        void toolBar2()
        {
            int intItems = 8;
            GUI.Box(new Rect(237,67,360,247), "");
            GUI.Box(new Rect(237,330,360,107), "");
            //滚动条部分
            
    
            scrollPosition=GUI.BeginScrollView(new Rect(257,87,320,200),scrollPosition,new Rect(0,0,280,40*intItems));
    
            //GUIContent[] itemContent = new GUIContent[intItems];
            //for (int i = 0; i < intItems; i++)
            //{
            //    selectionGrid = GUI.SelectionGrid(new Rect(0, 0, 280, 40 * intItems), selectionGrid, itemContent, 1);
            //}
    
            
    
    
    
            GUI.EndScrollView();
        }
    }
    

      

     问题和总结:

    1 在脚本中new一个自定义变量,自定义变量中的共有变量不能显示在属性面板上

    (如果想让自定义的类的共有字段出现在属性面板上需要继承 MonoBehaviour )

    2 不明白unity中的类和自定义类的区别

    3 tookit2D使用起来比较方便,只是在添加方法上有些麻烦(见tookit2D使用3——给精灵添加GUI按钮效果),很适合制作2d游戏

    4 给GUI添加皮肤组件可以实现和NGUI一样的效果缺点:使用GUI各个模块的距离必须自己控制,给按钮添加事件要靠使用变量来控制,和C#中的事件不一样,(NGUI相当于在游戏视窗中添加了游戏对象,而GUI只是在OnGUI函数中绘制,两者可以实现的相同的效果,实现的原理不同)

    5 这几天接触自定义类和学习网络游戏相当受挫,还不清楚C#脚本和Unity脚本之间的关系,还不清楚C#的委托,接口,套接字,多线程在unity有没有变化,快要找工作了,觉得患得患失的,既不想花太多时间去解决一个问题,又觉得有好多没有学习。

  • 相关阅读:
    oracle数据库迁移---windows环境下
    Tomcat内存溢出(java.lang.OutOfMemoryError: PermGen space)
    64位win系统上面tomcat6启动不了 window不能再本地计算机启动
    linux学习之一些琐碎知识点
    mysql备份与还原
    linux学习中遇到的各种故障与解决方法
    Jmeter调试工具---Debug Sampler
    python+requests接口自动化测试框架实例详解教程
    互联网架构的演变
    面试时如何考察应聘者的素质?
  • 原文地址:https://www.cnblogs.com/lv-sally/p/4563866.html
Copyright © 2020-2023  润新知