日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于unity+vuforia的VR二级齿轮减速器动画分解

發布時間:2024/8/1 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于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二级齿轮减速器动画分解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。