APP下载

基于Unity3DUGUI动态材质修改的实现

2020-11-02张福峰王敏金会赏

电脑知识与技术 2020年25期

张福峰 王敏 金会赏

摘要:虚拟现实技术的蓬勃发展为各产业注入新活力,房地产、汽车等行业虚拟现实的运用,让用户足不出户尽情领略虚拟现实的魅力。Unity3D是虚拟现实开发的利器,介绍在Unity3D中结合UGUI组件实现场景材质动态修改的方法。

关键词:Unity3D;UGUI;动态材质

中图分类号:TP37        文献标识码:A

文章编号:1009-3044(2020)25-0218-02

Abstract: The vigorous development of virtual reality technology injects new vitality into various industries. The application of virtual reality in real estate, automobile, and other industries enables users to enjoy the charm of virtual reality at home. Unity3D is a powerful tool for virtual reality development. This paper introduces the method of dynamic modification of scene materials in Unity3D with the UGUI component.

Key words: Unity3D; UGUI; Dynamic material

随着VR(虚拟现实)技术的日新月异,多家网站推出了基于VR的虚拟看车、看房。用户足不出户就能360度全方位看到车辆、房间全貌,并能自由切换场景对象材质、颜色。在Unity3D软件中,可以借助Shader(着色器)轻松实现材质贴图的动态设置。Shader所做的就是将一个模型的网格渲染到屏幕上,它可以被定义为一系列的属性,你可以通過改变这些属性来改变模型渲染到屏幕上的效果,而这些属性被存放在一个叫作材质(material)的地方。另外,对于3D游戏来说,有很多绚丽的效果也都是靠Shader来实现的。

1GUI框架

GUI(Graphical User Interface)在游戏的开发中占有极其重要的地位,GUI界面友好、使用是否方便很大程度上决定了玩家的游戏体验。Unity3D内置了一套完整地GUI系统,提供了从布局、控件到皮肤的一整套GUI解决方案,可以做出各种风格和样式的GUI界面。Unity 4.6以前没有提供内置的GUI可视化编辑器,因此GUI界面的制作需要全部通过编写脚本代码来实现,或者借助第三方的GUI插件,如NGUI。NGUI是专门针对Unity引擎、用C#语言编写的一套插件,是一款老牌的Unity UI插件。NGUI完美地弥补了Unity引擎原生GUI系统的各种不足,提供了常见的UI控件,实现几乎所有需要的功能。

UGUI是NGUI作者参与开发的,由Unity官方推出的一套UI组件,从Unity4.6开始被集成到Unity编译器中的。UGUI相对于之前的GUI来说改头换面,灵活、快速和可视化是Unity官方给UGUI系统赋予的标签。UGUI由于是Unity原生支持的,所以使用上会更加人性化,对于开发者而言有三个优点:效率高效果好、易于使用和扩展以及与Unity的兼容性高。

2 UGUI基本控件

Unity用户界面系统用于快速直观地创建游戏内用户界面,使用一些包含的组件(如面板和按钮),可以为应用程序创建基本主菜单。UGUI主要包括画布、文本、图像、原始图像、按钮等基本控件。

画布是所有UI控件的根类,也可以看作所有UI控件的父物体,所有UI控件都必须在Canvas上面绘制;Text 控件也称为标签,Text 区域用于输入将显示的文本,它可以设置字体、样式、字号等内容;图像控件除了两个公共的组件(矩形变换与画布渲染器)外,默认情况下就只有一个 Image 组件,把图片转换成精灵(Sprite)格式后,精灵图片就可以拖放到 Image 的源图像中显示该图像了;原始图像控件与图像控件类似,但是原始图像控件可以显示任何纹理,向用户显示了一个非交互式的图像,它可以用于装饰、图标等;按钮是一个复合控件,其中还包含一个文本子控件,通过此子控件可设置按钮上显示的文字内容、字体、文字样式、文字大小、颜色等,与前面所讲的 Text 控件是一样的。

3 绑定鼠标单击事件

要在Unity3D中绑定按钮单击事件,可以在检查器窗口将单击事件脚本挂接到按钮组件,也可以在脚本文件中通过代码绑定鼠标单击事件。在脚本中绑定鼠标事件更具灵活性,下面简要介绍:

首先,创建一个C#脚本命名为mClickA.cs。获取名称为Button按钮后,为按钮绑定onClick事件,其中,ClickmeA为无参方法,ClickmeB为传参方法,根据实际情况选择合适方法即可。脚本完成后挂接到按钮或者场景其他任何对象均可。

public class mClickA : MonoBehaviour {

privateGameObjectbtnObj;

private void Start()

{

btnObj = GameObject.Find("Button");

btnObj.GetComponent