项目六 AR与减速机应用
學習目標
項目描述
該項目講解了減速機在AR中的展示方式,包括減速機動畫的控制,與減速機的交互等。其中功能開發上用PLAYMAKER插件來完成。
任務一 項目素材準備
項目中用的unity版本時2018.3,打開Unity工程文件在Project Name中輸入工程名稱,在Location中選擇存放的位置,如圖所示。注意,項目名稱以及文件存放路徑中不要出現中文字符(中文狀態下輸入的文字以及符號等)。
PlayMaker插件需要我們導入到Unity中,在菜單欄Assets/Import Package/Custom Psckage導入插件,
在對話框里找到PlayMaker插件,
我們使用的是最新版本的PlayMakerv1.9.0p11,點擊Import
PlayMaker導入進來后在項目資源管理面板里Install文件夾下載,
雙擊上圖圖標加載載PlayMaker配置文件,加載完成后我們可以看見Assets文件夾下多了與PlayMaker相關的文件夾。說明安裝成功。
被掃描的圖片首先要準備一張底圖作為圖片的背景,我們這個案例中用到的是減速機,所以我們要把減速機的渲染圖添加到底圖上,
打開3DMAX減速機文件渲染出圖片,保存PNG格式,如圖。如果想把打開的模型文件材質變換下顏色可以打開材質編輯器,改變下材質球的漫反射顏色后賦予給模型。為了展示效果減速機的外部和內部顏色是不相同的,所以在同一個不可分割的模型上賦予兩種材質是一個技術點。
在PS軟件里打開底圖文件,
在把3DMAX渲染的圖片打開放入到底圖上,設置好大小,
保存文件格式PNG,命名6-1,
?登陸Vuforia官網上傳圖片,點擊“Add Target”,
上傳完畢,
下載數據文件去頂保存路徑和命名,并且導入到Unity中,
案例中涉及減速機動畫包含分解和復原動作,那么這些動畫需要我們在3DMAX中把它做好,制作動畫方法在這里不做講解,只查看減速機動畫,如圖所示。可以看見減速機動畫總幀數在100幀。
3DMAX中控制動畫播放的按鈕都在這里,可以試著點擊查看效果。
我們可以發現減速機幀數前50幀是分解動畫,后50幀是復原動畫,
導出減速機模型格式要求FBX,路徑保存到新建的Unity工程里并命名“jiansuji”并對導出參數進行設置,
任務二 項目場景搭建
打開Unity工程我們發現工程里并沒有相關的Vufoia文件,只有在導入下載的AR數據文件。這時候我們要創建AR Camera,創建完畢后我們會發現Vufoia相關文件一起加載進了工程文件里,
這是我們在場景資源管理面板下看見倆個Camera,刪掉系統自帶的使用AR Camera相機,并且要在Play Settings中找到XR Settings勾選Vufoia選項,
填寫驗證碼
場景資源管理面板下添加ImageTarget,默認情況下ImageTarget組件自動添加掃描圖片數據,
在3DMAX里制作的減速機動畫導入到Unity后我們發現他的動畫系統是Generic模式,把動畫模式更改成Legacy模式,
下面我們要做的就是把減速機100幀的動畫切割成兩部分,一部分是分解動畫50幀,另一部分是復合動畫50幀。首先點擊“+”號復制一套動畫,
首先選中動畫名稱為Take 001的動畫,之后再End參數中輸入50,確認“Apply”,如圖所示。
選中動畫名稱為Take 001(1)的動畫,之后再Start參數中輸入50,End參數中輸入100確認“Apply”,如圖所示。這樣我們的動畫設置就完成了。
把減速機模型拖拽到場景資源管理面板里,調整模型位置和大小,
模型的材質看著不美觀,我們需要把材質添加反射效果,新建材質球,參數調節,如圖所示。
把材質球添加到模型上,因為一個模型零件上材質有兩種材質或多種,如果你直接把材質球拖拽到模型組件上那么所有模型材質都會更改,如圖所示。注意觀察紅框里的材質參數,我們替換的材質是01-Default材質,那么就要把材質球放置到這個上。
由于減速機模型材質有幾種,所以我們要創建多種不同顏色的材質球來達到我們想要的效果,
任務三 項目交互功能開發
從這節開始我們就要用到PlayMaker來制作交互,首先我們要熟悉它的使用。在Unity菜單欄中找到PlayMaker Editor ,把這個窗口拖放到資源管理面板旁邊,如圖所示。我們所有的交互功能都在這個窗口里面完成。
另外一個經常用到的窗口就是動作庫,在菜單欄PlayMaker/Editor Windows/Action Browser,如圖所示,把它放到屬性面板旁邊。這樣我們的PlayMaker編輯器就完成了設置。
模型旋轉功能是掃描出來減速機模型后我們可以用手指觸控手機屏幕控制減速機旋轉。在做這個功能之前我們首先要驗證一下掃描圖片是否出現模型,發布成安卓系統在手機上測試。在場景資源管理面板里創建控的GameObject物體,把控制物體旋轉功能放到這個空物體上方便我們來控制,
添加狀態機到GameObject上,如圖所示。我們要在State 1中添加動作來控制減速機旋轉。
手指觸摸屏幕動作在Device中的Swipe Gesture Event,如圖所示。把他添加到狀態機里。
旋轉功能我們設置左右旋轉,在PlayMaker編輯器事件下面的添加事件里創建兩個自定義事件一個是命名為“左”另一個命名為“右”。
在狀態里添加自定義事件,
Swipe Gesture Event: ?滑動手勢事件
Min Swipe?Distance:最小滑動距離。觸摸行進多長距離時被認為是在滑動。使用規格化距離 (
例如 ,1= 屏幕對角線距離 )。一般來說這個距離應該是一個很小的數值。
Swipe Left?Event:向左滑動事件。當檢測到向左滑動時發送的事件 。
Swipe Right?Event:向右滑動事件。當檢測到向右滑動時發送的事件。
Swipe Up Event:向上滑動事件。當檢測到向上滑動時發送的事件。
Swipe Down?Event:向下滑動事件。當檢測到向下滑動時發送的事件。
PlayMaker編輯器右鍵創建新的狀態機兩個,并分別與自定義事件連接,
在狀態機State 2中添加旋轉功能動作Transform里的Rotate,
Rotate里面參數添加,
Rotate:旋轉。繞著每個軸旋轉一個游戲對象。
Game Object:游戲對象。需要旋轉的游戲對象。
X?Angle: X軸度數。繞X軸的旋轉度數。
Y Angle: Y軸度數。繞Y軸的旋轉度數。
Z Angle: Z軸度數。繞Z軸的旋轉度數。
Space: 空間。繞本地或者世界空間旋轉。
Per Second:每秒。每秒旋轉。根據輸入的 Time.deltaTime 數字相乘。
左右方面的旋轉角度需要我們用時間來控制,這樣角度旋轉完后事件在返回到狀態機State 1中實現了反復,如圖。在狀態機State 3也按照狀態機State 2中設置,但是要把旋轉角度改成負數。這樣就實現了左右旋轉。
Wait:延時。
Time:時間。需要等待的時間。
Real Time:現實時間。忽略時間刻度。在游戲暫停的時候比較有用。
給物體添加碰撞器是為了讓我們手指觸發物體的時候起到事件發送的效果,沒有觸發器其功能不能實現。
選中減速機物體,如圖。碰撞器的區域可能會有問題或大或小看情況調試合適位置。
模型分解動畫是用手指觸控減速機模型觸發事件后播放分解動畫,這個過程需要我們建立兩個狀態機,一個狀態機里面放置觸發動作,另一個放置播放動畫動作,
這里我們要新建一個空物體,把空物體添加到狀態機里,
在狀態機“State 1”里添加動作“Touch Object Event”,
添加完“Touch Object Event”后我們會發現狀態機里的動作出現了紅色提示,這說明在Game Object參數里要添加目標物體并且目標物體還要有Colider組件。如圖。添加減速機模型為目標物體。
右鍵為狀態機添加完成“FINSHED”事件,在“Touch Object Event”動作事件的“Touche Began”添加“FINSHED”,如圖。這樣觸發物體的事件就完成了,觸發物體會把事件傳輸出去。
Touch Object Event: 觸摸對象事件。當一個對象被觸摸時發送事件 . ( 可選 ) 通過一個 fingerid 過濾器。
Game Object:游戲對象。用來檢測觸摸的游戲對象 。
Pick Distance:拾取距離。距離相機可拾取的游戲對象的距離。
Finger Id:手指 ID。只能檢測到與手指 ID 匹配的觸摸 , 也可以設置為 " 無 "。
Touch Began:觸摸開始。在觸摸開始時發送事件。
Touch Moved:觸摸移動。在觸摸移動時發送事件。
Touch?Stationary:觸摸靜止。在觸摸靜止時發送事件。
Touch Ended:觸摸結束。在觸摸結束時發送事件。
Touch Canceled:觸摸取消。在觸摸取消時發送事件。
Store Finger Id:存儲手指 ID。存儲觸摸的手指ID。
Store Hit Point:存儲接觸點。存儲對象被觸摸時的世界位置。
Store Hit Normal:存儲接觸法線。存儲對象被觸摸時的表面法線向量。
在PlayMaker編輯器里右鍵添加狀態機,如圖。連接狀態機“State 1”與“State 2”。
狀態機“State 2”里添加播放動畫的動作,如圖。
Play Animation: 播放動畫。在一個游戲對象上播放一個動畫 . 注意 : 游戲對象必須具有一個動畫組件。
Game Object:游戲對象。播放動畫的游戲對象 . 注意 : 必須具有一個動畫組件。
Anim Name:動畫名稱。要播放的動畫的名稱 . 使用瀏覽按鈕在指定游戲對象中尋找動畫。
Play Mode:播放模式。是否要停止所有當前正在播放動畫 , 或僅僅是與該動畫在同一圖層上的動畫。
Blend Time:混合時間。在動畫之間交叉淡入淡出的時間 ( 以秒計 )。
Finish Event:結束事件。當動畫結束播放時發送事件 . 注意 : 如果您使用默認的循環模式 , 有時動畫從來就沒有完成 , 這一事件也不會啟動 . 解決方法 : 使用 ClampForever, 或從動畫自身發送一二動畫事件。
Stop On Exit:退出時停止。當退出節點時停止動畫。
添加完“Play Animation”后我們會發現狀態機里的動作出現了紅色提示,這說明在Game Object參數里要添加目標物體并且目標物體還要有Animation組件。如圖。添加減速機模型為目標物體。
添加減速機模型為目標物體,在Anim Name參數里添加該減速機動畫名稱,如圖。這樣減速機分解動畫的控制方法就完成了。
在制作減速機模型復合動畫的控制方法和上述方法一樣,只不過要把分解的觸發事件放進狀態機“State 2”里。這是由于我們在開發該功能時首先觸發模型應該播放分解動畫再觸發模型播放復合動畫,如圖。
為狀態機“State 2”添加“FINSHED”事件并創建狀態機“State 3”連接,如圖。
在狀態機“State 3”中添加“Play Animation”,參數上和分解動畫相同,注意這次動畫名稱要添加復合動畫,如圖。
狀態機“State 3”右鍵添加事件“FINSHED”并在“Play Animation”動作上FINISHED Event添加 事件“FINSHED”。此事件在于狀態機“State 1”連接,如圖。這樣就完成了反復觸發模型播放動畫功能。
添加完動作。發布程序后在手機上測試。
總結
以上是生活随笔為你收集整理的项目六 AR与减速机应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux 查看硬盘序列号
- 下一篇: 基于Javaweb实现小区物业管理系统