• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      基于Unity3D的交互式虛擬油庫培訓(xùn)系統(tǒng)研發(fā)

      2019-01-17 07:21:56滿銀霜傘博泓杜勝男王衛(wèi)強
      關(guān)鍵詞:油庫腳本鼠標(biāo)

      劉 洋,滿銀霜,傘博泓,杜勝男,王衛(wèi)強

      (遼寧石油化工大學(xué)石油天然氣工程學(xué)院,遼寧撫順113001)

      油庫中重要生產(chǎn)設(shè)備的操作流程極為復(fù)雜,所以培訓(xùn)是員工上崗前必不可少的一個環(huán)節(jié)。如果在工作現(xiàn)場進(jìn)行技術(shù)和設(shè)備上的培訓(xùn),不僅會受到運行工況的限制,還增加了培訓(xùn)的風(fēng)險。員工一旦在培訓(xùn)過程中存在誤操作,后果不敢想象[1-2]。傳統(tǒng)的培訓(xùn)方式由于僅限于文字、動畫,不具有實踐操作性,無法讓員工真正地掌握設(shè)備的操作流程[3]。

      Unity3D是一個綜合型的虛擬場景開發(fā)平臺,開發(fā)流程簡單、兼容性好,可創(chuàng)建近乎真實的油庫庫區(qū),使員工能感覺自己在工作現(xiàn)場進(jìn)行培訓(xùn)[4-5]。本文基于Unity3D開發(fā)平臺,以3Dmax等軟件為輔助工具,創(chuàng)建了一套集專業(yè)性、真實性、交互性等特點于一身的虛擬油庫培訓(xùn)系統(tǒng)[6]。討論了系統(tǒng)的設(shè)計模式,實現(xiàn)了包括第一人稱視角漫游、區(qū)域小地圖、精確查詢、設(shè)備交互操作、重要工藝流程仿真等關(guān)鍵技術(shù)。

      1 系統(tǒng)整體框架

      交互式虛擬油庫培訓(xùn)系統(tǒng)采用Unity3D為開發(fā)平臺,模型數(shù)據(jù)和腳本數(shù)據(jù)均存儲在平臺中,通過數(shù)據(jù)庫訪問設(shè)備屬性及其他信息,最終實現(xiàn)第一人稱視角的交互式培訓(xùn)[7]。系統(tǒng)整體層次框架如圖1所示。

      圖1 系統(tǒng)整體框架Fig.1 Overall framework of the system

      2 系統(tǒng)功能設(shè)計

      交互式三維油庫培訓(xùn)系統(tǒng)的目的是展現(xiàn)一個具有交互功能的虛擬油庫場景。進(jìn)入虛擬場景后,培訓(xùn)者以第一人稱視角在油庫中行走,同時可實時對重要設(shè)備進(jìn)行屬性查詢、交互操作[8-9]。系統(tǒng)的人機交互界面簡稱UI界面,系統(tǒng)在UI界面上設(shè)置如下功能:精確查詢、集控室內(nèi)的仿真操作。系統(tǒng)全部功能設(shè)計如圖2所示。

      圖2 系統(tǒng)功能設(shè)計Fig.2 Design of system function

      3 系統(tǒng)開發(fā)流程

      交互式虛擬油庫培訓(xùn)系統(tǒng)開發(fā)分為兩步:一是系統(tǒng)的分析策劃和模型及場景的搜集、整理、制作;第二階段是在Unity3D中進(jìn)行虛擬油庫搭建、UI界面的制作和交互功能的實現(xiàn),其流程如圖3所示[10]。

      (1)從培訓(xùn)者的角度出發(fā),分析需求內(nèi)容,確定系統(tǒng)將要實現(xiàn)的功能。

      (2)實地取景和收集設(shè)備資料。實地取景主要是到油庫現(xiàn)場去拍攝主要建筑和設(shè)備的外部輪廓和局部細(xì)節(jié)圖,作為模型的貼圖。收集的資料主要包括重要設(shè)備的工藝流程資料。

      (3)利用3Dmax等建模軟件進(jìn)行油庫模型的制作,之后導(dǎo)出成Unity所支持FBX格式的三維模型文件[11]。

      (4)將三維模型文件導(dǎo)入到Unity工程中進(jìn)行油庫的搭建;制作用戶界面,包含系統(tǒng)功能菜單及子功能的交互界面;系統(tǒng)交互功能的開發(fā)[12]。

      (5)最終生成可執(zhí)行的程序。

      圖3 系統(tǒng)開發(fā)流程圖Fig.3 Flow chart of system development

      4 系統(tǒng)關(guān)鍵技術(shù)

      4.1 漫游技術(shù)

      在使用交互式虛擬油庫培訓(xùn)系統(tǒng)時,為了使用戶產(chǎn)生真實的培訓(xùn)效果,用戶需要通過控制角色以第一人稱視角漫游整個庫區(qū)。交互式虛擬油庫培訓(xùn)系統(tǒng)為實現(xiàn)上述功能,制作了角色控制器,在場景中代表了用戶本身。如圖4所示,首先在Unity3D的場景中加入Capsule(膠囊體)作為父物體,在該膠囊體上繼續(xù)創(chuàng)建攝像機(攝像機組件的視角即為程序運行后用戶視角)為子物體,觀察右下方,適當(dāng)調(diào)整距離使用戶有良好的第一視角漫游體驗。

      腳本(script)是Unity3D核心組件,用來定義物體的各種行為。分析需求功能之后,將想要實現(xiàn)的算法和行為轉(zhuǎn)化為C#語言的腳本,綁定到角色控制器上運行程序即可。為了使用戶有更好的使用體驗,第一人稱移動腳本具有如下功能:采用了鍵盤鼠標(biāo)配合操作的漫游移動方式,W、S、A、D分別控制角色的前后左右移動,Q、E控制角色視角的左右旋轉(zhuǎn),鼠標(biāo)的移動在一定范圍內(nèi)與角色目光移動一致。實現(xiàn)上述功能腳本的部分重要代碼如下:

      if(Input.GetKey(Key Code.W))//按下W鍵

      {

      m_Transform.Translate(Vector3.forward *2.0f,Space.Self);//角色向前移動

      }

      if(Input.GetKey(Key Code.S))//按下S鍵

      {

      m_Transform.Translate(Vector3.back*2.0f,Space.Self);//角色向后移動

      }

      if(Input.GetKey(KeyCode.A))//按下A鍵

      {

      m_Transform.Translate(Vector3.left*2.0f,Space.Self);//角色向左移動

      }

      if(Input.GetKey(KeyCode.D))//按下D鍵

      {

      m_Transform.Translate(Vector3.right*2.0f,Space.Self);//角色向右移動

      }

      if(Input.GetKey(Key Code.Q))//按下Q鍵

      {

      m_Transform.Rotate(Vector3.up,-1.0f);//角色向左旋轉(zhuǎn)

      }

      if(Input.GetKey(Key Code.E))//按下E鍵

      {

      m_Transform.Rotate(Vector3.up,1.0f);//角色向右旋轉(zhuǎn)

      }

      圖4 角色控制器Fig.4 Role controller

      4.2 區(qū)域小地圖

      油庫場景較大,培訓(xùn)者初次使用本系統(tǒng)時對建筑、設(shè)備位置不了解,漫游時不清楚自己的當(dāng)前位置。系統(tǒng)利用渲染攝像機視角及分層顯示技術(shù),可以讓用戶隨時看到自己所處位置,并且可以概覽油庫內(nèi)建筑和設(shè)備的位置。首先創(chuàng)建攝像機置于油庫場景正上方,調(diào)整角度使其能看到油庫全景;其次在Unity中創(chuàng)建Render Texture(渲染貼圖)組件,在攝像機的檢視面板中將字段改為Render Texture,這樣Render Texture就會顯示該攝像機視角內(nèi)的景象,在漫游界面上創(chuàng)建UI元素Raw Image作為小地圖顯示的載體;最后在控制器上添加足夠大的三維紅色球體,在屬性面板中把它劃分為新的Layer(層級),設(shè)置讓小地圖攝像機顯示該層級且主攝像機不顯示該層級,這樣在小地圖上易于觀察用戶位置,但是漫游視角內(nèi)不會出現(xiàn)用作標(biāo)識的紅色球體,如圖5所示。

      圖5 區(qū)域小地圖Fig.5 Regional small map

      4.3 交互技術(shù)

      傳統(tǒng)虛擬培訓(xùn)系統(tǒng)功能設(shè)計較為簡單,僅限于漫游、查詢等,操作體驗單一,培訓(xùn)效果不理想。交互式虛擬油庫培訓(xùn)系統(tǒng)利用碰撞感應(yīng)作為交互技術(shù)的核心,使用戶能夠?qū)μ摂M油庫內(nèi)重要的設(shè)備進(jìn)行操作,增強了真實感和培訓(xùn)效果。碰撞器(Collider)是Unity3D組件的一種,模型感應(yīng)外部刺激都要通過碰撞器實現(xiàn),只有添加了碰撞器模型才能響應(yīng)鼠標(biāo)操作。

      以交互功能中的手動開啟閥門為例,功能為鼠標(biāo)左鍵按下后左移后閥門順時針開啟,同時油罐內(nèi)原油按指定路線流動。如圖6、7所示,首先在閥門模型上添加盒式碰撞體,碰撞范圍調(diào)整為鼠標(biāo)按下生效區(qū)域,然后用C#語言編寫閥門交互腳本及原油聯(lián)動兩個腳本綁定到閥門和原油模型上。閥門交互 腳 本 利 用 Input.GetMouseButton()、z=Input.GetAxis("Mouse X")方法實現(xiàn)鼠標(biāo)在碰撞器區(qū)域內(nèi)按下左鍵并且左右橫移后,閥門可以順逆時針轉(zhuǎn)動;原油聯(lián)動腳本void OnMouseDown()、transform.localScale=new Vector3(x,y,z)方法實現(xiàn)在手動將閥門開啟后,模型在規(guī)定方向上延伸來模擬原油流動。上述功能的部分關(guān)鍵代碼如下:

      if(Input.GetMouseButton(0))//監(jiān)視鼠標(biāo)左鍵

      {

      float z=0;

      z=Input.GetAxis("Mouse X")*RoatedSpeed*Time.deltaTime;

      //鼠標(biāo)X方向移動改變閥門Z方向角度

      if(roate)

      {obj.transform.Rotate(new Vector3(0,0,z));

      void OnMouseDown()//鼠標(biāo)按下

      {roate=true;

      Debug.Log("collider");//碰撞體內(nèi)發(fā)生事件

      }

      void OnMouseUp()//鼠標(biāo)抬起

      {roate=false;

      Debug.Log("Out of collider");//離開碰撞體事件取消

      y=Time.deltaTime*speed1;//原油模型流動速度

      obj1.transform.localScale+=new Vector3(0,y,0);//y方向上延伸?

      圖6 盒式碰撞體Fig.6 Box collider

      4.4 數(shù)據(jù)庫訪問

      交互式虛擬油庫培訓(xùn)系統(tǒng)中,數(shù)據(jù)庫存儲所有設(shè)備的重要參數(shù)及參加培訓(xùn)人員的個人信息[14-15]。利用SQL Server 2010進(jìn)行數(shù)據(jù)存儲和管理,以C#腳本實現(xiàn)與Unity3D通信。實現(xiàn)過程如下:在Unity安裝目錄下找到System.Data.dll文件,將該文件復(fù)制Unity工作空間下的Asset文件夾內(nèi),之后在VS開發(fā)環(huán)境下添加此引用(System.Data),數(shù)據(jù)庫的數(shù)據(jù)就可以被Unity程序訪問。具體讀取數(shù)據(jù)的形式需要鏈接數(shù)據(jù)庫的腳本Link SQL來規(guī)定,實現(xiàn)自動連接數(shù)據(jù)庫、讀取特定表、輸入數(shù)據(jù)、返回數(shù)據(jù)等。如圖8所示,儲油罐的信息以表的形式儲存到數(shù)據(jù)庫中,設(shè)備在數(shù)據(jù)庫中都有對應(yīng)的編號,輸入編號后系統(tǒng)可以快速讀取設(shè)備數(shù)據(jù)并且顯示在Unity3D的交互界面,實現(xiàn)精確搜索。LinkSQL腳本關(guān)鍵代碼如下:

      Private string sqlAddress="server=127.0.0.1;database=3d;uid=sa;pwd=123456";//數(shù)據(jù)庫服務(wù)器地址、數(shù)據(jù)庫名稱、用戶名、密碼

      string strID = gameObj.GetComponent().text;//想要查詢設(shè)備ID在Inputfield區(qū)域填寫

      cmd.CommandText="SELECT id,type,nominal,volume,bore,height,manufacturer,oil FROM Table_1 WHERE name='"+strID+"'";//讀取該設(shè)備的數(shù)據(jù)

      string strSCCJ=str1+" "+str2+" "+str3+" "+str4+" "+str5+" "+str6+" "+str7;//數(shù)據(jù)返回的顯示方式

      GameObject.Find("searchtext").GetComponent().text=strSCCJ;//數(shù)據(jù)返回位置

      圖7 開啟閥門后油路展示Fig.7 Oil display after opening valve

      4.5 仿真操作

      油庫內(nèi)重要設(shè)備的操作培訓(xùn)難度較大,日常工作中很少有機會去操作這些設(shè)備。傳統(tǒng)仿真培訓(xùn)多為二維數(shù)據(jù)仿真,不夠直觀。交互式虛擬培訓(xùn)系統(tǒng)利用UI系統(tǒng)來制作油庫DCS系統(tǒng)畫面,按鈕組件(Button)的On Click功能來控制事件發(fā)生,綁定到油體模型上的腳本控制聯(lián)動,通過攝像頭切換技術(shù)進(jìn)行現(xiàn)場監(jiān)控。用戶不但可以在控制面板上操作設(shè)備,還可以實時觀察現(xiàn)場工況,最大程度上理解自己的每一步操作。

      圖8 設(shè)備屬性精確搜索Fig.8 Accurate sear ch for device pr operties

      用繪圖軟件繪制倒罐操作的DCS畫面,將圖片作為UI面板元素Panel的背景。在畫面上添加Button組件,在組件最下方有一個“On Click”的區(qū)域,點擊該區(qū)域的“+”號,可以添加一個觸發(fā)項,觸發(fā)項前面可以選擇模型,之后添加讓模型變化的腳本,當(dāng)點擊了該按鈕之后就會調(diào)用選擇對象的制定腳本。如圖9、10所示,離心泵開啟按鈕及現(xiàn)場畫面按鈕均添加了點擊事件和相應(yīng)功能的腳本,實現(xiàn)仿真操作。上述功能的腳本主要代碼如下:

      Button btn= yourButton.GetComponent

      安义县| 阿坝| 北海市| 图们市| 大兴区| 永寿县| 泊头市| 贵阳市| 静海县| 广宁县| 五常市| 右玉县| 大足县| 共和县| SHOW| 永泰县| 永城市| 察哈| 三原县| 潼南县| 象山县| 淮阳县| 西安市| 区。| 罗平县| 南江县| 西昌市| 株洲市| 乌兰县| 郯城县| 隆回县| 禄丰县| 邵阳市| 浦北县| 蓝田县| 抚松县| 连云港市| 任丘市| 永修县| 盐池县| 德安县|