《Unity 3D NGUI 实战教程》一2.6 2DUI和3DUI的工作原理

简介:

本节书摘来异步社区《Unity 3D NGUI 实战教程》一书中的第2章,第2.6节,作者: 高雪峰 责编: 张涛,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.6 2DUI和3DUI的工作原理

Unity 3D NGUI 实战教程

2.6.1 2DUI的工作原理

先创建一个2DUI(创建方法上文已讲过),然后在2DUI的“根”UIRoot下创建两个精灵(创建方法后面会详解)。然后得到的效果如图2.32所示。


32

从图2.32中可以看到,创建的两个Sprite为两个按钮图片,它们的位置在UIRoot的红框(视窗)上,也就是Sprite的z轴、相机的z轴、UIRoot的z轴都为0,因为2DUI都是纯粹的2D图片按层次显示,不会出现三维立体效果,所以都是直接紧贴着视窗,只要UI控件在UIRoot的红框范围内,那么UI就能够正常显示在Game上。在Game视图中,我们看到的景象如图2.33所示。

2DUI最本质的意义是:UI摄像机是一个正交摄像机。


33

2.6.2 3DUI的工作原理

同上2.6.1小节一样,先创建一个3DUI,然后在“根”下面创建两个Sprite,得到如图2.34所示的景象。


34

从图2.34中可以看到,在3DUI下,创建的UI控件都在一个三维立体空间中,摄像机是一个透视的摄像机,这和2DUI有着截然不同的区别,因为2DUI是一个正交摄像机。

3DUI中UIRoot的坐标点如图2.34所示,是在三维空间的一个点上,这个位置是创建UI时自动定义好的,以后创建的UI控件都会自动地在这个点所在的面上生成(自动统一到UIRoot的z 轴,因为Sprite属于UIRoot的子物体),所以图2.34中UIRoot根物体和两个创建的Sprite的z 轴都为0,而Camera的z 轴为-700。

我们在图2.34生成的两个Sprite用3DUI做出的效果,在Game视图里看,和2DUI几乎是一模一样的,如图2.35所示。

但是需要注意的是,如果需要将2DUI改为3DUI,不是简单地将摄像机改为透视模式就行了,在NGUI 3.6.0以后的某些版本中,这样会导致看不到任何UI控件(这些版本的2DUI的控件和Camera、UIRoot三者在同一个z轴面上,而变成3D摄像机后是看不到和摄像机同z轴的物体),如果将3DUI的摄像机直接改为正交模式,也并不能简单地变成2DUI,因为正交相机的Size并不和NGUI默认的值一样。所以,在进行UI开发时,最好先思考一下将要使用2D还是3DUI更好。


35

2.6.3 如何判断该选择哪一种UI

上文中我们讲解了2DUI和3DUI的原理,那么在实际的项目开发中,如何来判断应该使用哪一种UI呢?有以下一些规律可以参考。

(1)新版本的NGUI对3DUI支持很好,如果3DUI和2DUI选择哪一个都行的情况下,建议选择3DUI,扩展性更强。

(2)如果出现UI不允许有远近透视的大小变化,必须选择2DUI。例如,角色头顶的血条,在人物跑远了之后如果血条并不会变小,这时血条就必须用2DUI做。

(3)如果要出现UI有三维变换的效果,例如,由远及近的变大、三维旋转等,就必须用3DUI。

(4)无法明确知道应该用哪一种UI的情况下,建议选用3DUI。

(5)不论用哪一种UI,其实本质上只是一个摄像机的区别,基本上都能实现UI效果,只是需要的处理不一样,所以,如果选择错了UI模式也不用太着急,总有很多办法来解决的。

