閻漢生, 曾 峰, 龍宇輝
(1. 廣東工貿職業技術學院, 廣州 510510; 2. 華南理工大學 機械與汽車工程學院, 廣州 510640)
基于Unity3D的產品結構認知虛擬實驗室構建
閻漢生1,2, 曾 峰1, 龍宇輝1
(1. 廣東工貿職業技術學院, 廣州 510510; 2. 華南理工大學 機械與汽車工程學院, 廣州 510640)

針對高校機械類專業實驗教學中產品結構認知模型不足的問題,基于Unity3D平臺,選取了多個常見實物產品,采用Rhino、Creo等軟件為產品建模工具,結合C#語言實現交互功能,通過HTML網頁整合,開發出互聯網上的產品結構認知虛擬實驗室。依托廣東工貿職業技術學院工業設計省級實訓基地,綜合多種先進技術,實現了在PC端和移動終端多平臺進行瀏覽操作,虛擬拆裝產品,深入反復學習產品結構的功能,顯著提升了學生學習的興趣和人才培養的效果。教師可以根據課程需要定制教學結構模型,顯著節約實驗儀器設備的經費投入,增加了學生實驗在時間和空間上的自由度,具有較好的研究價值和應用前景。
產品結構; 虛擬拆卸; 虛擬實驗室
隨著高等教育發展和專業建設的步伐加快,部分高校實驗教學資源相對不足,無法滿足學生需求[1]。尤其機械類專業學生,也包括產品設計專業學生,需要對大量的工業產品和機械設備進行拆裝認知,積累對機械設備設計和產品設計在結構方面的經驗[2-3]。針對上述問題,建設互聯網上交互操作的虛擬實驗室,是一個有效又經濟的解決方法[4]。目前虛擬現實技術和移動互聯網技術越來越成熟,不少的商業或教育機構已開始采用各種相關技術進行展示和教學,其中主要虛擬交互工具有Unity3D、cult3D、EON Studio、VRML等[5-7]。
其中,Unity3D是由Unity Technologies開發的一個多平臺的綜合型游戲開發工具,由于其易用性和跨平臺性等諸多優點,近年來Unity3D平臺受到廣泛關注,使用Unity3D開發的虛擬現實產品逐漸增多。中國科技大學、華南理工大學、華中師范大學建立了基于Unity的虛擬實驗室,用于幾何光學、機械結構、化學實驗等[8]。另外,煙臺生產力促進中心、臨礦集團、深圳學車新電子科技公司分別利用Unity技術構建用于產品展銷、船舶液壓、模擬駕駛等方面的虛擬實驗平臺[9-10]。本文將研究以Unity3D技術為基礎的,能在互聯網交互瀏覽的,面向產品結構認知的虛擬實驗平臺。
構成該虛擬系統需要的資源主要有:基于產品實物測繪建模的高精度模型、用戶界面資源、產品信息資源、Unity3D交互模塊、用于嵌入Unity3D交互模塊的HTML網頁。建設的主要流程是:通過對真實的工業產品進行實物測繪,采用主流三維軟件建模,再利用Unity3D制作產品模型虛擬拆裝模塊,最后嵌入到網頁當中,通過瀏覽器訪問網頁,對產品結構進行虛擬拆裝、認知學習[11]。由平臺流程圖1可見,虛擬實驗室的核心技術是在Unity3D編輯器中生成交互文件。

圖1 虛擬平臺搭建流程
2.1 Unity3D模塊制作流程
虛擬實驗室服務對象為高校機械類學生和教師,所以選取了機械工具和日用產品兩類常見的產品作為建模對象。廣東工貿職業技術學院工業設計實訓室2014年成為省級高職實訓基地建設項目,配備了大量的實物產品模型、測繪工具和專業軟件。初期選擇了齒輪減速器、注塑模具、掛燙機、攪拌機、加濕器5個產品,以后可根據需要添加模型。各類產品的交互模塊制作流程一樣,如圖2所示,由建模、整理信息、文件導入、場景搭建、界面設置、腳本編寫、功能優化與發布等步驟組成[12]。現以減速器為例,說明具體步驟。

