張福峰 王敏 金會賞
摘要:虛擬現實技術的蓬勃發展為各產業注入新活力,房地產、汽車等行業虛擬現實的運用,讓用戶足不出戶盡情領略虛擬現實的魅力。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
btnObj.GetComponent
}
voidClickmeA()
{
print("單擊鼠標!");
}
voidClickmeB(string infostr)
{
print(infostr);
}
}
4場景材質設置與獲取
場景模型制作完成之后,貼圖時不可避免地要接觸到的組件便是MeshRenderer。獲取到對象MeshRenderer組件后,通過material(材質)設置與獲取對象的材質、顏色。
(1)設置對象顏色
對象.GetComponent
voidClickmeA()
{
GameObjectobj = GameObject.Find("Sphere");
obj.GetComponent
}
(2)設置對象材質
對象.GetComponent
voidClickmeA()
{
GameObjectobj = GameObject.Find("Sphere");
obj.GetComponent
}
(3)獲取對象顏色
對象. GetComponent
voidClickmeA()
{
Color OldColor = GetComponent
Debug.Log(OldColor);
}
(4)獲取對象材質
對象. GetComponent
voidClickmeA()
{
Material mtl =GetComponent
Debug.Log(mtl);
}
5結束語
作為虛擬現實技術開發的利器,Unity3D提供了豐富的UI組件,為開發者提供了極大的方便。通過對MeshRenderer組件操作完成場景材質的動態設置與獲取,輕松實現虛擬家裝、虛擬看車場景中看似神奇的動態材質切換。
參考文獻:
[1] 吳亞峰.Unity游戲案例開發大全[M].北京:人民郵電出版社, 2018.
[2] 李婷婷.Unity3D虛擬現實游戲開發[M].北京:清華大學出版社,2018.
[3] 徐志剛,胡常英.基于Unity3D的虛擬汽車試驗場漫游系統[J].計算機技術與發展,2019,29(5):112-115.
【通聯編輯:唐一東】