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有没有变化,快要找工作了,觉得患得患失的,既不想花太多时间去解决一个问题,又觉得有好多没有学习。

时间: 2024-10-10 08:04:05

GUI使用2——总结&NGUI、tookit2D、GUI比较的相关文章

游戏引擎/GUI的设计与实现-常见GUI架构

以X Window为代表的客户/服务器架构. X Window通常是指X服务器及封装了通信协议的客户端库.服务器端主要负责输入事件的分发,窗口层次的管理,以及显示输出的处理,其它功能基本上都是在客户端实现了.我们看到的各种界面元素都是在客户端绘制的,这一部分通常称为ToolKit,应用程序开发者只需要关注ToolKit就行了.以前的ToolKit非常多,经过多年的进化和淘汰,常用的ToolKit主要是GTK+和QT两个了.X Window是非常复杂和晦涩的,以前我花了不少时间去研究用于嵌入式系统

unity3D游戏开发之GUI

转:http://blog.csdn.net/kuloveyouwei/article/details/23598171 GUI在游戏的开发中占有重要的地位,游戏的GUI是否友好,使用是否方便,很大程度上决定了玩家的游戏体验.Unity内置了一套完整地GUI系统,提供了从布局.控件到皮肤的一整套GUI解决方案,可以做出各种风格和样式的GUI界面.在Unity中使用GUI来完成GUI的绘制工作,目前Unity没有提供内置的GUI可视化编辑器,因此GUI界面的制作需要全部通过编写脚本代码来实现,如果

[转]unity3D游戏开发之GUI

转自:http://blog.csdn.net/kuloveyouwei/article/details/23598171 GUI在游戏的开发中占有重要的地位,游戏的GUI是否友好,使用是否方便,很大程度上决定了玩家的游戏体验.Unity内置了一套完整地GUI系 统,提供了从布局.控件到皮肤的一整套GUI解决方案,可以做出各种风格和样式的GUI界面.在Unity中使用GUI来完成GUI的绘制工作,目前 Unity没有提供内置的GUI可视化编辑器,因此GUI界面的制作需要全部通过编写脚本代码来实现

05 GUI UGUI

在Unity开发过程中,不论是3D还是2D开发都需要大量的UI界面来配合使用,用来达到更好的效果 GUI:在Unity脚本生命周期回调方法OnGUI中实现,每一帧渲染两次,在OnGUI中的GUI界面元素布局分为自动布局和自定义布局GUI自定义布局常用方法:方法调用格式: GUI.方法名(); 在使用自定义GUI布局的时候,每一个GUI控件都需要用代码去设置控件位置信息,在确定控件位置时会用到布局结构体Rect(x,y,width,height) GUI自动布局自动布局的类为GUILayout,使

第14篇-JAVA GUI编程

第14篇-JAVA GUI编程 每篇一句 :道路一开始开辟的时候总是存在障碍的 初学心得: 原本下定决心才能开始的事情也变得理所当然 (笔者:JEEP/711)[JAVA笔记 | 时间:2017-04-25| JAVA GUI编程 ] 1.什么是界面 图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面 与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受 2.Java 基础类 JFC 的基本

GUI之动态颜色图形

import java.awt.*; //存放了Graphics import javax.swing.*; //JFrame所在,包含以许多J开头的控件 import java.awt.event.*; //各种“事件” public class SimpleGui3C implements ActionListener { JFrame frame; public static void main(String[] args) { SimpleGui3C gui = new SimpleGu

Python GUI with Tkinter (from youtube) 在youtube上能找到很多编程视频...

Python GUI with Tkinter - 1 - Introduction以上链接是一个python tkinter视频系列的第一讲的链接.虽然英语不好,但是,程序还是看得懂的(照着做就可以了),所以找不到中文视频时看下这些英语视频也是可以的. 以下是我在看视频过程中的练习, 可以在python2.7下运行. 001: hello,world: from Tkinter import Label, Tk root = Tk() thelabel = Label(root, text="

Qt 平台中使GUI保持响应流畅

如何使Qt 平台中的GUI保持响应流畅?一般来说耗时较长的操作,分为计算密集型操作和IO密集型操作,对于这两类操作如何提高响应速度. 而从操作的本质上来说,操作又可分为不可分解操作,如在第三方库中耗时较长的操作,以及可分解操作,其中可分解操作又可细分为串行操作和可并行操作,如何针对这几类操作来提高响应速度呢? 如何将异步的操作,如网络库中异步的读取数据方法,变成同步的操作? 此外对于多线程,普遍的看法是可以提供程序的运行速度,其实不然,不正确地使用线程常常会使程序变慢,那么在QT中是否可以通过多

matlab gui基础

1.从最简单的开始      编程最基本的目的就是--我执行一个操作,程序做出一个反应.       "一个操作"包括:点击鼠标,拖动滑块,填写数据,选择选项-- "做出一个反应"包括:计算一些东西,然后储存在哪里,或者贴个图出来,或者显示在哪里----------------------------------------------------------------------------------------------------------------