圖2 交互模塊開發流程
2.2 資源場景和用戶界面
(1) 資源導入和場景搭建。模型主要在Creo和Rhino軟件中建模,三維模型制作完畢,在3ds max軟件中調整好Z軸方向后轉存為fbx格式文件[13]。然后在Unity3D的Project面板中的Assets工程文件目錄下創建Modles文件夾,將.fbx文件放入其中,Unity將會自動識別。繼續添加和模型交互有關的聲音、模型貼圖、展示圖片等文件至工程目錄,并創建相應文件夾,方便管理。
通過File→NewScene創建場景,將Assets工程文件目錄下Modles文件夾中的模型放入Scene窗口當中,在Hierarchy 面板可管理添加至場景的模型,Game窗口可見模型實時顯示狀態,如圖3所示。Unity的編輯視窗和輸出窗口的統一使得所見即所得,高效便捷。

圖3 Unity3D編輯器里模型實時顯示
(2) 用戶界面。使用NGUI創建UI界面以及按鈕,在start場景下,通過NGUI→Creat→2D UI創建UI Root。在Hierarchy面板可見,UI Root是NGUI最重要的組件,其他UI元素包括按鈕、界面等都是在以它為根的GameObject樹分支。UI Root包含UIRoot和UIPanel腳本[14],前者提供了整個UI界面的高度以及縮放比例,后者提供了界面整體的透明度、深度等的編輯功能。
以“齒輪減速器模擬拆卸”界面的按鈕為例,在UIRoot下,通過Scene→Create→Sprite創建圖片,在Scene面板中可見,更改Sprite名稱為Button_yanshi。在Inspector面板中更改圖片,替換Button圖片使其有美觀的按鈕外觀。添加UIButton組件使其具有按鈕的點擊功能。最后在Button_anshi下通過Create→Lable→Child向按鈕添加文本信息子對象,更改Label文本。創建的界面如圖4所示。

圖4 減速器虛擬拆裝UI設計
2.3 界面交互和多媒體功能
(1) 界面按鈕的交互功能。利用NGUI制作的按鈕僅僅具有按鈕的外觀,如需執行相應的按鈕功能,還需要相應的程序支持。下面以場景切換和退出按鈕為例,創建名為SceneChange的C#腳本,實現“動畫演示”“產品拆解”“產品詳解”等按鈕的場景切換和關閉窗口功能。該腳本通過OnClick()函數進行按鈕的鼠標點擊監控、Application.LoadLevel()函數進行場景的切換加載、Application.Quit()函數實現Unity3D窗口程序的關閉退出。
將腳本拖放至攝像機對象上,將腳本點擊事件和相關按鈕關聯,即可實現按鈕的場景切換和窗口的關閉功能。部分核心代碼如下:
public void OnDonghuayanshiButtonClick(){ //當單擊動畫演示按鈕
Application.LoadLevel("yanshi");} //切換至“yanshi”場景
public void OnBackButtonClick(){ //當單擊返回按鈕
Application.LoadLevel("start");} //切換至“start”場景
public void OnQuitButtonClick(){ //當單擊退出按鈕時
Application.Quit ();} //程序退出窗口關閉
(2) 添加多媒體信息。為達到逼真的展示效果和更好的用戶體驗,可以為界面中的按鈕和三維模型添加合適的音效,這樣點擊時將有相應的聲音反饋,如螺絲擰動的聲音、蓋子開合的聲音等[15]。Unity3D自身不帶聲音音效文件,需要導入外部資源。點擊按鈕的聲音通過NGUI的UIPlaySound腳本組件添加執行,將聲音文件拖放至組件當中即可。點擊三維模型的聲音文件通過Compent→Audio→Audio Source加載,編寫AudioPlay腳本執行點擊播放,腳本掛載至攝像機對象。
部分核心代碼如下:
Var ray = Camera.main.ScreenPointToRay(Input.mousePosition); //鼠標點擊發射射線碰撞,
RaycastHit hit;
if (Physics.Raycast(ray, out rayhit)) {
if(hit.transform.GameObject) { //判斷射線碰撞的對象
GameObject.GetCompoent
audio.Play();}} //播放聲音
2.4 模型交互功能
實際應用中,交互操作非常復雜,種類也很多,包括場景視角的控制、點擊拆卸動畫的制作與交互、拖曳拆卸的功能實現、零件高亮著色、實時信息反饋等。其中在虛擬拆卸中應用最廣操作有兩類,分別是鼠標點擊拆卸功能和點擊拖曳拆卸功能。
(1) 鼠標點擊拆卸功能。實現鼠標點擊拆卸功能即:通過Unity3d的動畫編輯器制作產品模型拆卸運動的幀動畫,使用腳本判斷用戶對各個部件的單擊操作,必要時播放被單擊部件所掛載的動作,從而達到虛擬拆卸的交互目的。具體實現分為以下兩個部分:① 幀動畫的制作。使用MeshCollider組件判斷模型是否響應點擊事件,使用Animation組件控制幀動畫編輯。選中模型零件,通過window→Animation打開動畫編輯器,添加Position位置控制的動畫曲線,零秒關鍵幀處保持零件在初始默認位置,在第t s關鍵幀處設置零件拆卸后位置坐標。動畫播放時零件模型將在t秒內移動到所設置的位置處。② 交互控制。攝像機對象添加AnimationManger腳本,再將模型相關幀動畫文件與腳本關聯,實現對模型拆卸動作的播放控制。此腳本是通過Raycheck函數進行射線碰撞檢測,Animation.Play()函數控制動畫播放,邏輯是當滿足鼠標左鍵單擊且點擊的物件為模型部件,則播放該模型部件拆卸動作幀動畫。部分核心代碼如下:
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)表示完全拆開后的效果。需要注意的時,相鄰零件在拆卸時,是有先后順序的,這種順序可以由兩種不同的方法實現,第1種方法是對相鄰的零件ID值做判斷,某個零件拆卸時先檢測應該在其之前拆卸的零件是否已拆卸,這種方法精確但編程工作量大,需預先設置大量零件ID之間的關系。第2種方法是借助Unity3D的碰撞檢測,使得內側零件不能先于外側零件拆出,這種方法簡單,通常用于游戲中的物體接觸和碰撞判斷,但對機械零件的包圍邊界判斷精度不夠,對精密的機械裝配無法適用。本文研究中主要采用了第1種方法,此處不再展開詳述。

