徐敬青,崔 平,文 健,周曉東
(陸軍工程大學石家莊校區,石家莊 050003)
末制導炮彈是由彈艙、控制艙、發射部三大部分組成,其射擊準備過程中各種裝定操作比普通榴彈也要復雜得多。為了解決實裝訓練操作復雜、錯誤操作風險大的問題,部隊配發了末制導炮彈訓練彈,用于部隊和院校日常教學訓練。在運用末制導炮彈訓練彈進行射擊準備的教學訓練實踐中,總結了如下問題:① 受訓練彈配備數量限制,當參訓人數較多時,不能全面展開;② 初次操作訓練彈,由于彈體較重,往往容易發生磕碰,甚至造成學員受傷、損壞裝備;③ 采用訓練彈進行教學訓練,需要大量專門的時間和場地,導致在訓練的時間和空間上局限性大。虛擬訓練系統具有安全、經濟、可控、可重復、不受氣候條件和場地空間限制等特點,因此,為滿足末制導炮彈射擊準備的訓練需求[1],本研究基于3DSMAX和Unity3D軟件對末制導炮彈射擊準備虛擬訓練系統進行了設計開發。
末制導炮彈射擊準備虛擬訓練系統,主要滿足學生課上課下在線自主訓練和操作技能考核的教學需求,為此針對虛擬訓練系統的功能進行了設計,如圖1所示。

圖1 功能模塊總體設計框圖
圍繞學員能力培養的目標,按照裝備原理、構造作用與使用訓練融合培養的思路,對系統總體功能進行設計,將整個系統分為5個大的功能模塊:靜態展示、訓練演示、虛擬訓練、訓練考核、訓練幫助。
靜態展示通過對操作對象和工具的三維建模,用以展示射擊準備過程中末制導炮彈的基本原理和構造,以及所用的工具,實現將裝備構造原理嵌入到使用訓練操作中,進一步加深學員對裝備基本知識的理解。
訓練演示通過設計虛擬仿真操作動畫,展示末制導炮彈射擊準備規范的操作步驟,用以指導學員按照規范的操作步驟進行訓練。
虛擬訓練是整個模塊系統的核心,學員進入該模塊后,能夠在系統的指導下進行射擊準備過程中技術檢查、裝定和對接操作訓練,當操作出現錯誤時,系統能夠自動提醒,直至正確為止,并且能重復訓練,直至完全掌握操作要領。
訓練考核用于對學員射擊準備操作技能的考核,學員自主完成全部操作,系統根據操作步驟正確與否,自動給出訓練成績,并給出錯誤提示。
訓練幫助主要內容有末制導炮彈射擊操作的基本流程,操作中容易出現的問題,以及虛擬訓練系統的操作方法,幫助學員快速掌握操作方法。
末制導炮彈虛擬訓練系統設計采用Unity3D軟件,該軟件是一款跨平臺的專業游戲、動畫引擎,用它創建的游戲、動畫可以在瀏覽器、移動設備乃至游戲機等幾乎所有常見平臺上運行,Unity3D在虛擬訓練系統開發方面也得到了廣泛應用[2-4]。本文以Unity3D為平臺結合三維建模軟件3DSMAX介紹了末制導炮彈射擊準備虛擬訓練系統的開發過程與關鍵技術。
虛擬訓練系統開發過程一般需要經過三維建模、動作設計、模型導入、環境設置、腳本編寫、生成發布文件等過程,開發流程如圖2所示。

圖2 系統開發流程框圖
3DS MAX是Autodesk公司開發的三維模型制作和渲染軟件。由于其容易操作、價格低廉、擴展性好、插件豐富、建模功能強大、和其他軟件相互配合、仿真程度高等優點,被廣泛用于各個設計制作領域[5]。在末制導炮彈射擊準備虛擬訓練系統設計中,主要用到了3DSMAX軟件創建模型、調配材質、渲染、動畫合成四大基本功能。
1) 創建模型:創建模型是3DSMAX工作開始的第一步,在對末制導炮彈及射擊準備工具的建模過程中,運用了多邊形建模、切割、分離、克隆等多個功能,完成了模型的創建。
2) 材質編輯器:材質編輯器功能在于模型材質的創建和調節,也可以用來創建環境和燈光投影效果,使用材質編輯器調配合適的材質,使模型更接近于真實情況。
3) 渲染:是將場景中的各類元素處理成圖像的形式,并按照用戶的需求決定輸出圖像的質量。部分模型如圖3~圖5所示。

圖3 包裝箱模型

圖4 末制導炮彈彈艙模型

圖5 部分操作工具模型
3DSMAX不僅能用來對硬件模型進行建模,而且還能進行模型動作的設計以及動畫的生成。只有在3DSMAX中對動作設計好才能在Unity3D里面正確的裝載出所需要的虛擬訓練過程。根據末制導炮彈射擊準備操作特點,在設計中首先將有帶動關系的物體連接父子關系,就是父物體帶動子物體動作,并且更改物體軸心,比方以開箱操作打開包裝箱鎖扣為例,需要在操作時手動掀開合頁,同時鎖軸運動,因此需要建立合頁和鎖軸之間的父子關系,如圖6所示。

圖6 添加父子關系界面
下面以末制導炮彈包裝箱鎖扣開合動作為例介紹動畫設計過程。如圖7所示,首先開啟自動關鍵點功能,點擊鑰匙圖標,在滾條指定方向創建一個3種顏色的點,紅顏色代表位移,綠顏色代表旋轉,藍顏色代表縮放。移動滾條移動至20位置,將鎖扣前端向上旋轉,20位置會生成一個綠色代表旋轉的關鍵點,將滾條移至40位置,將鎖扣前端轉回來,選擇鎖扣合頁,開啟自動關鍵點功能,點擊鑰匙圖標在滾條指定方向創建一個3種顏色的點,移至20位置,向上旋轉合頁,使其做出開鎖扣時的動作,移至40位置,將合頁旋下,使它垂落鎖扣前端。

圖7 設置旋轉合頁動作界面
當所有的動畫做好之后,為所有做好動畫的模型打包,查看關鍵點是否齊全,查驗無誤后即可導入Unity3D能實現系統的運行。
Unity3D里面提供了聲音、圖形、渲染和物理等多種功能,可以對環境進行設置[6-7]。在3DSMAX中將整體模型創建、貼完材質、完成動畫設計后,就可將模型從3DSMAX中打包導出,直接保存到Unity3D工程文件夾中,保存為fbx格式[8-9]。在Unity3D中,首先創建一個新的Unity工程,將末制導炮彈及其相關工具器材模型從3DSMAX中導入到Unity3D的assets文件中,在Project窗口中就可看到模型了。在Unity3D中的主要開發工作是腳本的設計與實現。
Unity3D的腳本程序是基于Mono平臺運行,其內置了Monodelevop腳本編輯器,本文使用了Monodelevop中的C#語言進行對操作模型對象實施交互的輸入輸出控制,并通過將腳本程序加載至攝像機或模型對象上調試實現實時控制優化。由于在實現交互的過程中,需要使用到Unity3D中的碰撞檢測,本系統主要運用的是Box Collider。這里碰撞的作用是使鼠標切換UI,執行附在物體上的腳本命令,另外還模擬控制艙對接過程中的碰撞、裝定工具與控制艙接觸時的碰撞、控制艙與包裝箱之間的碰撞等等。
下面以裝定引信作用方式為例,敘述腳本如何驅動虛擬訓練過程。當未執行操作前,末制導炮彈處于未執行代碼狀態,當點擊界面左下角工具中的裝定扳手之后,將箭頭移動到引信裝定的工作位置,會產生圖8(a)所示動作。

圖8 裝定引信作用方式示意圖
當代碼執行完畢后,引信的工作方式從延期(Y)變成了慣性(G)。代碼設計如下:
using UnityEngine;
using System.Collections;
public class S19_PaoDan2_YinXinZhongLei:MonoBehaviour {
GameObject xOjb;//定義一個物體xOjb
bool bf=false;//定義開關顯示狀態
private Color mouseOverColor=Color.yellow;//定義變色
private Color originalColor;//定義原色
private bool GJ=false;//定義工具狀態
public GUIStyle mysty1;//定義GUI
void Start() {
bf=true;//出示顯示開關1
originalColor=GetComponent
}
void OnMouseEnter() {//鼠標移動至引信作用方式開關上后執行此方法
GetComponent
}
void OnMouseExit() {//鼠標離開引信作用方式開關上后執行此方法
GetComponent
}
void Update() {//更新方法
if(bf == false) {//變更開關狀態后
xOjb=GameObject.Find("P2_GJ02_001");//尋找場景內"P2_GJ02_001"物體;
xOjb.GetComponent
bf=true;//停止更新
}
}
void OnMouseUp()//鼠標點擊引信作用方式開關上后執行此方法
{
if(BianLiangC.gs_GongJu == "0002") {//如果選取工具正確執行一下方法
if(BianLiangC.gl_Step == 12) {//如果步驟狀態已達此步驟
xOjb=GameObject.Find("P2_GJ02_001");//尋找物體"P2_GJ02_001"
xOjb.GetComponent
xOjb=GameObject.Find("PD2");//尋找物體"PD2"
xOjb.GetComponent
bf=false;//變更開關狀態執行更新方法
}
} else {//如果選取工具不正確執行一下方法
GJ=true;
}
}
當執行完上述程序后,引信的裝定方式改變,如圖8(b)(c)所示。
為了進一步考核學習者在虛擬訓練過程的掌握效果,系統設計了訓練考核模塊。本系統訓練考核的實現方式是:在操作的過程中,如果出現操作錯誤會提示學習者,并且每次提示都會在基礎分100分上扣掉一定分值。訓練考核模塊的主要實現程序如下。
public void Updatechengji()
{//成績更新方法
if(tishi.gameObject.activeSelf == true)//如過提示打開返回不執行以下方法
return;
tishi.gameObject.SetActive(true);//顯示提示
if(chengji > 0)//如果成績不為0
chengji -= 5;//更新成績-5
else
chengji=0;//如果成績為0 不更新
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);
}
操作錯誤時,系統不運行正確的交互程序,表現為靜止狀態。當參考人員遇到沒有掌握或者遺忘的操作步驟時,使用圖示下方提示按鈕,系統就會運行上述程序步驟,在基礎分上扣掉分值,并且在后續操作中將會執行與上述相同的程序,對參考人員的考核成績作出評判。圖9是使用提示后,系統運行程序發生的狀態變化。虛擬訓練考核功能的實現為武器裝備訓練評估提供了重要支撐[10-11]。

圖9 訓練考核界面
在Unity3D中完成腳本編寫后,將各模塊進行系統集成,最終打包生成網頁版運行系統,系統主文件名后綴為.html,是一個網頁格式的文件[12]。系統在單機運行時,只需要雙擊.html后綴文件,盡可進入運行界面,借助Unity WebPlayer插件,可將虛擬訓練系統發布到網上使用。運行界面如圖10所示。

圖10 集成后訓練系統界面
針對末制導炮彈射擊準備虛擬訓練需求,基于3DSMAX和Unity3D軟件開發了末制導炮彈射擊準備虛擬訓練系統,詳細介紹了開發流程,完成3DSMAX動畫設計與Unity3D腳本編寫過程,達到了系統開發目標,為開發其他武器裝備虛擬訓練條件提供了借鑒。