基于Unity的高中化学AR教辅软件的开发
2019-11-27周海洋
周海洋
摘 要:AR(Augmented Reality)增強现实技术开发门槛低且具有很好的沉浸性,在教育方面有很好的应用前景。该文主要研究AR技术在高中化学教学中的应用,利用Unity3D和Vuforia的AR技术支持实现相关化学知识的AR立体展示。并借助C#语言实现一定的交互功能。借助AR的可视化、交互性能够激发学生的学习兴趣,提高学习效果。
关键词:Unity 3D;AR增强现实;3D模型
中图分类号:TP391 文献标志码:A
0 引言
AR增强现实技术现已广泛应用到军事、销售、娱乐、教育、技术、传媒、旅游、医疗等领域。相较VR虚拟现实技术来说,AR更加亲民,使用场景更加广泛,只需要一部智能手机,便可以享受AR增强现实技术带来的全新的视觉体验。同时AR技术开发门槛和开发成本更低,开发者可以快速的开发出一个AR应用的实例。该文研究AR技术在高中化学教学中的应用,借助3ds Max建立相关的3D模型,利用Unity3D游戏引擎和C#编程语言实现软件简单的UI界面设计和简单的人机交互功能,最后利用Vuforia的技术支持实现3D模型在现实环境中的AR立体展示。
1 问题的分析与3D模型的建立
选择3ds Max建立3D模型,因为3ds Max能够导出多种格式的文件,且Unity能够很好的支持这些格式,建立好的模型可以直接导入Unity进行后续工作,操作简单、工作高效。
这里以比较典型的2个知识点为例。
(1)乙醇和乙酸在浓硫酸加热环境下的酯化反应,一个分子的乙醇和一个分子的乙酸发生酯化反应之后产生一个分子的乙酸乙酯和一个分子的水,但是学生初学这部分的时候往往不能注意水分子是乙酸分子羧基中的羟基和乙醇分子羟基中的氢原子结合而成的,往往想当然的认为这个水分子是乙醇的羟基的乙酸羧基中的一个氢原子构成的。
(2)判断一个有机分子中的原子是否都在一个平面内,同学们往往要死背硬记那几个例子:乙烯、苯环、乙炔中所有的原子都在同一个平面内。同学们往往不能举一反三,象2个苯环组成的联苯中所有的原子可能处于同一平面,也有可能不处于同一平面。根据上述,利用3ds Max分别建立乙醇、乙酸、乙酸乙酯、乙烯、苯环、乙炔、联苯的球棍模型以及乙醇和乙酸反应的球棍模型动画。下面以乙酸的球棍模型为例演示操作流程,乙酸的球棍模型如图1所示。
2 模型的AR显示
目前Unity引擎所兼容的主流AR SDK有国产的Easy AR、苹果公司的AR Kit、高通公司的Vuforia和谷歌的AR Core。这里采用识别速度更快、更稳定的Vuforia。
首先登陆Vuforia的官网:https://developer.vuforia.com。然后创建一个这个工程所需要的Database,并且获取这个Database的License Key。接着上传需要识别的对象Target Image,最后下载这个Database,并且将之导入Unity编辑器。具体流程如图2所示。完成上述操作之后,还要对Unity编辑器进行一些简单的设置,才能流畅的进行AR应用的开发。首先,在Player Settings的Inspector面板下找到Settings for Android,勾选Virtual Reality Supported和Vuforia Augmented Realit两栏即可。然后在场景面板中创建一个ARCamera,打开ARCamera的Inspector面板,单击Opean Vuforia Engine Configuration,接着将在Vuforia官网获得的License Key黏贴到APP License Key一栏,就完成了基本的设置。
3 交互功能设计
该软件最终要在安卓和IOS系统上面运行,需要捕捉手指在屏幕上的运行轨迹来实现相应的交互功能。新版本的Unity编辑器只能使用C#脚本语言,这里借助Microsoft Visual Studio来编写C#脚本。放大、缩小手势的识别和实现AR模型放大、缩小的C#脚本。
public class Enlarge : MonoBehaviour {
Vector2 oldPos1;
Vector2 oldPos2;
void Update()
{
if (Input .touchCount ==2)//检测是否有2根手指触摸屏幕
{
if (Input.GetTouch(0).phase == TouchPhase.Moved || Input.GetTouch(1).phase == TouchPhase.Moved)//检测手指是否发生位移
{
Vector2 temPos1 = Input.GetTouch(0).position;
Vector2 temPos2 = Input.GetTouch(1).position;
if (IsEnlarge(oldPos1, oldPos2, temPos1, temPos2))
{
float oldScale = transform.localScale.x;
float newScale = oldScale * 1.025f;
transform.localScale = new Vector3(newScale, newScale, newScale);
//放大AR模型
}
else
{
float oldScale = transform.localScale.x;
float newScale = oldScale /1.025f;
transform.localScale = new Vector3(newScale, newScale, newScale);
//缩小AR模型
}
oldPos1 = temPos1;
oldPos2 = temPos2;
}
}
}
//判断手势的布尔函数
bool IsEnlarge(Vector2 op1,Vector2 op2,Vector2 np1,Vector2 np2)
{
float Length1 = Mathf.Sqrt((op1.x - op2.x) * (op1.x - op2.x) + (op1.y - op2.y) * (op1.y * op2.y));
float Length2 = Mathf.Sqrt((np1.x - np2.x) * (np1.x - np2.x) + (np1.y - np2.y) * (np1.y * np2.y));
if (Length1 > Length2)
{
return false;
} else
return true;
}
}
实现单指旋转AR模型的C#脚本;
public class PlayerRotate : MonoBehaviour {
float xSpeed = 150.0f;
float ySpeed = 150.0f;
void Update () {
if (Input .GetMouseButton (0))
{
if (Input.touchCount ==1) {
if (Input .GetTouch (0).phase==TouchPhase .Moved)
{
transform.Rotate(Vector3.up * Input.GetAxis(“Mouse X”) * -xSpeed * Time.deltaTime, Space.World);
transform.Rotate(Vector3 .right * Input.GetAxis(“Mouse Y”) * -xSpeed * Time.deltaTime, Space.World);
}
}
}
}
}
將上述C#脚本挂载在AR模型上面经过编译、运行测试,可实现相应的人机交互功能。
4 效果展示
完成相关功能设计后,在配置好Java环境的计算机上面可以将该工程打包发布到安卓平台。利用安卓手机测试的效果如图3所示。
5 结语
该文研究了AR技术在高中化学教育当中的应用,并且阐明了AR应用的开发流程。开发得到的AR教辅软件展示效果较为真实,使用者可以通过这个软件非常直观的了解一些难以理解的化学知识点,就像该文中说到的同分异构体的理解。
现如今几乎人手一部手机,而AR技术在移动端的应用依然具有很大的潜力,学生可以随时随地通过手机AR来学习,来探索美丽的科学世界。移动端的AR教辅应用的开发在教育方面仍具有重要的研究价值和意义。
参考文献
[1]王喻晨.基于Unity3D的桥梁VR仿真设计[J].中国新技术新产品,2019(1):17-18.
[2]人民教育出版社课程教材研究所化学课程教材研究开发中心.化学[M].北京:人民教育出版社,2004:56-57.
[3]雷全智.基于Unity3D技术的三维课件开发与实现[J].南昌师范学院学报,2018(6):25-28.
[4]秦凡,朱泽,胡松花,等.基于Unity的虚拟校园漫游系统的实现[J].电子世界,2018(14):178-179.
[5]刘伟,钟欢,雷传飞,等.基于Unity3D的飞机引擎拆装虚拟仿真[J].中国科技博览,2019(6):238.