虛擬現實之機械拆裝項目架構


 

 一般的機械拆卸模擬用來培訓演示,例如大型機械的拆裝都是非常耗時的,需要一個軟件來模擬下拆裝的步驟,給不熟練的工人演示注意事項等等。應用非常廣泛。因此設計一個通用的框架,可以很好適應變化的需求。

使用unity可以很方便的開發虛擬現實類的軟件,程序部分只需要普通的程序員即可完成整個項目。

機械的拆裝模擬是最近兩年比較常見的項目,大量的訂單和需要制作的模擬。阿亮在大二的時候也是接到了一個這樣的單子。就是對某大型機械設備進行拆裝,維修演示。

先說一下這個項目的常規方案(一開始我也是這么做的),就是利用unity的動畫系統,制作每個零件的動畫,如位移,旋轉等。制作完成后,通過程序去調用播放零件的動畫,來實現拆裝的演示。

這個方案的缺點是非常明顯的,一是,零件繁多,制作動畫本身就是個耗時較長的活,總體下來制作時長。二,動畫系統的不完善和平滑過渡的調整,都將困擾開發者,使動畫的制作不穩定,效率低下。三,動畫做完后,動畫的修改,如移動的速度,位置,角度等調整,又是一個龐大的任務,而代碼並不能幫上忙,這對項目的維護是非常要命的。四,擴展性極差,如果有新的零件填進來,或者新的動作都將考驗系統的適應能力,而動畫系統下的架構是難以適應這一變化的。

總之,除非你做的模擬零件比較少,而且一切都是固定的,可以采用上述方案。否則,你的項目就算成功了,也花費了大量的時間和精力,這些都是金錢。

一般的機械模擬,零件斷然不會少,動作繁多,有先后的順序。移動的方案也是不確定的,例如零件的位置,放置的角度等等。零件的移動速度有時也是有要求的。例如小零件移動的快,大零件移動的慢。

基於以上要求和特點,關於機械的模擬,應該使用transform來實現。底層寫好零件的移動,旋轉,速度等接口。同時旋轉也是不確定軸向的,有時候旋轉的軸並不在物體身上(不規則零件),所以底層接口應該考慮到這些。如果不想寫,可以借助ITween,並封裝好相關函數。

本文不會提供源碼,只提供開發的方案和思路。

接着說,底層實現移動是第一步,接下來是設計的第二步,第一步中普通的程序員完全可以勝任。

因為有大量的零件,你不可能為每個零件都寫一個移動方法。所以我們需要定義一些通用的規則,例如移動,旋轉等,並生成相應的字段。或許你已經猜到了,第二步就是做一個數據持久層,關於這個數據庫的設計,我就不詳談了,看個人需求。定義零件的移動,旋轉,位置,速度等參數,然后存起來,運行程序時讀取。這樣的好處是,可以動態的修改零件的動作。即使不會編程,不懂unity的也可以通過直接修改數據達到改變機械模擬的“動畫”。關於這部分的設計還是比較簡單的,看具體需求而定。關於數據庫,一般本地數據庫足矣。現成的數據庫有sqlite,但是跨平台不好。Xml,簡單方便,跨平台。具體可以看我以前的博客。

第三步,算法結構的封裝。這個層次主要負責零件操作的設計,提供零件的各種操作方法,如添加動作,修改動作等等,無外乎一些位置,角度,速度的訪問等等。這個類一般的程序員也能做好,關鍵是看各位的具體需求了。

第四步,做個UI,一個可視化的“動畫”編輯器。此動畫編輯器非unity的動畫編輯器。可以理解為,對前三步的方法的調用。如果直接在數據庫中修改參數,沒有直觀的感受,調參數也是非常麻煩,每次改完重新打開程序才看到效果,因此需要制作一個零件的動作編輯器來完成。

具體的做法是,在一個場景中,加載所有的零件,然后通過鼠標點擊獲取零件。完成這個功能很簡單,所有的零件加個meshcollder,然后使用射線碰撞就行了。因為零件數量較多,我們可以動態的添加collder組件,這個過程比較緩慢,極容易卡頓,建議使用協程。選定零件之后,就可以對零件的動作進行編輯了。具體的UI如何設計就看大家的需求了,但是功能無外乎,移動(選擇軸向),旋轉(選擇軸向),速度參數等等。為了方便查看還可以添加預覽功能,編輯完成后就可以查看零件的移動軌跡了。話說這個功能也是很好完成的,使用一個表,存儲起點位置,然后讀取一下移動參數就行了。

當然快捷鍵也可以加入UI設計中,其目的就是方便零件動作的設計。到后期,還可以模擬unity引擎對物體的操作,鼠標拖拉零件,通過類似的錨點,存儲關鍵點,設置速度等等,一個簡單方便的“動畫”編輯器就很完美了。

動畫編輯器可以作為高級功能,讓用戶自定義零件的動作,模擬拆卸動畫的同時,還能實時修改。這樣的話,軟件擁有更好的靈活性。同時,還可以方便的添加新零件。不僅如此,在面對一個新的模擬項目時,無需再修改代碼,直接讓美工做好的模型放到指定的文件夾下就ok了。這要看你的資源加載設計了。

 

 

本文連接:http://www.cnblogs.com/jqg-aliang/p/4825460.html,轉載請申明出處,謝謝!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM