基于3DSMAX和Unity3D的末制导炮弹射击准备虚拟训练系统设计

2021-08-06 11:08徐敬青周晓东
兵器装备工程学报 2021年7期
关键词:制导炮弹射击

徐敬青,崔 平,文 健,周晓东

(陆军工程大学石家庄校区,石家庄 050003)

1 引言

末制导炮弹是由弹舱、控制舱、发射部三大部分组成,其射击准备过程中各种装定操作比普通榴弹也要复杂得多。为了解决实装训练操作复杂、错误操作风险大的问题,部队配发了末制导炮弹训练弹,用于部队和院校日常教学训练。在运用末制导炮弹训练弹进行射击准备的教学训练实践中,总结了如下问题:① 受训练弹配备数量限制,当参训人数较多时,不能全面展开;② 初次操作训练弹,由于弹体较重,往往容易发生磕碰,甚至造成学员受伤、损坏装备;③ 采用训练弹进行教学训练,需要大量专门的时间和场地,导致在训练的时间和空间上局限性大。虚拟训练系统具有安全、经济、可控、可重复、不受气候条件和场地空间限制等特点,因此,为满足末制导炮弹射击准备的训练需求[1],本研究基于3DSMAX和Unity3D软件对末制导炮弹射击准备虚拟训练系统进行了设计开发。

2 功能设计

末制导炮弹射击准备虚拟训练系统,主要满足学生课上课下在线自主训练和操作技能考核的教学需求,为此针对虚拟训练系统的功能进行了设计,如图1所示。

图1 功能模块总体设计框图

围绕学员能力培养的目标,按照装备原理、构造作用与使用训练融合培养的思路,对系统总体功能进行设计,将整个系统分为5个大的功能模块:静态展示、训练演示、虚拟训练、训练考核、训练帮助。

静态展示通过对操作对象和工具的三维建模,用以展示射击准备过程中末制导炮弹的基本原理和构造,以及所用的工具,实现将装备构造原理嵌入到使用训练操作中,进一步加深学员对装备基本知识的理解。

训练演示通过设计虚拟仿真操作动画,展示末制导炮弹射击准备规范的操作步骤,用以指导学员按照规范的操作步骤进行训练。

虚拟训练是整个模块系统的核心,学员进入该模块后,能够在系统的指导下进行射击准备过程中技术检查、装定和对接操作训练,当操作出现错误时,系统能够自动提醒,直至正确为止,并且能重复训练,直至完全掌握操作要领。

训练考核用于对学员射击准备操作技能的考核,学员自主完成全部操作,系统根据操作步骤正确与否,自动给出训练成绩,并给出错误提示。

训练帮助主要内容有末制导炮弹射击操作的基本流程,操作中容易出现的问题,以及虚拟训练系统的操作方法,帮助学员快速掌握操作方法。

3 系统开发

末制导炮弹虚拟训练系统设计采用Unity3D软件,该软件是一款跨平台的专业游戏、动画引擎,用它创建的游戏、动画可以在浏览器、移动设备乃至游戏机等几乎所有常见平台上运行,Unity3D在虚拟训练系统开发方面也得到了广泛应用[2-4]。本文以Unity3D为平台结合三维建模软件3DSMAX介绍了末制导炮弹射击准备虚拟训练系统的开发过程与关键技术。

虚拟训练系统开发过程一般需要经过三维建模、动作设计、模型导入、环境设置、脚本编写、生成发布文件等过程,开发流程如图2所示。

图2 系统开发流程框图

3.1 三维建模

3DS MAX是Autodesk公司开发的三维模型制作和渲染软件。由于其容易操作、价格低廉、扩展性好、插件丰富、建模功能强大、和其他软件相互配合、仿真程度高等优点,被广泛用于各个设计制作领域[5]。在末制导炮弹射击准备虚拟训练系统设计中,主要用到了3DSMAX软件创建模型、调配材质、渲染、动画合成四大基本功能。

1) 创建模型:创建模型是3DSMAX工作开始的第一步,在对末制导炮弹及射击准备工具的建模过程中,运用了多边形建模、切割、分离、克隆等多个功能,完成了模型的创建。

2) 材质编辑器:材质编辑器功能在于模型材质的创建和调节,也可以用来创建环境和灯光投影效果,使用材质编辑器调配合适的材质,使模型更接近于真实情况。

3) 渲染:是将场景中的各类元素处理成图像的形式,并按照用户的需求决定输出图像的质量。部分模型如图3~图5所示。

图3 包装箱模型

图4 末制导炮弹弹舱模型

图5 部分操作工具模型

3.2 动画设计

3DSMAX不仅能用来对硬件模型进行建模,而且还能进行模型动作的设计以及动画的生成。只有在3DSMAX中对动作设计好才能在Unity3D里面正确的装载出所需要的虚拟训练过程。根据末制导炮弹射击准备操作特点,在设计中首先将有带动关系的物体连接父子关系,就是父物体带动子物体动作,并且更改物体轴心,比方以开箱操作打开包装箱锁扣为例,需要在操作时手动掀开合页,同时锁轴运动,因此需要建立合页和锁轴之间的父子关系,如图6所示。

图6 添加父子关系界面

下面以末制导炮弹包装箱锁扣开合动作为例介绍动画设计过程。如图7所示,首先开启自动关键点功能,点击钥匙图标,在滚条指定方向创建一个3种颜色的点,红颜色代表位移,绿颜色代表旋转,蓝颜色代表缩放。移动滚条移动至20位置,将锁扣前端向上旋转,20位置会生成一个绿色代表旋转的关键点,将滚条移至40位置,将锁扣前端转回来,选择锁扣合页,开启自动关键点功能,点击钥匙图标在滚条指定方向创建一个3种颜色的点,移至20位置,向上旋转合页,使其做出开锁扣时的动作,移至40位置,将合页旋下,使它垂落锁扣前端。

图7 设置旋转合页动作界面

当所有的动画做好之后,为所有做好动画的模型打包,查看关键点是否齐全,查验无误后即可导入Unity3D能实现系统的运行。

3.3 导入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().sharedMaterial.color;//获取开关初始原色

}

void OnMouseEnter() {//鼠标移动至引信作用方式开关上后执行此方法

GetComponent().material.color=mouseOverColor;//开关显示颜色变为黄色

}

void OnMouseExit() {//鼠标离开引信作用方式开关上后执行此方法

GetComponent().material.color=originalColor;//开关显示颜色变为原色

}

void Update() {//更新方法

if(bf == false) {//变更开关状态后

xOjb=GameObject.Find("P2_GJ02_001");//寻找场景内"P2_GJ02_001"物体;

xOjb.GetComponent().enabled=false;//隐藏此物体

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().enabled=true;//显示此物体

xOjb=GameObject.Find("PD2");//寻找物体"PD2"

xOjb.GetComponent().CrossFade("T005");//获取此物体动画组件并播放动画

bf=false;//变更开关状态执行更新方法

}

} else {//如果选取工具不正确执行一下方法

GJ=true;

}

}

当执行完上述程序后,引信的装定方式改变,如图8(b)(c)所示。

3.4 训练考核的实现

为了进一步考核学习者在虚拟训练过程的掌握效果,系统设计了训练考核模块。本系统训练考核的实现方式是:在操作的过程中,如果出现操作错误会提示学习者,并且每次提示都会在基础分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 训练考核界面

4 生成发布文件

在Unity3D中完成脚本编写后,将各模块进行系统集成,最终打包生成网页版运行系统,系统主文件名后缀为.html,是一个网页格式的文件[12]。系统在单机运行时,只需要双击.html后缀文件,尽可进入运行界面,借助Unity WebPlayer插件,可将虚拟训练系统发布到网上使用。运行界面如图10所示。

图10 集成后训练系统界面

5 结论

针对末制导炮弹射击准备虚拟训练需求,基于3DSMAX和Unity3D软件开发了末制导炮弹射击准备虚拟训练系统,详细介绍了开发流程,完成3DSMAX动画设计与Unity3D脚本编写过程,达到了系统开发目标,为开发其他武器装备虚拟训练条件提供了借鉴。

猜你喜欢
制导炮弹射击
画与理
多飞行器突防打击一体化微分对策制导律设计
树上长“炮弹”
THAAD增程型拦截弹预测制导方法
高超声速伸缩式变形飞行器再入制导方法
打靶训练
装填炮弹
“炮弹”表妹
盾和弹之间的那点事(九)
积木炮弹