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