基于unity+vuforia的VR二级齿轮减速器动画分解
生活随笔
收集整理的這篇文章主要介紹了
基于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怎样发起临时会话(不加好友)