当前位置:
首页 >
基于unity+vuforia的VR二级齿轮减速器动画分解
发布时间:2024/8/1
40
豆豆
生活随笔
收集整理的这篇文章主要介绍了
基于unity+vuforia的VR二级齿轮减速器动画分解
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
目录
- AR二级齿轮减速器动画分解
- 一、功能需求
- 二、系统开发的关键技术
- 2.1 AR图像识别
- 2.2 UI设计
- 三、系统的详细设计与具体实现
- 3.1.1 AR图像识别功能
- 3.1.2 实现动画分解功能
- 四、安卓端脚本实现手指互动控制模型旋转和放大缩小
- 五、系统发布与测试
AR二级齿轮减速器动画分解
记录一下自己上学期做的期末作业之一,二级齿轮是一个简模,它的分解动画主要是利用unity自带动画帧系统K的,有点小简陋哈哈。莫见笑。
一、功能需求
基于AR图像识别、二级齿轮减速器动画分解和文字说明以及对减速器的放大、缩小、旋转。
二、系统开发的关键技术
2.1 AR图像识别
识别图:
摄像机进行图像识别后,出现二级齿轮 减速器动画分解界面,进入动画分解步骤。
成果如图1展示:
图1
2.2 UI设计
二级齿轮减速器动画分解开始的文字说明:
三、系统的详细设计与具体实现
3.1 系统的功能模块
3.1.1 AR图像识别功能
在Unity2018导入vuforia Engine模块以后,添加AR camera组件以及imagetarget组件,选择相应的数据库与图片,
3.1.2 实现动画分解功能
摄像机识别出现二级齿轮减速器后,按设定步骤分解动画,关键代码如下
//实例化对象 public GameObject CamObj; public GameObject SubObj; public GameObject[] OBJ1; public GameObject[] OBJ2;public GameObject[] OBJ3; public GameObject[] OBJ4;public GameObject[] OBJ5; public GameObject[] OBJ6; public GameObject[] OBJ7; public GameObject[] OBJ8; public GameObject[] OBJ9; public GameObject[] OBJ10; //获取动画 private Animator CamAnim; private Animator SubAnim; AnimatorStateInfo CamStateInfo; AnimatorStateInfo SubStateInfo; public int Step;private float AddTime;void Start() CamAnim = CamObj.GetComponent<Animator>();SubAnim = SubObj.GetComponent<Animator>();Step = 0; void Update()print(Step);switch (Step){case 0://第一步相机动画if(CamAnim){CamStateInfo = CamAnim.GetCurrentAnimatorStateInfo(0);if (CamStateInfo.IsName ("Base Layer.CamAnim1")){if (CamStateInfo .normalizedTime > 1){Step = 1;// 下一步,提前执行SubObj.transform.Find("Text").GetComponent<Text>().text = "二级齿轮减速器分解讲解开始";}}}break;case 1://第二步,显示字幕if(SubAnim){SubAnim.SetInteger("Subtitle", 1);Step = 2;}break;case 2://第二步 消失字幕if (SubAnim){SubStateInfo = SubAnim.GetCurrentAnimatorStateInfo(0); if(SubStateInfo .IsName ("Base Layer.wenziShow")){if(SubStateInfo .normalizedTime > 1){SubAnim.SetInteger("Subtitle", 2);Step = 3;}}}break;case 3://第三步 相机动画if(SubAnim){SubStateInfo = SubAnim.GetCurrentAnimatorStateInfo(0);if (SubStateInfo.IsName ("Base Layer.wenziHide")){if(SubStateInfo.normalizedTime > 0.5f){CamAnim.SetInteger("CamStep",2);Step = 4; SubObj.transform.Find("Text").GetComponent<Text>().text = "拆下端盖紧固螺钉";}}}break;case 4://第四步 显示字幕if(CamAnim){CamStateInfo = CamAnim.GetCurrentAnimatorStateInfo(0);if(CamStateInfo .IsName ("Base Layer.CamAnim2")){if(CamStateInfo .normalizedTime > 1){if(SubAnim){SubAnim.SetInteger("Subtitle", 1);Step = 5;}}}}break;case 5://第五步,拆下端盖紧固螺钉1if(SubAnim){SubStateInfo = SubAnim.GetCurrentAnimatorStateInfo(0);if (SubStateInfo.IsName("Base Layer.wenziShow")){if(SubStateInfo .normalizedTime > 1){for (int i = 0; i < OBJ1.Length; i++){if( OBJ1[i].GetComponent<Animator>()){OBJ1[i].GetComponent<Animator>().enabled = true;}}Step = 6;}}四、安卓端脚本实现手指互动控制模型旋转和放大缩小
脚本需挂载到齿轮模型上:
***3.1.2 实现模型旋转:***//单指上下左右滑动屏幕旋转if (Input.GetMouseButton(0)){if (Input.touchCount == 1){if (Input.GetTouch(0).phase == TouchPhase.Moved){Touch touch = Input.GetTouch(0);Vector2 deltaPos = touch.deltaPosition;transform.Rotate(Vector3.down * deltaPos.x, Space.World);transform.Rotate(Vector3.right * deltaPos.y, Space.World);}} #### 3.1.3 实现放大缩小:*** //双指缩放模型if (Input.touchCount == 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);}else{float oldScale = transform.localScale.x;float newScale = oldScale / 1.025f;transform.localScale = new Vector3(newScale, newScale, newScale);}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 true;}else{return false;}}五、系统发布与测试
测试方式:
打开程序,将识别图置于摄像机内,测试AR图像识别功能,识别之后自动进入二级齿轮减速器动画分解
也可以发布到安卓端就行互动测试。
六、总结
该程序对二级齿轮减速器进行了一个简单的动画分解,模拟了二级齿轮减速器的拆装 分解,让人能直观的感受到齿轮减速器分解的全过程。同时该程序运用了AR图像识别技术,基于unity完成,让我学习到了更多AR开发技术,完成过程中遇到的apk打包问题也一一解决了,收获挺多的。
总结
以上是生活随笔为你收集整理的基于unity+vuforia的VR二级齿轮减速器动画分解的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 《善用佳软:高效能人士的软件应用之道》一
- 下一篇: qq怎样发起临时会话(不加好友)