相关文章
|
4月前
|
图形学 开发者 存储
超越基础教程:深度拆解Unity地形编辑器的每一个隐藏角落,让你的游戏世界既浩瀚无垠又细节满满——从新手到高手的全面技巧升级秘籍
【8月更文挑战第31天】Unity地形编辑器是游戏开发中的重要工具,可快速创建复杂多变的游戏环境。本文通过比较不同地形编辑技术,详细介绍如何利用其功能构建广阔且精细的游戏世界,并提供具体示例代码,展示从基础地形绘制到植被与纹理添加的全过程。通过学习这些技巧,开发者能显著提升游戏画面质量和玩家体验。
205 3
|
4月前
|
图形学 数据可视化 开发者
超实用Unity Shader Graph教程:从零开始打造令人惊叹的游戏视觉特效,让你的作品瞬间高大上,附带示例代码与详细步骤解析!
【8月更文挑战第31天】Unity Shader Graph 是 Unity 引擎中的强大工具,通过可视化编程帮助开发者轻松创建复杂且炫酷的视觉效果。本文将指导你使用 Shader Graph 实现三种效果:彩虹色渐变着色器、动态光效和水波纹效果。首先确保安装最新版 Unity 并启用 Shader Graph。创建新材质和着色器图谱后,利用节点库中的预定义节点,在编辑区连接节点定义着色器行为。
339 0
|
4月前
|
开发者 图形学 Java
揭秘Unity物理引擎核心技术:从刚体动力学到关节连接,全方位教你如何在虚拟世界中重现真实物理现象——含实战代码示例与详细解析
【8月更文挑战第31天】Unity物理引擎对于游戏开发至关重要,它能够模拟真实的物理效果,如刚体运动、碰撞检测及关节连接等。通过Rigidbody和Collider组件,开发者可以轻松实现物体间的互动与碰撞。本文通过具体代码示例介绍了如何使用Unity物理引擎实现物体运动、施加力、使用关节连接以及模拟弹簧效果等功能,帮助开发者提升游戏的真实感与沉浸感。
137 1
|
4月前
|
API 图形学
Unity精华☀️Audio Mixer终极教程:用《双人成行》讲解它的用途
Unity精华☀️Audio Mixer终极教程:用《双人成行》讲解它的用途
|
4月前
|
图形学
Unity精华☀️点乘、叉乘终极教程:用《小小梦魇》讲解这个面试题~
Unity精华☀️点乘、叉乘终极教程:用《小小梦魇》讲解这个面试题~
|
3月前
|
图形学 C++ C#
Unity插件开发全攻略:从零起步教你用C++扩展游戏功能,解锁Unity新玩法的详细步骤与实战技巧大公开
【8月更文挑战第31天】Unity 是一款功能强大的游戏开发引擎,支持多平台发布并拥有丰富的插件生态系统。本文介绍 Unity 插件开发基础,帮助读者从零开始编写自定义插件以扩展其功能。插件通常用 C++ 编写,通过 Mono C# 运行时调用,需在不同平台上编译。文中详细讲解了开发环境搭建、简单插件编写及在 Unity 中调用的方法,包括创建 C# 封装脚本和处理跨平台问题,助力开发者提升游戏开发效率。
341 0
|
4月前
|
开发者 图形学 API
从零起步,深度揭秘:运用Unity引擎及网络编程技术,一步步搭建属于你的实时多人在线对战游戏平台——详尽指南与实战代码解析,带你轻松掌握网络化游戏开发的核心要领与最佳实践路径
【8月更文挑战第31天】构建实时多人对战平台是技术与创意的结合。本文使用成熟的Unity游戏开发引擎,从零开始指导读者搭建简单的实时对战平台。内容涵盖网络架构设计、Unity网络API应用及客户端与服务器通信。首先,创建新项目并选择适合多人游戏的模板,使用推荐的网络传输层。接着,定义基本玩法,如2D多人射击游戏,创建角色预制件并添加Rigidbody2D组件。然后,引入网络身份组件以同步对象状态。通过示例代码展示玩家控制逻辑,包括移动和发射子弹功能。最后,设置服务器端逻辑,处理客户端连接和断开。本文帮助读者掌握构建Unity多人对战平台的核心知识,为进一步开发打下基础。
159 0
|
4月前
|
开发者 图形学 C#
揭秘游戏沉浸感的秘密武器:深度解析Unity中的音频设计技巧,从背景音乐到动态音效,全面提升你的游戏氛围艺术——附实战代码示例与应用场景指导
【8月更文挑战第31天】音频设计在游戏开发中至关重要,不仅能增强沉浸感,还能传递信息,构建氛围。Unity作为跨平台游戏引擎,提供了丰富的音频处理功能,助力开发者轻松实现复杂音效。本文将探讨如何利用Unity的音频设计提升游戏氛围,并通过具体示例代码展示实现过程。例如,在恐怖游戏中,阴森的背景音乐和突然的脚步声能增加紧张感;在休闲游戏中,轻快的旋律则让玩家感到愉悦。
134 0
|
4月前
|
图形学 数据安全/隐私保护 iOS开发
Unity与IOS⭐Xcode打包,上架TestFlight的完整教程
Unity与IOS⭐Xcode打包,上架TestFlight的完整教程
|
4月前
|
Apache 图形学
WebGL☀️Unity WebGL适配到各平台的教程
WebGL☀️Unity WebGL适配到各平台的教程

相关实验场景

更多