GUI系统简介

在Unity游戏引擎中,我们可以使用多种方式实现UI界面,比如OnGUI、UGUI,以及其它GUI插件等。

OnGUI

最初,Unity内置了一套OnGUI,但是这套最老的GUI系统局限性很大,使用不方便。它的默认画风是这样的,其实挺让人印象深刻:

注:图片来自独立游戏《Kerbal Space Program》的一个叫做Mechjeb的模组。

图中的游戏界面可以说是非常复杂了,但GUI并不杂乱,而是像专业软件一样井井有条,OnGUI制作图中这种界面其实非常简单。

然而OnGUI再想扩展就困难了,而且从开发角度看,它的写法也不是很美观。最大的一个缺点,是OnGUI不是事件驱动的,而是通过MonoBehaviour中的OnGUI()生命周期函数不断的重绘,绘制的效率是很低的,这种模式也被称为Immediate Mode GUI(立即模式)。在几年前,手机的性能普遍差的情况下,更不会采用这种方式绘制UI了。

我们实际开发中,实际上OnGUI更多的被作为一种调试工具而使用,而不是正式和用户交互的GUI系统。有关OnGUI的内容,请参考/游戏引擎/Unity/Unity脚本编程相关章节。

第三方插件GUI系统

OnGUI不能满足开发需求,在UGUI出现之前,涌现出了很多优秀的GUI插件。其中NGUI(Next-Gen UI kit)是随着Unity引擎的流行,最广泛应用在各个项目中的一个第三方插件GUI系统。

$95的价格对于个人开发者来说是比较昂贵了,但NGUI在公司的历史遗留项目中可能还在广泛使用。

UGUI

在Unity4.6后,Unity正式内置了一套UGUI,并且随着Unity的发展也在不断完善,目前已经十分成熟,新项目一般都直接使用UGUI。和OnGUI不同,UGUI是基于事件的GUI框架,即Retained Mode GUI(保留模式),它的性能表现从原理上就要优于Immediate Mode。

UGUI基于Unity强大的组件系统,实现了一系列设计精良的基础组件(Image、Button等),大部分的UI功能都能以配置化的方式实现。我们实际开发中,在这些组件的基础上拼装我们自己的UI是很容易的。

有关UGUI我们将在后续章节详细介绍。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap