徐敬青,崔 平,文 健,周曉東
(陸軍工程大學石家莊校區(qū),石家莊 050003)
末制導炮彈是由彈艙、控制艙、發(fā)射部三大部分組成,其射擊準備過程中各種裝定操作比普通榴彈也要復(fù)雜得多。為了解決實裝訓練操作復(fù)雜、錯誤操作風險大的問題,部隊配發(fā)了末制導炮彈訓練彈,用于部隊和院校日常教學訓練。在運用末制導炮彈訓練彈進行射擊準備的教學訓練實踐中,總結(jié)了如下問題:① 受訓練彈配備數(shù)量限制,當參訓人數(shù)較多時,不能全面展開;② 初次操作訓練彈,由于彈體較重,往往容易發(fā)生磕碰,甚至造成學員受傷、損壞裝備;③ 采用訓練彈進行教學訓練,需要大量專門的時間和場地,導致在訓練的時間和空間上局限性大。虛擬訓練系統(tǒng)具有安全、經(jīng)濟、可控、可重復(fù)、不受氣候條件和場地空間限制等特點,因此,為滿足末制導炮彈射擊準備的訓練需求[1],本研究基于3DSMAX和Unity3D軟件對末制導炮彈射擊準備虛擬訓練系統(tǒng)進行了設(shè)計開發(fā)。
末制導炮彈射擊準備虛擬訓練系統(tǒng),主要滿足學生課上課下在線自主訓練和操作技能考核的教學需求,為此針對虛擬訓練系統(tǒng)的功能進行了設(shè)計,如圖1所示。
圖1 功能模塊總體設(shè)計框圖
圍繞學員能力培養(yǎng)的目標,按照裝備原理、構(gòu)造作用與使用訓練融合培養(yǎng)的思路,對系統(tǒng)總體功能進行設(shè)計,將整個系統(tǒng)分為5個大的功能模塊:靜態(tài)展示、訓練演示、虛擬訓練、訓練考核、訓練幫助。
靜態(tài)展示通過對操作對象和工具的三維建模,用以展示射擊準備過程中末制導炮彈的基本原理和構(gòu)造,以及所用的工具,實現(xiàn)將裝備構(gòu)造原理嵌入到使用訓練操作中,進一步加深學員對裝備基本知識的理解。
訓練演示通過設(shè)計虛擬仿真操作動畫,展示末制導炮彈射擊準備規(guī)范的操作步驟,用以指導學員按照規(guī)范的操作步驟進行訓練。
虛擬訓練是整個模塊系統(tǒng)的核心,學員進入該模塊后,能夠在系統(tǒng)的指導下進行射擊準備過程中技術(shù)檢查、裝定和對接操作訓練,當操作出現(xiàn)錯誤時,系統(tǒng)能夠自動提醒,直至正確為止,并且能重復(fù)訓練,直至完全掌握操作要領(lǐng)。
訓練考核用于對學員射擊準備操作技能的考核,學員自主完成全部操作,系統(tǒng)根據(jù)操作步驟正確與否,自動給出訓練成績,并給出錯誤提示。
訓練幫助主要內(nèi)容有末制導炮彈射擊操作的基本流程,操作中容易出現(xiàn)的問題,以及虛擬訓練系統(tǒng)的操作方法,幫助學員快速掌握操作方法。
末制導炮彈虛擬訓練系統(tǒng)設(shè)計采用Unity3D軟件,該軟件是一款跨平臺的專業(yè)游戲、動畫引擎,用它創(chuàng)建的游戲、動畫可以在瀏覽器、移動設(shè)備乃至游戲機等幾乎所有常見平臺上運行,Unity3D在虛擬訓練系統(tǒng)開發(fā)方面也得到了廣泛應(yīng)用[2-4]。本文以Unity3D為平臺結(jié)合三維建模軟件3DSMAX介紹了末制導炮彈射擊準備虛擬訓練系統(tǒng)的開發(fā)過程與關(guān)鍵技術(shù)。
虛擬訓練系統(tǒng)開發(fā)過程一般需要經(jīng)過三維建模、動作設(shè)計、模型導入、環(huán)境設(shè)置、腳本編寫、生成發(fā)布文件等過程,開發(fā)流程如圖2所示。
圖2 系統(tǒng)開發(fā)流程框圖
3DS MAX是Autodesk公司開發(fā)的三維模型制作和渲染軟件。由于其容易操作、價格低廉、擴展性好、插件豐富、建模功能強大、和其他軟件相互配合、仿真程度高等優(yōu)點,被廣泛用于各個設(shè)計制作領(lǐng)域[5]。在末制導炮彈射擊準備虛擬訓練系統(tǒng)設(shè)計中,主要用到了3DSMAX軟件創(chuàng)建模型、調(diào)配材質(zhì)、渲染、動畫合成四大基本功能。
1) 創(chuàng)建模型:創(chuàng)建模型是3DSMAX工作開始的第一步,在對末制導炮彈及射擊準備工具的建模過程中,運用了多邊形建模、切割、分離、克隆等多個功能,完成了模型的創(chuàng)建。
2) 材質(zhì)編輯器:材質(zhì)編輯器功能在于模型材質(zhì)的創(chuàng)建和調(diào)節(jié),也可以用來創(chuàng)建環(huán)境和燈光投影效果,使用材質(zhì)編輯器調(diào)配合適的材質(zhì),使模型更接近于真實情況。
3) 渲染:是將場景中的各類元素處理成圖像的形式,并按照用戶的需求決定輸出圖像的質(zhì)量。部分模型如圖3~圖5所示。
圖3 包裝箱模型
圖4 末制導炮彈彈艙模型
圖5 部分操作工具模型
3DSMAX不僅能用來對硬件模型進行建模,而且還能進行模型動作的設(shè)計以及動畫的生成。只有在3DSMAX中對動作設(shè)計好才能在Unity3D里面正確的裝載出所需要的虛擬訓練過程。根據(jù)末制導炮彈射擊準備操作特點,在設(shè)計中首先將有帶動關(guān)系的物體連接父子關(guān)系,就是父物體帶動子物體動作,并且更改物體軸心,比方以開箱操作打開包裝箱鎖扣為例,需要在操作時手動掀開合頁,同時鎖軸運動,因此需要建立合頁和鎖軸之間的父子關(guān)系,如圖6所示。
圖6 添加父子關(guān)系界面
下面以末制導炮彈包裝箱鎖扣開合動作為例介紹動畫設(shè)計過程。如圖7所示,首先開啟自動關(guān)鍵點功能,點擊鑰匙圖標,在滾條指定方向創(chuàng)建一個3種顏色的點,紅顏色代表位移,綠顏色代表旋轉(zhuǎn),藍顏色代表縮放。移動滾條移動至20位置,將鎖扣前端向上旋轉(zhuǎn),20位置會生成一個綠色代表旋轉(zhuǎn)的關(guān)鍵點,將滾條移至40位置,將鎖扣前端轉(zhuǎn)回來,選擇鎖扣合頁,開啟自動關(guān)鍵點功能,點擊鑰匙圖標在滾條指定方向創(chuàng)建一個3種顏色的點,移至20位置,向上旋轉(zhuǎn)合頁,使其做出開鎖扣時的動作,移至40位置,將合頁旋下,使它垂落鎖扣前端。
圖7 設(shè)置旋轉(zhuǎn)合頁動作界面
當所有的動畫做好之后,為所有做好動畫的模型打包,查看關(guān)鍵點是否齊全,查驗無誤后即可導入Unity3D能實現(xiàn)系統(tǒng)的運行。
Unity3D里面提供了聲音、圖形、渲染和物理等多種功能,可以對環(huán)境進行設(shè)置[6-7]。在3DSMAX中將整體模型創(chuàng)建、貼完材質(zhì)、完成動畫設(shè)計后,就可將模型從3DSMAX中打包導出,直接保存到Unity3D工程文件夾中,保存為fbx格式[8-9]。在Unity3D中,首先創(chuàng)建一個新的Unity工程,將末制導炮彈及其相關(guān)工具器材模型從3DSMAX中導入到Unity3D的assets文件中,在Project窗口中就可看到模型了。在Unity3D中的主要開發(fā)工作是腳本的設(shè)計與實現(xiàn)。
Unity3D的腳本程序是基于Mono平臺運行,其內(nèi)置了Monodelevop腳本編輯器,本文使用了Monodelevop中的C#語言進行對操作模型對象實施交互的輸入輸出控制,并通過將腳本程序加載至攝像機或模型對象上調(diào)試實現(xiàn)實時控制優(yōu)化。由于在實現(xiàn)交互的過程中,需要使用到Unity3D中的碰撞檢測,本系統(tǒng)主要運用的是Box Collider。這里碰撞的作用是使鼠標切換UI,執(zhí)行附在物體上的腳本命令,另外還模擬控制艙對接過程中的碰撞、裝定工具與控制艙接觸時的碰撞、控制艙與包裝箱之間的碰撞等等。
下面以裝定引信作用方式為例,敘述腳本如何驅(qū)動虛擬訓練過程。當未執(zhí)行操作前,末制導炮彈處于未執(zhí)行代碼狀態(tài),當點擊界面左下角工具中的裝定扳手之后,將箭頭移動到引信裝定的工作位置,會產(chǎn)生圖8(a)所示動作。
圖8 裝定引信作用方式示意圖
當代碼執(zhí)行完畢后,引信的工作方式從延期(Y)變成了慣性(G)。代碼設(shè)計如下:
using UnityEngine;
using System.Collections;
public class S19_PaoDan2_YinXinZhongLei:MonoBehaviour {
GameObject xOjb;//定義一個物體xOjb
bool bf=false;//定義開關(guān)顯示狀態(tài)
private Color mouseOverColor=Color.yellow;//定義變色
private Color originalColor;//定義原色
private bool GJ=false;//定義工具狀態(tài)
public GUIStyle mysty1;//定義GUI
void Start() {
bf=true;//出示顯示開關(guān)1
originalColor=GetComponent
}
void OnMouseEnter() {//鼠標移動至引信作用方式開關(guān)上后執(zhí)行此方法
GetComponent
}
void OnMouseExit() {//鼠標離開引信作用方式開關(guān)上后執(zhí)行此方法
GetComponent } void Update() {//更新方法 if(bf == false) {//變更開關(guān)狀態(tài)后 xOjb=GameObject.Find("P2_GJ02_001");//尋找場景內(nèi)"P2_GJ02_001"物體; xOjb.GetComponent bf=true;//停止更新 } } void OnMouseUp()//鼠標點擊引信作用方式開關(guān)上后執(zhí)行此方法 { if(BianLiangC.gs_GongJu == "0002") {//如果選取工具正確執(zhí)行一下方法 if(BianLiangC.gl_Step == 12) {//如果步驟狀態(tài)已達此步驟 xOjb=GameObject.Find("P2_GJ02_001");//尋找物體"P2_GJ02_001" xOjb.GetComponent xOjb=GameObject.Find("PD2");//尋找物體"PD2" xOjb.GetComponent bf=false;//變更開關(guān)狀態(tài)執(zhí)行更新方法 } } else {//如果選取工具不正確執(zhí)行一下方法 GJ=true; } } 當執(zhí)行完上述程序后,引信的裝定方式改變,如圖8(b)(c)所示。 為了進一步考核學習者在虛擬訓練過程的掌握效果,系統(tǒng)設(shè)計了訓練考核模塊。本系統(tǒng)訓練考核的實現(xiàn)方式是:在操作的過程中,如果出現(xiàn)操作錯誤會提示學習者,并且每次提示都會在基礎(chǔ)分100分上扣掉一定分值。訓練考核模塊的主要實現(xiàn)程序如下。 public void Updatechengji() {//成績更新方法 if(tishi.gameObject.activeSelf == true)//如過提示打開返回不執(zhí)行以下方法 return; tishi.gameObject.SetActive(true);//顯示提示 if(chengji > 0)//如果成績不為0 chengji -= 5;//更新成績-5 else chengji=0;//如果成績?yōu)? 不更新 chengjitext.text="成績:"+chengji;//更新顯示的成績 biaodanchengji.text=chengji.ToString();//更新記錄表單的成績 string sd=jilutext.text; //記錄提示 sd += tishi.text+"-5分"+"
";//將記錄的提示添加到表單 jilutext.text=sd;//更新記錄 } public void tishigam(){//隱藏提示方法 if(tishi.gameObject.activeSelf == true) tishi.gameObject.SetActive(false); } 操作錯誤時,系統(tǒng)不運行正確的交互程序,表現(xiàn)為靜止狀態(tài)。當參考人員遇到?jīng)]有掌握或者遺忘的操作步驟時,使用圖示下方提示按鈕,系統(tǒng)就會運行上述程序步驟,在基礎(chǔ)分上扣掉分值,并且在后續(xù)操作中將會執(zhí)行與上述相同的程序,對參考人員的考核成績作出評判。圖9是使用提示后,系統(tǒng)運行程序發(fā)生的狀態(tài)變化。虛擬訓練考核功能的實現(xiàn)為武器裝備訓練評估提供了重要支撐[10-11]。 圖9 訓練考核界面 在Unity3D中完成腳本編寫后,將各模塊進行系統(tǒng)集成,最終打包生成網(wǎng)頁版運行系統(tǒng),系統(tǒng)主文件名后綴為.html,是一個網(wǎng)頁格式的文件[12]。系統(tǒng)在單機運行時,只需要雙擊.html后綴文件,盡可進入運行界面,借助Unity WebPlayer插件,可將虛擬訓練系統(tǒng)發(fā)布到網(wǎng)上使用。運行界面如圖10所示。 圖10 集成后訓練系統(tǒng)界面 針對末制導炮彈射擊準備虛擬訓練需求,基于3DSMAX和Unity3D軟件開發(fā)了末制導炮彈射擊準備虛擬訓練系統(tǒng),詳細介紹了開發(fā)流程,完成3DSMAX動畫設(shè)計與Unity3D腳本編寫過程,達到了系統(tǒng)開發(fā)目標,為開發(fā)其他武器裝備虛擬訓練條件提供了借鑒。3.4 訓練考核的實現(xiàn)
4 生成發(fā)布文件
5 結(jié)論