【Unity】GUI(二)

早过忘川 提交于 2020-02-10 23:56:07

上一章介绍了GUI的基础概念:什么是GUI、GUI的两种模式(immediate mode, retained mode)。本章详细介绍如何使用基于retained mode 的GUI编辑系统。

1. 创建Canvas

Canvas是一切GUI元件的基础,所有的GUI都必须附在Canvas上(Unity官方原文是All UI elements must be children of a GameObject that has a Canvas component attached.)。

Canvas有三种渲染模式

  1. Screen Space - Overlay
    所有的UI元件都渲染在屏幕视野的最顶层(没有相机时,Canvas上的UI也能照常渲染)。无论相机对准何处、摄影角度如何、与Canvas的距离有多远,UI的大小样貌会一直保持不变(因为与相机不相关,without reference with camera),屏幕大小、分辨率改变了,UI也会跟着自动调整适应(automaitcally rescale to fit)。

    特点:
    (1)UI大小不会受相机的影响,屏幕大小、分辨率改变时UI能自动缩放以适应。
    (2)UI不会被游戏内物体遮挡

  2. Sreen Space - Camera
    UI元件大小不会因相机远近、拍摄位置、角度而改变(原理是Canvas会随着相机的变化而相应调整,比如相机远离Canvas时,Canvas则自动缩短与相机的距离,相机改变角度了,Canvas则自动调整角度迎合相机)。但是在该模式下,如果没有相机,UI就不会被渲染,另外,当有物体在Canvas的前面时会遮挡UI。

    特点:
    (1)UI大小不会受相机影响,屏幕大小、分辨率改变时UI能自动缩放以适应。
    (2)UI能被游戏内物体遮挡
    (3)适合用于制作沉浸式UI

  3. World Space
    正如其名,该模式下的Canvas是融入整个游戏世界的,它就像游戏中的一个物体, 非常适合制作沉浸式UI。处于World Space模式的Canvas受相机设置的影响,在屏幕上的大小受拍摄距离和角度的影响,能被游戏中的物体遮挡。

特点:
(1)UI大小会受相机拍摄距离、角度影响
(2)UI能被游戏内物体遮挡、穿透
(3)适合用于制作沉浸式UI

2. 布置UI元件

UI元件种类很多,有文本、按钮、图片、输入框、滑动条、下拉菜单等。

UI元件众多、功能各不相同,但每个开发者都需要回答的最基本、最重要的问题是放置问题外观问题,也就是“放在何处”和“看起来如何”。

  1. 放置问题
    在编辑UI位置时可以用往常的Position tool (默认快捷键W)在这里插入图片描述,也可以使用对于UI更方便的Rect tool (默认快捷键T)在这里插入图片描述。调整UI大小可以用往常的Scale tool (默认快捷键R)在这里插入图片描述,同样地,也能使用更为便捷的Rect tool。

    所有UI元件都有Anchor,正如其名,它的作用是让物体保持在与Anchor point的一个相对位置上,这在游戏屏幕大小改变时很有用,例如无论如何拉伸游戏屏幕,都让某UI保持在距离右上角10个单位的位置(这就是“锚”的作用)。
    Anchor
    打开UI元件Inspector中的Anchor Presets可以设置锚定位置,也可以在Scene视窗中拖动Anchor。Anchor Presets中除了能用left, right, top, bottom, center设置锚定位置外,还能通过stretch设置UI是否随屏幕拉伸而改变大小。这些概念实际操作一番后更容易理解。
    在这里插入图片描述

  2. 外观问题
    默认UI的外观可能不能满足你的需求,你可以使用图片、材质,更改颜色、字体来定制你的UI。这些设置在Inspector中都可以方便的更改。

    UI是玩家与游戏交互的关键,是玩家最频繁接触的部分之一,必须用心对待,从细节做起。不同字体的选用能营造不同的氛围。这里分享一些关于字体的帖子:
    有哪些值得推荐的字体? - 邵云蛟的回答 - 知乎
    有哪些值得推荐的英文字体? - M udo的回答 - 知乎
    以及字体下载网站:
    求一个干净的字体下载网址? - 知乎

    我也试验了一下帖子中分享的字体,效果很出众:
    在这里插入图片描述在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!