張福峰 王敏 金會賞
摘要:虛擬現(xiàn)實技術(shù)的蓬勃發(fā)展為各產(chǎn)業(yè)注入新活力,房地產(chǎn)、汽車等行業(yè)虛擬現(xiàn)實的運用,讓用戶足不出戶盡情領(lǐng)略虛擬現(xiàn)實的魅力。Unity3D是虛擬現(xiàn)實開發(fā)的利器,介紹在Unity3D中結(jié)合UGUI組件實現(xiàn)場景材質(zhì)動態(tài)修改的方法。
關(guān)鍵詞:Unity3D;UGUI;動態(tài)材質(zhì)
中圖分類號: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(虛擬現(xiàn)實)技術(shù)的日新月異,多家網(wǎng)站推出了基于VR的虛擬看車、看房。用戶足不出戶就能360度全方位看到車輛、房間全貌,并能自由切換場景對象材質(zhì)、顏色。在Unity3D軟件中,可以借助Shader(著色器)輕松實現(xiàn)材質(zhì)貼圖的動態(tài)設(shè)置。Shader所做的就是將一個模型的網(wǎng)格渲染到屏幕上,它可以被定義為一系列的屬性,你可以通過改變這些屬性來改變模型渲染到屏幕上的效果,而這些屬性被存放在一個叫作材質(zhì)(material)的地方。另外,對于3D游戲來說,有很多絢麗的效果也都是靠Shader來實現(xiàn)的。
1GUI框架
GUI(Graphical User Interface)在游戲的開發(fā)中占有極其重要的地位,GUI界面友好、使用是否方便很大程度上決定了玩家的游戲體驗。Unity3D內(nèi)置了一套完整地GUI系統(tǒng),提供了從布局、控件到皮膚的一整套GUI解決方案,可以做出各種風格和樣式的GUI界面。Unity 4.6以前沒有提供內(nèi)置的GUI可視化編輯器,因此GUI界面的制作需要全部通過編寫腳本代碼來實現(xiàn),或者借助第三方的GUI插件,如NGUI。NGUI是專門針對Unity引擎、用C#語言編寫的一套插件,是一款老牌的Unity UI插件。NGUI完美地彌補了Unity引擎原生GUI系統(tǒng)的各種不足,提供了常見的UI控件,實現(xiàn)幾乎所有需要的功能。
UGUI是NGUI作者參與開發(fā)的,由Unity官方推出的一套UI組件,從Unity4.6開始被集成到Unity編譯器中的。UGUI相對于之前的GUI來說改頭換面,靈活、快速和可視化是Unity官方給UGUI系統(tǒng)賦予的標簽。UGUI由于是Unity原生支持的,所以使用上會更加人性化,對于開發(fā)者而言有三個優(yōu)點:效率高效果好、易于使用和擴展以及與Unity的兼容性高。
2 UGUI基本控件
Unity用戶界面系統(tǒng)用于快速直觀地創(chuàng)建游戲內(nèi)用戶界面,使用一些包含的組件(如面板和按鈕),可以為應用程序創(chuàng)建基本主菜單。UGUI主要包括畫布、文本、圖像、原始圖像、按鈕等基本控件。
畫布是所有UI控件的根類,也可以看作所有UI控件的父物體,所有UI控件都必須在Canvas上面繪制;Text 控件也稱為標簽,Text 區(qū)域用于輸入將顯示的文本,它可以設(shè)置字體、樣式、字號等內(nèi)容;圖像控件除了兩個公共的組件(矩形變換與畫布渲染器)外,默認情況下就只有一個 Image 組件,把圖片轉(zhuǎn)換成精靈(Sprite)格式后,精靈圖片就可以拖放到 Image 的源圖像中顯示該圖像了;原始圖像控件與圖像控件類似,但是原始圖像控件可以顯示任何紋理,向用戶顯示了一個非交互式的圖像,它可以用于裝飾、圖標等;按鈕是一個復合控件,其中還包含一個文本子控件,通過此子控件可設(shè)置按鈕上顯示的文字內(nèi)容、字體、文字樣式、文字大小、顏色等,與前面所講的 Text 控件是一樣的。
3 綁定鼠標單擊事件
要在Unity3D中綁定按鈕單擊事件,可以在檢查器窗口將單擊事件腳本掛接到按鈕組件,也可以在腳本文件中通過代碼綁定鼠標單擊事件。在腳本中綁定鼠標事件更具靈活性,下面簡要介紹:
首先,創(chuàng)建一個C#腳本命名為mClickA.cs。獲取名稱為Button按鈕后,為按鈕綁定onClick事件,其中,ClickmeA為無參方法,ClickmeB為傳參方法,根據(jù)實際情況選擇合適方法即可。腳本完成后掛接到按鈕或者場景其他任何對象均可。
public class mClickA : MonoBehaviour {
privateGameObjectbtnObj;
private void Start()
{
btnObj = GameObject.Find("Button");
btnObj.GetComponent
btnObj.GetComponent
}
voidClickmeA()
{
print("單擊鼠標!");
}
voidClickmeB(string infostr)
{
print(infostr);
}
}
4場景材質(zhì)設(shè)置與獲取
場景模型制作完成之后,貼圖時不可避免地要接觸到的組件便是MeshRenderer。獲取到對象MeshRenderer組件后,通過material(材質(zhì))設(shè)置與獲取對象的材質(zhì)、顏色。
(1)設(shè)置對象顏色
對象.GetComponent
voidClickmeA()
{
GameObjectobj = GameObject.Find("Sphere");
obj.GetComponent
}
(2)設(shè)置對象材質(zhì)
對象.GetComponent
voidClickmeA()
{
GameObjectobj = GameObject.Find("Sphere");
obj.GetComponent
}
(3)獲取對象顏色
對象. GetComponent
voidClickmeA()
{
Color OldColor = GetComponent
Debug.Log(OldColor);
}
(4)獲取對象材質(zhì)
對象. GetComponent
voidClickmeA()
{
Material mtl =GetComponent
Debug.Log(mtl);
}
5結(jié)束語
作為虛擬現(xiàn)實技術(shù)開發(fā)的利器,Unity3D提供了豐富的UI組件,為開發(fā)者提供了極大的方便。通過對MeshRenderer組件操作完成場景材質(zhì)的動態(tài)設(shè)置與獲取,輕松實現(xiàn)虛擬家裝、虛擬看車場景中看似神奇的動態(tài)材質(zhì)切換。
參考文獻:
[1] 吳亞峰.Unity游戲案例開發(fā)大全[M].北京:人民郵電出版社, 2018.
[2] 李婷婷.Unity3D虛擬現(xiàn)實游戲開發(fā)[M].北京:清華大學出版社,2018.
[3] 徐志剛,胡常英.基于Unity3D的虛擬汽車試驗場漫游系統(tǒng)[J].計算機技術(shù)與發(fā)展,2019,29(5):112-115.
【通聯(lián)編輯:唐一東】