閻漢生, 曾 峰, 龍宇輝
(1. 廣東工貿(mào)職業(yè)技術(shù)學(xué)院, 廣州 510510; 2. 華南理工大學(xué) 機(jī)械與汽車工程學(xué)院, 廣州 510640)
基于Unity3D的產(chǎn)品結(jié)構(gòu)認(rèn)知虛擬實驗室構(gòu)建
閻漢生1,2, 曾 峰1, 龍宇輝1
(1. 廣東工貿(mào)職業(yè)技術(shù)學(xué)院, 廣州 510510; 2. 華南理工大學(xué) 機(jī)械與汽車工程學(xué)院, 廣州 510640)
針對高校機(jī)械類專業(yè)實驗教學(xué)中產(chǎn)品結(jié)構(gòu)認(rèn)知模型不足的問題,基于Unity3D平臺,選取了多個常見實物產(chǎn)品,采用Rhino、Creo等軟件為產(chǎn)品建模工具,結(jié)合C#語言實現(xiàn)交互功能,通過HTML網(wǎng)頁整合,開發(fā)出互聯(lián)網(wǎng)上的產(chǎn)品結(jié)構(gòu)認(rèn)知虛擬實驗室。依托廣東工貿(mào)職業(yè)技術(shù)學(xué)院工業(yè)設(shè)計省級實訓(xùn)基地,綜合多種先進(jìn)技術(shù),實現(xiàn)了在PC端和移動終端多平臺進(jìn)行瀏覽操作,虛擬拆裝產(chǎn)品,深入反復(fù)學(xué)習(xí)產(chǎn)品結(jié)構(gòu)的功能,顯著提升了學(xué)生學(xué)習(xí)的興趣和人才培養(yǎng)的效果。教師可以根據(jù)課程需要定制教學(xué)結(jié)構(gòu)模型,顯著節(jié)約實驗儀器設(shè)備的經(jīng)費投入,增加了學(xué)生實驗在時間和空間上的自由度,具有較好的研究價值和應(yīng)用前景。
產(chǎn)品結(jié)構(gòu); 虛擬拆卸; 虛擬實驗室
隨著高等教育發(fā)展和專業(yè)建設(shè)的步伐加快,部分高校實驗教學(xué)資源相對不足,無法滿足學(xué)生需求[1]。尤其機(jī)械類專業(yè)學(xué)生,也包括產(chǎn)品設(shè)計專業(yè)學(xué)生,需要對大量的工業(yè)產(chǎn)品和機(jī)械設(shè)備進(jìn)行拆裝認(rèn)知,積累對機(jī)械設(shè)備設(shè)計和產(chǎn)品設(shè)計在結(jié)構(gòu)方面的經(jīng)驗[2-3]。針對上述問題,建設(shè)互聯(lián)網(wǎng)上交互操作的虛擬實驗室,是一個有效又經(jīng)濟(jì)的解決方法[4]。目前虛擬現(xiàn)實技術(shù)和移動互聯(lián)網(wǎng)技術(shù)越來越成熟,不少的商業(yè)或教育機(jī)構(gòu)已開始采用各種相關(guān)技術(shù)進(jìn)行展示和教學(xué),其中主要虛擬交互工具有Unity3D、cult3D、EON Studio、VRML等[5-7]。
其中,Unity3D是由Unity Technologies開發(fā)的一個多平臺的綜合型游戲開發(fā)工具,由于其易用性和跨平臺性等諸多優(yōu)點,近年來Unity3D平臺受到廣泛關(guān)注,使用Unity3D開發(fā)的虛擬現(xiàn)實產(chǎn)品逐漸增多。中國科技大學(xué)、華南理工大學(xué)、華中師范大學(xué)建立了基于Unity的虛擬實驗室,用于幾何光學(xué)、機(jī)械結(jié)構(gòu)、化學(xué)實驗等[8]。另外,煙臺生產(chǎn)力促進(jìn)中心、臨礦集團(tuán)、深圳學(xué)車新電子科技公司分別利用Unity技術(shù)構(gòu)建用于產(chǎn)品展銷、船舶液壓、模擬駕駛等方面的虛擬實驗平臺[9-10]。本文將研究以Unity3D技術(shù)為基礎(chǔ)的,能在互聯(lián)網(wǎng)交互瀏覽的,面向產(chǎn)品結(jié)構(gòu)認(rèn)知的虛擬實驗平臺。
構(gòu)成該虛擬系統(tǒng)需要的資源主要有:基于產(chǎn)品實物測繪建模的高精度模型、用戶界面資源、產(chǎn)品信息資源、Unity3D交互模塊、用于嵌入Unity3D交互模塊的HTML網(wǎng)頁。建設(shè)的主要流程是:通過對真實的工業(yè)產(chǎn)品進(jìn)行實物測繪,采用主流三維軟件建模,再利用Unity3D制作產(chǎn)品模型虛擬拆裝模塊,最后嵌入到網(wǎng)頁當(dāng)中,通過瀏覽器訪問網(wǎng)頁,對產(chǎn)品結(jié)構(gòu)進(jìn)行虛擬拆裝、認(rèn)知學(xué)習(xí)[11]。由平臺流程圖1可見,虛擬實驗室的核心技術(shù)是在Unity3D編輯器中生成交互文件。
圖1 虛擬平臺搭建流程
2.1 Unity3D模塊制作流程
虛擬實驗室服務(wù)對象為高校機(jī)械類學(xué)生和教師,所以選取了機(jī)械工具和日用產(chǎn)品兩類常見的產(chǎn)品作為建模對象。廣東工貿(mào)職業(yè)技術(shù)學(xué)院工業(yè)設(shè)計實訓(xùn)室2014年成為省級高職實訓(xùn)基地建設(shè)項目,配備了大量的實物產(chǎn)品模型、測繪工具和專業(yè)軟件。初期選擇了齒輪減速器、注塑模具、掛燙機(jī)、攪拌機(jī)、加濕器5個產(chǎn)品,以后可根據(jù)需要添加模型。各類產(chǎn)品的交互模塊制作流程一樣,如圖2所示,由建模、整理信息、文件導(dǎo)入、場景搭建、界面設(shè)置、腳本編寫、功能優(yōu)化與發(fā)布等步驟組成[12]。現(xiàn)以減速器為例,說明具體步驟。
圖2 交互模塊開發(fā)流程
2.2 資源場景和用戶界面
(1) 資源導(dǎo)入和場景搭建。模型主要在Creo和Rhino軟件中建模,三維模型制作完畢,在3ds max軟件中調(diào)整好Z軸方向后轉(zhuǎn)存為fbx格式文件[13]。然后在Unity3D的Project面板中的Assets工程文件目錄下創(chuàng)建Modles文件夾,將.fbx文件放入其中,Unity將會自動識別。繼續(xù)添加和模型交互有關(guān)的聲音、模型貼圖、展示圖片等文件至工程目錄,并創(chuàng)建相應(yīng)文件夾,方便管理。
通過File→NewScene創(chuàng)建場景,將Assets工程文件目錄下Modles文件夾中的模型放入Scene窗口當(dāng)中,在Hierarchy 面板可管理添加至場景的模型,Game窗口可見模型實時顯示狀態(tài),如圖3所示。Unity的編輯視窗和輸出窗口的統(tǒng)一使得所見即所得,高效便捷。
圖3 Unity3D編輯器里模型實時顯示
(2) 用戶界面。使用NGUI創(chuàng)建UI界面以及按鈕,在start場景下,通過NGUI→Creat→2D UI創(chuàng)建UI Root。在Hierarchy面板可見,UI Root是NGUI最重要的組件,其他UI元素包括按鈕、界面等都是在以它為根的GameObject樹分支。UI Root包含UIRoot和UIPanel腳本[14],前者提供了整個UI界面的高度以及縮放比例,后者提供了界面整體的透明度、深度等的編輯功能。
以“齒輪減速器模擬拆卸”界面的按鈕為例,在UIRoot下,通過Scene→Create→Sprite創(chuàng)建圖片,在Scene面板中可見,更改Sprite名稱為Button_yanshi。在Inspector面板中更改圖片,替換Button圖片使其有美觀的按鈕外觀。添加UIButton組件使其具有按鈕的點擊功能。最后在Button_anshi下通過Create→Lable→Child向按鈕添加文本信息子對象,更改Label文本。創(chuàng)建的界面如圖4所示。
圖4 減速器虛擬拆裝UI設(shè)計
2.3 界面交互和多媒體功能
(1) 界面按鈕的交互功能。利用NGUI制作的按鈕僅僅具有按鈕的外觀,如需執(zhí)行相應(yīng)的按鈕功能,還需要相應(yīng)的程序支持。下面以場景切換和退出按鈕為例,創(chuàng)建名為SceneChange的C#腳本,實現(xiàn)“動畫演示”“產(chǎn)品拆解”“產(chǎn)品詳解”等按鈕的場景切換和關(guān)閉窗口功能。該腳本通過OnClick()函數(shù)進(jìn)行按鈕的鼠標(biāo)點擊監(jiān)控、Application.LoadLevel()函數(shù)進(jìn)行場景的切換加載、Application.Quit()函數(shù)實現(xiàn)Unity3D窗口程序的關(guān)閉退出。
將腳本拖放至攝像機(jī)對象上,將腳本點擊事件和相關(guān)按鈕關(guān)聯(lián),即可實現(xiàn)按鈕的場景切換和窗口的關(guān)閉功能。部分核心代碼如下:
public void OnDonghuayanshiButtonClick(){ //當(dāng)單擊動畫演示按鈕
Application.LoadLevel("yanshi");} //切換至“yanshi”場景
public void OnBackButtonClick(){ //當(dāng)單擊返回按鈕
Application.LoadLevel("start");} //切換至“start”場景
public void OnQuitButtonClick(){ //當(dāng)單擊退出按鈕時
Application.Quit ();} //程序退出窗口關(guān)閉
(2) 添加多媒體信息。為達(dá)到逼真的展示效果和更好的用戶體驗,可以為界面中的按鈕和三維模型添加合適的音效,這樣點擊時將有相應(yīng)的聲音反饋,如螺絲擰動的聲音、蓋子開合的聲音等[15]。Unity3D自身不帶聲音音效文件,需要導(dǎo)入外部資源。點擊按鈕的聲音通過NGUI的UIPlaySound腳本組件添加執(zhí)行,將聲音文件拖放至組件當(dāng)中即可。點擊三維模型的聲音文件通過Compent→Audio→Audio Source加載,編寫AudioPlay腳本執(zhí)行點擊播放,腳本掛載至攝像機(jī)對象。
部分核心代碼如下:
Var ray = Camera.main.ScreenPointToRay(Input.mousePosition); //鼠標(biāo)點擊發(fā)射射線碰撞,
RaycastHit hit;
if (Physics.Raycast(ray, out rayhit)) {
if(hit.transform.GameObject) { //判斷射線碰撞的對象
GameObject.GetCompoent
audio.Play();}} //播放聲音
2.4 模型交互功能
實際應(yīng)用中,交互操作非常復(fù)雜,種類也很多,包括場景視角的控制、點擊拆卸動畫的制作與交互、拖曳拆卸的功能實現(xiàn)、零件高亮著色、實時信息反饋等。其中在虛擬拆卸中應(yīng)用最廣操作有兩類,分別是鼠標(biāo)點擊拆卸功能和點擊拖曳拆卸功能。
(1) 鼠標(biāo)點擊拆卸功能。實現(xiàn)鼠標(biāo)點擊拆卸功能即:通過Unity3d的動畫編輯器制作產(chǎn)品模型拆卸運動的幀動畫,使用腳本判斷用戶對各個部件的單擊操作,必要時播放被單擊部件所掛載的動作,從而達(dá)到虛擬拆卸的交互目的。具體實現(xiàn)分為以下兩個部分:① 幀動畫的制作。使用MeshCollider組件判斷模型是否響應(yīng)點擊事件,使用Animation組件控制幀動畫編輯。選中模型零件,通過window→Animation打開動畫編輯器,添加Position位置控制的動畫曲線,零秒關(guān)鍵幀處保持零件在初始默認(rèn)位置,在第t s關(guān)鍵幀處設(shè)置零件拆卸后位置坐標(biāo)。動畫播放時零件模型將在t秒內(nèi)移動到所設(shè)置的位置處。② 交互控制。攝像機(jī)對象添加AnimationManger腳本,再將模型相關(guān)幀動畫文件與腳本關(guān)聯(lián),實現(xiàn)對模型拆卸動作的播放控制。此腳本是通過Raycheck函數(shù)進(jìn)行射線碰撞檢測,Animation.Play()函數(shù)控制動畫播放,邏輯是當(dāng)滿足鼠標(biāo)左鍵單擊且點擊的物件為模型部件,則播放該模型部件拆卸動作幀動畫。部分核心代碼如下:
void RayCheck(){ //單擊模型零件播放動畫
Ray ray= Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if (Physics.Raycast(ray, out hit)){
ModelHelp hitGo= hit.collider.gameObject.GetComponent
if (hitGo!=null){
if (!m_ModelList[hitGo.ID].IsPlaying&&!CheckIsHavPlay(hitGo.ID)){ //播放動畫
m_ModelList[hitGo.ID].GameObject.GetComponent
圖5所示為減速器抵卸前后的對比。其中:圖5(a)表示減速器未拆卸時點選一顆螺釘,圖5(b)表示拆卸出一顆螺釘,圖5(c)表示完全拆開后的效果。需要注意的時,相鄰零件在拆卸時,是有先后順序的,這種順序可以由兩種不同的方法實現(xiàn),第1種方法是對相鄰的零件ID值做判斷,某個零件拆卸時先檢測應(yīng)該在其之前拆卸的零件是否已拆卸,這種方法精確但編程工作量大,需預(yù)先設(shè)置大量零件ID之間的關(guān)系。第2種方法是借助Unity3D的碰撞檢測,使得內(nèi)側(cè)零件不能先于外側(cè)零件拆出,這種方法簡單,通常用于游戲中的物體接觸和碰撞判斷,但對機(jī)械零件的包圍邊界判斷精度不夠,對精密的機(jī)械裝配無法適用。本文研究中主要采用了第1種方法,此處不再展開詳述。
(a)
圖5 減速器拆卸前后對比
(2) 點擊拖曳拆卸功能。上述點擊后播放動畫展示拆卸功能的方法能夠初步實現(xiàn)對產(chǎn)品的虛擬拆卸,達(dá)到觀察學(xué)習(xí)產(chǎn)品內(nèi)部結(jié)構(gòu)的目的,具有一定的交互效果。但用戶體驗不太理想,沉浸感不足,優(yōu)秀的虛擬交互應(yīng)該是操作和反饋實時產(chǎn)生,時空上不能有明顯間隔[16]。點擊拖曳拆卸功能是指使用鼠標(biāo)點擊想拆卸的零件,按下鼠標(biāo)左鍵后直接拖動零件模型進(jìn)行拆卸,鼠標(biāo)拖曳的位置即為零件實時擺放位置,這種操作方式能讓用戶有更直觀、更真實的拆卸體驗。
以拆卸螺釘為例,首先創(chuàng)建DragMove腳本,該腳本程序通過GetMouseButtonDown()檢測鼠標(biāo)是否按下,通過按下時的鼠標(biāo)位置和移動后的鼠標(biāo)位置計算出鼠標(biāo)位移量,再通過eulerAngles(歐拉角)進(jìn)行角度的轉(zhuǎn)換更新螺釘旋轉(zhuǎn)位置。之后使用transform.Position進(jìn)行模型位移位置的置換,將螺釘移動到鼠標(biāo)所在的位置。從而實現(xiàn)點擊模型并拖動鼠標(biāo),模型邊旋轉(zhuǎn)邊移動的效果,形象地模擬了螺釘旋轉(zhuǎn)擰出的過程。部分核心代碼如下:
void Update () {
if (Input.GetMouseButtonDown (0)){ // 鼠標(biāo)點擊時候執(zhí)行檢測是否點在cube上
if (m_bIsCollision) {
Vector3 temp = Input.mousePosition - m_vTempMousePos; // 兩幀鼠標(biāo)位置之差為移動距離
m_vTempMousePos = Input.mousePosition;
m_rot.eulerAngles = new Vector3(m_rot.eulerAngles.x, // 實時更新cube旋轉(zhuǎn)角度
m_rot.eulerAngles.y - temp.x,
m_rot.eulerAngles.z);
m_cubes.transform.localRotation = m_rot[m_Cube];
m_cubes.transform.localPosition=newVector3(m_cubes.transform.localPosition.x+2f/360) *temp.x, // 實時更新cube位移位置
m_cubes.transform.localPosition.y, m_cubes.transform.localPosition.z);}}}
(1) 界面的優(yōu)化。由于該虛擬實驗室需要適應(yīng)不同分辨率設(shè)備的訪問操作,用戶界面需要針對不同比例、不同分辨率的設(shè)備進(jìn)行調(diào)整。根據(jù)目前主流PC和移動設(shè)備的顯示界面分析,調(diào)整用戶界面大小最大值為2 560×1 440,最小值為800×480,能夠適應(yīng)大多數(shù)顯示器進(jìn)行。為按鈕等界面元素添加Anchor,設(shè)置Anchor上下左右對齊,按鈕元素可隨著界面比例的改變自動適應(yīng)調(diào)整相對于其他UI元素的位置,保持界面的一致美觀。
(2) 其他方面的優(yōu)化。多媒體資源的優(yōu)化包括聲音和拆解動畫匹配,逐一調(diào)整聲音播放和動畫播放時間,達(dá)到動畫和聲音同時播放。腳本的優(yōu)化主要是調(diào)整腳本的邏輯,提高運行效率,減少Update方法使用,因為該方法為每幀執(zhí)行,對電腦資源耗費較多。
Unity3d文件支持本地PC、遠(yuǎn)程Web、Android、IOS等多種平臺運行。點擊FileBuild執(zhí)行創(chuàng)建程序,彈出設(shè)置界面,本項目需要選擇Platform WebPlayer發(fā)布網(wǎng)頁文件,勾選OfflineDeployment選項實現(xiàn)脫機(jī)狀態(tài)下運行,將已建的場景全部添加至Scenes In Build當(dāng)中,點擊Build打包發(fā)布網(wǎng)頁文件[17]。最后將發(fā)布的網(wǎng)頁文件嵌入到虛擬實驗室網(wǎng)頁中即可在互聯(lián)網(wǎng)訪問,實現(xiàn)虛擬交互學(xué)習(xí)。圖6為虛擬實驗室網(wǎng)站運行截圖,其中:圖6(a)為實驗室欄目導(dǎo)航和基本信息,圖6(b)為目前可選的虛擬拆卸產(chǎn)品列表,圖6(c)為齒輪減速器交互窗口,圖6(d)為手機(jī)端訪問界面。
(a)
(c)(d)
圖6 虛擬實驗室網(wǎng)站截圖
采用先進(jìn)的Unity3D技術(shù),導(dǎo)入Creo和Rhino創(chuàng)建的產(chǎn)品模型,使用C#編寫交互腳本,構(gòu)建出一個產(chǎn)品結(jié)構(gòu)認(rèn)知虛擬實驗室,在對多個產(chǎn)品進(jìn)行拆裝測繪和三維建模的基礎(chǔ)上制作了虛擬交互模塊,并發(fā)布在互聯(lián)網(wǎng)上,供學(xué)生隨時隨地學(xué)習(xí),能有效緩解高校機(jī)械類產(chǎn)品結(jié)構(gòu)實驗設(shè)備緊缺問題,學(xué)生反映良好,同時也為相關(guān)虛擬現(xiàn)實項目和數(shù)字化仿真運用提供參考。
[1] 楊雪松.基于Unity3D的發(fā)動機(jī)虛擬拆裝系統(tǒng)研究[J].機(jī)械,2016(1): 32-35.
[2] 鐘東階,蔣國璋.機(jī)械基礎(chǔ)實驗教學(xué)改革的探索[J].實驗室研究與探索, 2013,32(2): 146-169.
[3] 王洪欣,徐桂云.建設(shè)機(jī)械設(shè)計認(rèn)知實驗培養(yǎng)學(xué)生結(jié)構(gòu)設(shè)計能力[J].實驗技術(shù)與管理, 2014(6): 15-18.
[4] 汪 昭,魏 江,徐文娟.Unity3D在虛擬物理實驗設(shè)計中的應(yīng)用[J].常熟理工學(xué)院學(xué)報(教育科學(xué)),2015(6): 112-115.
[5] 孫紅春,胥 勇,程桂娟.基于Cult3D技術(shù)的工程測試技術(shù)實例虛擬仿真研究[J].中國現(xiàn)代教育裝備,2015(4): 15-17.
[6] 羅陸鋒,文 領(lǐng),徐超輝.基于EON Studio模具虛擬拆裝系統(tǒng)開發(fā)[J].煤礦機(jī)械,2012(6): 263-265.
[7] 巫紅霞.基于VRML的虛擬實驗室研究[J].蘇州市職業(yè)大學(xué)學(xué)報,2016(6): 34-39.
[8] 朱 柱.基于Unity3D的虛擬實驗系統(tǒng)設(shè)計與應(yīng)用研究[D].武漢:華中師范大學(xué), 2015:3-4.
[9] 呂文梅,宋代廣.基于Unity3D與3Dmax的虛擬船舶液壓系統(tǒng)三維模型展示[J].軟件導(dǎo)刊,2014(6): 74-76.
[10] 楊亞聯(lián),王 磊,楊 果,等.人在環(huán)路模擬駕駛仿真實驗系統(tǒng)研發(fā)[J].重慶大學(xué)學(xué)報,2015(8): 38-44.
[11] 蔣耘晨.虛擬實驗室技術(shù)[M].北京:北京理工大學(xué)出版社,2011.
[12] Sergey Mohov. Practical game design with unity and playmaker[M]. Birmingham:Packt Publishing,2013.
[13] Ramasundaram V, Grunwald S, Mangeot A,etal. Development of an environmental virtual field laboratory [J].Computers & Education,2015,45(1): 21-34.
[14] 高雪峰.Unity 3D NGUI實戰(zhàn)教程[M].北京:人民郵電出版社,2015.
[15] 張典華,陳一民,李 磊.基于Unity3D的多平臺三維空戰(zhàn)游戲的開發(fā)[J].計算機(jī)技術(shù)與發(fā)展,2014(1): 192-195.
[16] 郭宇承,古學(xué)靜,石 琳.虛擬現(xiàn)實與交互設(shè)計[M].武漢:武漢大學(xué)出版社,2015.
[17] 馬 瑞.基于Unity3D的多平臺三維虛擬數(shù)字校園的設(shè)計與實現(xiàn)[J].蚌埠學(xué)院學(xué)報, 2011(2):13-16.
Construction of Virtual Lab for Product Structure Cognition Based on Unity3D
YAN Hansheng1,2, ZENG Feng1, LONG Yuhui1
(1. Guangdong College of Industry and Commerce, Guangzhou 510510, China; 2. School of Mechanical and Automotive Engineering, South China University of Technology, Guangzhou 510640, China)
Because of the insufficiency of product structure cognition model for mechanics experiment teaching in colleges and universities, based on Unity3D platform, using Rhino and Creo for three-dimensional modeling, an Internet virtual lab for product cognition was established. Several common physical products were selected as cases, C# was used to program interactive function and integrate HTML pages. Relying on the industry design provincial training base in the Guangdong College of Industry and Commerce, the lab integrated a variety of advanced technology, virtual disassembling products could be operated on PC and mobile terminal platforms. The students’ interest and training effect are significantly improved. Teaching structure models can be custom-made according to course demand for teachers. The lab significantly saves investment on experimental instruments and equipment, and increases the freedom of the students’ experiments in time and space. As a result, the new method has a good research value and application prospect.
product structure; virtual disassembly; virtual laboratory
2017-11-10
廣東省高職教育教學(xué)改革項目(GDJG2015026);2014年廣東省高職教育大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計劃項目(粵教高函[2015]24號);廣東工貿(mào)職業(yè)技術(shù)學(xué)院科研項目(2014-Z-06)
閻漢生(1978-),男,湖北宜昌人,碩士,講師,研究方向:數(shù)字化設(shè)計與制造、工業(yè)設(shè)計。
Tel.: 18028622402; E-mail: yhs7812@163.com
TP 391.9
A
1006-7167(2017)08-0117-05