(a)
圖5 減速器拆卸前后對比
(2) 點擊拖曳拆卸功能。上述點擊后播放動畫展示拆卸功能的方法能夠初步實現對產品的虛擬拆卸,達到觀察學習產品內部結構的目的,具有一定的交互效果。但用戶體驗不太理想,沉浸感不足,優秀的虛擬交互應該是操作和反饋實時產生,時空上不能有明顯間隔[16]。點擊拖曳拆卸功能是指使用鼠標點擊想拆卸的零件,按下鼠標左鍵后直接拖動零件模型進行拆卸,鼠標拖曳的位置即為零件實時擺放位置,這種操作方式能讓用戶有更直觀、更真實的拆卸體驗。
以拆卸螺釘為例,首先創建DragMove腳本,該腳本程序通過GetMouseButtonDown()檢測鼠標是否按下,通過按下時的鼠標位置和移動后的鼠標位置計算出鼠標位移量,再通過eulerAngles(歐拉角)進行角度的轉換更新螺釘旋轉位置。之后使用transform.Position進行模型位移位置的置換,將螺釘移動到鼠標所在的位置。從而實現點擊模型并拖動鼠標,模型邊旋轉邊移動的效果,形象地模擬了螺釘旋轉擰出的過程。部分核心代碼如下:
void Update () {
if (Input.GetMouseButtonDown (0)){ // 鼠標點擊時候執行檢測是否點在cube上
if (m_bIsCollision) {
Vector3 temp = Input.mousePosition - m_vTempMousePos; // 兩幀鼠標位置之差為移動距離
m_vTempMousePos = Input.mousePosition;
m_rot.eulerAngles = new Vector3(m_rot.eulerAngles.x, // 實時更新cube旋轉角度
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) 界面的優化。由于該虛擬實驗室需要適應不同分辨率設備的訪問操作,用戶界面需要針對不同比例、不同分辨率的設備進行調整。根據目前主流PC和移動設備的顯示界面分析,調整用戶界面大小最大值為2 560×1 440,最小值為800×480,能夠適應大多數顯示器進行。為按鈕等界面元素添加Anchor,設置Anchor上下左右對齊,按鈕元素可隨著界面比例的改變自動適應調整相對于其他UI元素的位置,保持界面的一致美觀。
(2) 其他方面的優化。多媒體資源的優化包括聲音和拆解動畫匹配,逐一調整聲音播放和動畫播放時間,達到動畫和聲音同時播放。腳本的優化主要是調整腳本的邏輯,提高運行效率,減少Update方法使用,因為該方法為每幀執行,對電腦資源耗費較多。
Unity3d文件支持本地PC、遠程Web、Android、IOS等多種平臺運行。點擊FileBuild執行創建程序,彈出設置界面,本項目需要選擇Platform WebPlayer發布網頁文件,勾選OfflineDeployment選項實現脫機狀態下運行,將已建的場景全部添加至Scenes In Build當中,點擊Build打包發布網頁文件[17]。最后將發布的網頁文件嵌入到虛擬實驗室網頁中即可在互聯網訪問,實現虛擬交互學習。圖6為虛擬實驗室網站運行截圖,其中:圖6(a)為實驗室欄目導航和基本信息,圖6(b)為目前可選的虛擬拆卸產品列表,圖6(c)為齒輪減速器交互窗口,圖6(d)為手機端訪問界面。

(a)

(c)(d)
圖6 虛擬實驗室網站截圖
采用先進的Unity3D技術,導入Creo和Rhino創建的產品模型,使用C#編寫交互腳本,構建出一個產品結構認知虛擬實驗室,在對多個產品進行拆裝測繪和三維建模的基礎上制作了虛擬交互模塊,并發布在互聯網上,供學生隨時隨地學習,能有效緩解高校機械類產品結構實驗設備緊缺問題,學生反映良好,同時也為相關虛擬現實項目和數字化仿真運用提供參考。
[1] 楊雪松.基于Unity3D的發動機虛擬拆裝系統研究[J].機械,2016(1): 32-35.
[2] 鐘東階,蔣國璋.機械基礎實驗教學改革的探索[J].實驗室研究與探索, 2013,32(2): 146-169.
[3] 王洪欣,徐桂云.建設機械設計認知實驗培養學生結構設計能力[J].實驗技術與管理, 2014(6): 15-18.
[4] 汪 昭,魏 江,徐文娟.Unity3D在虛擬物理實驗設計中的應用[J].常熟理工學院學報(教育科學),2015(6): 112-115.
[5] 孫紅春,胥 勇,程桂娟.基于Cult3D技術的工程測試技術實例虛擬仿真研究[J].中國現代教育裝備,2015(4): 15-17.
[6] 羅陸鋒,文 領,徐超輝.基于EON Studio模具虛擬拆裝系統開發[J].煤礦機械,2012(6): 263-265.
[7] 巫紅霞.基于VRML的虛擬實驗室研究[J].蘇州市職業大學學報,2016(6): 34-39.
[8] 朱 柱.基于Unity3D的虛擬實驗系統設計與應用研究[D].武漢:華中師范大學, 2015:3-4.
[9] 呂文梅,宋代廣.基于Unity3D與3Dmax的虛擬船舶液壓系統三維模型展示[J].軟件導刊,2014(6): 74-76.
[10] 楊亞聯,王 磊,楊 果,等.人在環路模擬駕駛仿真實驗系統研發[J].重慶大學學報,2015(8): 38-44.
[11] 蔣耘晨.虛擬實驗室技術[M].北京:北京理工大學出版社,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實戰教程[M].北京:人民郵電出版社,2015.
[15] 張典華,陳一民,李 磊.基于Unity3D的多平臺三維空戰游戲的開發[J].計算機技術與發展,2014(1): 192-195.
[16] 郭宇承,古學靜,石 琳.虛擬現實與交互設計[M].武漢:武漢大學出版社,2015.
[17] 馬 瑞.基于Unity3D的多平臺三維虛擬數字校園的設計與實現[J].蚌埠學院學報, 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
廣東省高職教育教學改革項目(GDJG2015026);2014年廣東省高職教育大學生創新創業訓練計劃項目(粵教高函[2015]24號);廣東工貿職業技術學院科研項目(2014-Z-06)
閻漢生(1978-),男,湖北宜昌人,碩士,講師,研究方向:數字化設計與制造、工業設計。
Tel.: 18028622402; E-mail: yhs7812@163.com
TP 391.9
A
1006-7167(2017)08-0117-05