Unity TriLib 教學

TriLib - Model loader package 是一套支援 Unity 的模型載入工具,可即時載入多種 3D 模型,適用於 Windows、Mac OS、Android、 iOS、 WebGL 平台,貼圖可使用外部檔案或嵌入的方式,動畫支援骨架與 blend-shapes 變形動畫。

將 TriLib 下載到專案。

匯入 TriLib 資源包的全部檔案。

 

TriLib 展示場景

開啟 [ TriLib > TriLibSamples > LoadModelFromURL ] 資料夾的 LoadModelFromURL 場景。

選取 LoadModelFromURL 物件,透過 Inspector 的 Model URL 可以設定模型的路徑。

按下 Play 測試確認出現球體模型與貼圖,表示 TriLib 從網站下載模型的功能正常運作。

使用 Apache 架設網站,使用 Space Robot Kyle 進行即時載入模型測試。

使用 mixamo 網站提供的模型(含貼圖與動畫)進行測試。

修改 Model URL

TriLib 即時下載的模型,貼圖顯示似乎不正常。

注意!模型檔案超過 100MB 時,下載的等候時間或許超過玩家可接受的範圍,且 mixamo 動畫無法正常播放。

目前此場景僅有一個負責從指定網址載入模型的 LoadModelFromURL 物件,選取此物件找到對應的互動腳本。

 

 

開啟 [ Assets > TriLib > TriLib > Samples > Scripts ] 資料夾。

選取 DownloadSample 腳本複製一份並更改為適當名稱,將此腳本移動至別處。

 

開啟腳本並更改類別名稱,上方輸入 using TriLib 並將兩個命名空間刪除。

 

建立一個空物件,重新命名為 "Loader " 並套用剛才修改的腳本,可按下 Play 測試可否正常執行。

此腳本是使用 OnGUI 撰寫的 UI ,這裡要替換成一般的UI按鈕。

此處要做的是,將「檔案名稱」放入下拉選單中,再從「檔案名稱」對應的「網址」下載物件並載入到畫面中。

將「陣列」 變更為 「列表」,上方輸入 using System.Collections.Generic; 才可以使用,列表較容易使用新增、刪除的指令。

需要顯示的不是「網址」而是「名稱」,所以再選告一個字串型態的列表,要裝檔案名稱。

因為要使用「下拉式選單」來選取內容,所以再宣告一個 Dropdown 變數。

在 Start 時,要將所有的「檔案名稱」放入下拉式選單中。

使用迴圈,將所有的網址,使用 getFileName = FileUtils.GetfilenameWithoutExtension 指令抓取,再將抓到的名稱放入 fileName 列表中。迴圈結束後,將列表的內容加入到下拉式選單中。

最後將 _fileDownloaders = new WWW[urls.Lenght]; 變更為 _fileDownloaders = new WWW[urls.Count]; 。

將原本 OnGUI 方法更改名稱,並將 private 變更為 public 公開方法。

在這不需要再使用迴圈抓取網址並生成按鈕了,所以先將產生網址及按鈕的程式碼刪除。

注意:刪除完畢後請比對一下括號數量是否正確。

因為已經沒有迴圈了,就將原本迴圈使用的 i 變更為目前下拉選單的值(Dropdown.value)。

回到 Unity 編輯器中,執行 [ GameObject > UI > Dropdown 及 GameObect > UI > Button ]建立一個下拉選單與按鈕。

再點選 Dropdown 物件,在Inspector 找到 Dropdown 元件後,將最下面的Options 下的 Option ABC 全部刪除。

因為測試的網址中有 Zip 檔案,所以執行 [ TriLib >Enable Zip Loadiong ] 開啟 Zip 讀取。

選擇先前建立的 Loader 後,在 Inspector 中找到正在編輯的腳本,將場地中的下拉式選單拖曳至欄位中。

點選先前建立的按鈕,將按鈕事件指定為先前修改的方法。

按下 Play測試,模型是否會讀取在場地中。

如果有需要有父物件的話,可以宣告一個父物件的 Transform 後,再到 LoadFile 方法中的最尾端,使用 transform.parent 的指令更改父物件,並將父物件的旋轉變為 ( 0 , 90 , 0 )。

如果不需要在讀取後更改攝影機位置,可以將最尾端的 Camera.main.FitToBounds(_loadedGameObject.transform, 3f); 刪除或註解。

下載的檔案將會儲存在 [ C:\Users\使用者名稱\AppData\LocalLow\公司名稱\專案名稱 ] 資料夾中,如果有相同的檔名將會使用此檔案進行讀取,如果要再重新下載的話只能刪除這些資料夾。

這些資料夾的名稱就是先前放入列表的「檔案名稱」,可以使用 Application.persistentDataPath 指令來找到 [ C:\Users\使用者名稱\AppData\LocalLow\公司名稱\專案名稱 ] 的資料夾,並使用迴圈來刪除所有資料夾。

繼續編輯腳本,新增一個刪除檔案的方法。

使用迴圈來判斷資料夾是否存在,如果存在就把資料夾連同檔案一起刪除。

Directory.Exists(路徑) 指令可以確認資料夾位置是否存在。

Directory.Delete(路徑 , 如果資料夾不是空的是否要刪除) 指令可以刪除資料夾。

回到 Unity 編輯器,建立一個按鈕並將此按鈕放入按鈕事件中,確認是否可以刪除資料夾。

開啟全場景網格的指令可以使用 GL.wireframe 指令,將此腳本放置在攝影機中,再用其他方法來啟停此腳本即可。

使用滑鼠進行旋轉、用滾輪縮放的功能。

不對物體本身進行選轉,而是對一直在場景中的父物件。

Mouse ScrollWheel 是在輸入設定的滑鼠滾輪旋轉的值。

Mathf.Epsilon 是指浮點數的最小值。

當滾輪值是正的,就將物體放大;如果是負的則縮小。

當按下滑鼠時,將物體對著攝影機的方向進行旋轉,當左右旋轉時,是往Y軸旋轉;當上下旋轉時,是往Z軸旋轉。

Mathf.Deg2Rad 弧度,可以讓旋轉更圓滑。

 

TriLib 相容性測試

Vive Focus 3 與 Oculus Quest 2 主要透過自家的應用程式商店提供遊戲,若提供派送功能可以讓教師無需對每 VR 一體機進行個別安裝,即可更新遊戲的內容。此功能在 Vive Focus 平台可訂閱 HTC 官方提供的應用程式派送功能,但此平台僅支援 Vive Focus 設備,而 Oculus Quest 官方未提供類似服務,或可使用 SideQuest 側載程式安裝第三方軟體,而且需為每一台 Oculus Quest 進行手動安裝。因此派送功能在跨平台的 VR 連線遊戲領域,現階段看來缺少理想的解決方案。

 

 

開啟腳本編輯器,找到 Start ( ) 方法下方的 webRequest 變數,此變數的預設值即為 TriLib 提供的 zip 範例檔案。

透過瀏覽器輸入以上的檔案路徑 ( TriLibSampleModel.zip ) 下載範例檔案。

將下載的 TriLibSampleModel.zip 範例檔案上傳到網站,來測試 TriLib 功能。

回到 Unity 測試遊戲確認模型可以從網站下載,稍後將檔型上傳到正式網站。

 

測試用檔案網址(本站路徑)

CG > TriLib > Sample

 

devbb - v2.1.8