Unity 的建議設定
Unity 提供一組預設選項,通常是所有平臺的平均案例。 不過,Unity 提供一些混合實境特有的行為,可透過專案設定來切換。
高效能環境設定
低品質設定
請務必將 Unity 品質設定 修改為 [非常低 ],讓您的應用程式在適當的畫面播放速率執行並執行良好,特別是針對 HoloLens 開發。 若要在沉浸式頭戴式裝置上進行開發,視桌面的規格為 VR 體驗提供電源,仍可達到不具最低品質參數的畫面播放速率。
在 Unity 2019 LTS+ 中,您可以移至 [編輯>專案設定> 品質],然後按一下向下箭號以將 [非常低品質] 層級設定為[預設值] 來設定專案的品質等級。
光源設定
與品質場景設定類似,請務必為您的Mixed Reality應用程式設定最佳光源設定。 在 Unity 中,通常會對您的場景產生最大效能影響的光源設定是 即時全域照明。 您可以移至[視窗>轉譯>光源設定>] [即時全域照明],以關閉全域照明。
還有另一個光源設定: 「製作全域照明」。 此設定可在沉浸式頭戴式裝置上提供高效能且視覺上令人驚豔的結果,但不適用於 HoloLens 開發。 製作全域照明 只會針對靜態 GameObjects 進行計算,因為未知和變更的環境本質,在 HoloLens 場景中找不到。
如需詳細資訊,請參閱 Unity 的全域照明 。
注意
即時全域照明 是 針對每個場景設定的 ,因此開發人員必須針對其專案中的每個 Unity 場景儲存此屬性。
單一傳遞實例轉譯路徑
在Mixed Reality應用程式中,場景會轉譯兩次:每個眼睛一次。 相較于傳統的 3D 開發,這實際上會將需要計算的工作量加倍。 請務必在 Unity 中選取最有效率的轉譯路徑,以節省 CPU 和 GPU 時間。 單一傳遞實例轉譯會將混合實境應用程式的 Unity 轉譯管線優化;建議您針對每個專案預設啟用此設定。
若要在 Unity 專案中啟用這項功能
- 開啟OpenXR 設定 (移至編輯>專案設定>XR 外掛程式管理>OpenXR) 。
- 從 [轉譯模式] 下拉式功能表中選取[單一傳遞實例]。
如需此轉譯方法的詳細資訊,請參閱 Unity 的下列文章。
注意
如果開發人員已經有非針對執行個體撰寫的現有自訂著色器,就會發生單通道執行個體化轉譯的一個常見問題。 啟用這項功能之後,開發人員可能會注意到,有些 GameObject 只會在單一眼球中轉譯。 這是因為相關聯的自訂著色器沒有適當的執行個體屬性。
如需解決此問題的方法,請參閱 Unity 中的適用於 HoloLens 的單通道立體聲轉譯
啟用深度緩衝區共用
若要從使用者認知達到更好的全像投影穩定性,建議您在 Unity 中啟用 深度緩衝區共用 屬性。 藉由開啟此功能,Unity 會與 Windows Mixed Reality 平臺共用應用程式所產生的深度地圖。 然後,平臺可以更妥善地針對您的應用程式所呈現的任何指定畫面,將全像投影穩定性優化。
若要在 Unity 專案中啟用這項功能
- 開啟OpenXR 設定 (移至編輯>專案設定>XR 外掛程式管理>OpenXR) 。
- 從 [深度提交模式] 下拉式功能表中選取[深度 16 位]。
針對 HoloLens 開發,特別建議使用 16 位深度緩衝區設定。 相較于 24 位選取 16 位,將會大幅降低頻寬需求,因為需要移動/處理的資料較少。 也就是說,優化隨附特定成本。 請確定您瞭解下列 重要 方塊中所述的影響。
為了讓Windows Mixed Reality平臺將全像投影穩定性優化,它會依賴深度緩衝區來正確且符合螢幕上任何轉譯的全像投影。 因此,在開啟深度緩衝區共用的情況下,轉譯色彩也會呈現深度時很重要。 在 Unity 中,大部分的不透明或 TransparentCutout 材質預設會轉譯深度,但透明和文字物件不會轉譯深度,不過這取決於著色器和其他因素。
如果使用Mixed Reality Toolkit 標準著色器,則表示透明物件的深度:
- 選取使用 MRTK 標準著色器的透明材質,然後開啟 [偵測器編輯器] 視窗
- 選取深度緩衝區共用警告內的 [ 立即修正 ] 按鈕。 您也可以將轉譯模式設定為[自訂],以手動方式執行此動作;然後將[模式] 設定為[透明],最後將[深度寫入] 設定為[開啟]
重要
當變更這些值以及相機的近/遠平面設定時,開發人員應該注意 Z 衝突。 當兩個遊戲物件嘗試轉譯為相同的圖元,而且由於深度緩衝區 (精確度的限制,也就是 z 深度) ,Unity 無法分辨另一個物件的前面。 開發人員會注意到兩個遊戲物件之間的閃爍,因為它們 會對抗 相同的 z 深度值。 這可藉由切換至 24 位深度格式來解決,因為每個物件都有較大的值範圍,以便從相機計算其 z 深度。
不過,建議特別針對 HoloLens 開發,改為將相機的近遠平面修改為較小的範圍,並保留 16 位深度格式。 z 深度會以非線性方式對應至鄰近和遠距相機平面的值範圍。 您可以藉由選取場景中 的主相機 ,並在 [偵測器] 底下,變更 [近 & 距裁剪平面 ] 值來減少其範圍 (,例如從 1000m 到 100m 或其他 x 值等等。)
重要
Unity 在使用 16 位深度格式時,不會建立樣板緩衝區。 因此,除非選取 24 位深度格式,否則某些 Unity UI 效果和其他樣板必要效果將無法運作,這會建立 8 位樣板緩衝區。
建置 IL2CPP
Unity 已淘汰 .NET 腳本後端的支援,因此建議開發人員針對其 UWP Visual Studio 組建使用 IL2CPP 。 雖然這帶來各種優點,但從 Unity for IL2CPP 建置 Visual Studio 解決方案的速度可能會比舊的 .NET 方法慢。 因此,強烈建議遵循 建置 IL2CPP 的最佳做法,以節省開發反復專案時間。
- 每次將專案建置至相同的目錄,重複使用該處預先建置的檔案,以利用累加建置
- 停用專案 & 組建資料夾的反惡意程式碼軟體掃描
- 在您的Windows 10設定應用程式下開啟病毒 & 威脅防護
- 選取[病毒 & 威脅防護設定] 底下的[管理設定]
- 選取 [排除專案] 區段底下的 [新增或移除排除專案]
- 選取 [新增排除專案 ],然後選取包含 Unity 專案程式碼和建置輸出的資料夾
- 使用 SSD 進行建置
如需詳細資訊,請參閱 優化 IL2CPP 的建置時間 。
注意
此外,設定快取伺服器可能會有幫助,對於有大量資產 (排除指令檔) 或不斷變更場景/資產的 Unity 專案來說,更是如此。 開啟專案時,Unity 會將符合資格的資產以內部快取格式儲存在開發機器上。 項目必須重新匯入,因此修改時必須加以重新處理。 此程序可以執行一次後就儲存在快取伺服器中,之後再與其他開發人員共用以節省時間,而不是每位開發人員都在本機處理新變更的重新匯入工作。
發佈屬性
全像攝影啟動顯示畫面
HoloLens 具有行動類別 CPU 和 GPU,這表示應用程式可能需要較長的時間才能載入。 載入應用程式時,使用者只會看到黑色,因此他們可能會想知道發生什麼事。 若要在載入期間放心,您可以新增全像攝影啟動顯示畫面。
若要切換全像攝影啟動顯示畫面:
- 移至[編輯>專案設定>播放機] 頁面
- 選取 [Windows 市集] 索引標籤,然後開啟 [ 啟動顯示影像 ] 區段
- 在 Windows 全像攝影全像攝影 > 啟動顯示影像 屬性下套用您的影像。
- 切換 [ 顯示 Unity 啟動顯示畫面 ] 選項將會啟用或停用 Unity 品牌啟動顯示畫面。 如果您沒有 Unity Pro 授權,則一律會顯示 Unity 品牌啟動顯示畫面。
- 如果套用 全像攝影啟動顯示影像 ,則一律會顯示是否已啟用或停用 [顯示 Unity 啟動顯示畫面] 核取方塊。 指定自訂全像攝影啟動顯示影像僅適用于具有 Unity Pro 授權的開發人員。
顯示 Unity 啟動顯示畫面 | 全像攝影啟動顯示影像 | 行為 |
---|---|---|
開啟 | None | 顯示預設 Unity 啟動顯示畫面 5 秒,或直到載入應用程式為止,只要較長的時間。 |
開啟 | Custom | 顯示自訂啟動顯示畫面 5 秒,或直到載入應用程式為止,只要較長的時間。 |
關閉 | None | 在載入應用程式之前,顯示透明黑色 (沒有) 。 |
關閉 | Custom | 顯示自訂啟動顯示畫面 5 秒,或直到載入應用程式為止,只要較長的時間。 |
如需詳細資訊,請參閱 Unity 的啟動顯示畫面檔 。
追蹤遺失
混合實境頭戴式裝置取決於查看其周圍的環境,以建構 世界鎖定的座標系統,讓全像投影維持在位置。 當頭戴式裝置無法找到自己在世界中時,就表示頭戴式裝置 已遺失追蹤。 在這些情況下,相依于世界鎖定座標系統的功能,例如空間階段、空間錨點和空間對應,都無法運作。
如果追蹤遺失,Unity 的預設行為是停止轉譯全像投影、暫停 遊戲迴圈,並顯示追蹤遺失通知,以輕鬆追蹤使用者注視。 自訂通知也可以以追蹤遺失影像的形式提供。 對於相依于追蹤其整個體驗的應用程式,讓 Unity 完全處理這項作業,直到重新取得追蹤為止。 開發人員可以提供自訂影像,以在追蹤遺失期間顯示。
若要自訂追蹤遺失的影像:
- 移至[編輯>專案設定>播放機] 頁面
- 選取 [Windows 市集] 索引標籤,然後開啟 [ 啟動顯示影像 ] 區段
- 在 Windows 全像攝影 > 追蹤遺失影像 屬性下套用您的影像。
退出宣告自動暫停
某些應用程式可能不需要追蹤 (例如 360 度視訊檢視器等 僅限方向的應用程式 ,) 或可能需要在追蹤遺失時繼續處理未中斷。 您可以退出宣告預設的追蹤行為遺失,但您必須負責隱藏/停用任何物件,這不會在追蹤遺失案例中正確呈現。 在大部分情況下,建議在該案例中轉譯的唯一內容是主體鎖定的內容,以主相機為中心。
若要退出宣告自動暫停行為:
- 移至 [編輯>專案設定>播放機] 頁面
- 選取 [Windows 市集] 索引標籤,然後開啟 [ 啟動顯示影像 ] 區段
- 修改 [Windows 全像攝影 > 追蹤遺失暫停] 和 [顯示影像] 核取方塊。
追蹤遺失事件
若要定義追蹤遺失時的自訂行為,請處理全域 追蹤遺失事件。
功能
若要讓應用程式利用某些功能,它必須在其資訊清單中宣告適當的功能。 資訊清單宣告可以在 Unity 中建立,使其包含在未來的專案匯出中。
您可以透過下列方式為Mixed Reality應用程式啟用功能:
- 移至[編輯>專案設定>播放機] 頁面
- 選取 [Windows 市集] 索引標籤,開啟 [ 發佈設定 ] 區段,然後尋找 [功能 ] 清單
啟用全像攝影應用程式常用 API 的適用功能如下:
功能 | 需要功能的 API |
---|---|
SpatialPerception | SurfaceObserver |
網路攝影機 | PhotoCapture 和 VideoCapture |
PicturesLibrary / VideosLibrary | PhotoCapture 或 VideoCapture,分別在儲存擷取的內容時 () |
麥克風 | 擷取音訊) 、DictationRecognizer、GrammarRecognizer 和 KeywordRecognizer 時,VideoCapture ( |
InternetClient | DictationRecognizer (並使用 Unity Profiler) |