此頁面說明如何在適用于 HoloLens 的 Unity 專案中使用 WinRT API。
Mixed Reality API
Windows SDK 的Mixed Reality焦點子集已在 .NET Standard 2.0 相容投影中提供,您可以在專案中使用,而不需要預處理器指示詞。 Windows.Perception 和 Windows.UI.Input.Spatial 命名空間中的大部分 API 都包含在內,而且未來可能會擴充為包含其他 API。 在編輯器中執行時,可以使用投影的 API,這可讓您使用 播放模式。 若要使用此投影,請對專案進行下列修改:
使用 Mixed Reality功能工具,新增Mixed Reality WinRT 投影 UPM 套件的參考。
使用
Microsoft.的命名空間前置Windows詞參考:using namespace Microsoft.Windows.Perception.Spatial;注意
如果您的專案具有任何
Windows.*命名空間的內嵌參考,且編譯器嘗試針對對應的Microsoft.Windows.*命名空間解析,匯入此套件可能會導致命名空間解析問題。 在此情況下,建議您更新這些參考以使用global::Windows.*,或更新這些腳本,以將特定Windows.*命名空間匯入為using語句。將原生指標轉換取代為
FromNativePtr:var worldOrigin = SpatialCoordinateSystem.FromNativePtr(unityWorldOriginPtr);
有條件地包含 WinRT API 呼叫
您也可以使用預處理器指示詞,在針對 通用 Windows 平臺 和 Xbox One 平臺建置的 Unity 專案中使用 WinRT API。 您在以 WinRT API 為目標的 Unity 腳本中撰寫的任何程式碼,都必須有條件地包含這些組建。
這可以透過 Unity 中的兩個步驟來完成:
- API 相容性層級必須在播放機設定中設定為.NET 4.6或.NET Standard 2.0
- 編輯>專案設定>球員>配置>.NET 4.6或.NET Standard 2.0的API 相容性層級
- 預處理器指示 詞ENABLE_WINMD_SUPPORT 必須包裝在任何 WinRT 運用的程式碼周圍
下列程式碼片段來自 通用 Windows 平臺 的 Unity 手動頁面:C# 腳本中的 WinRT API。 在此範例中,會傳回廣告識別碼,但只會在 UWP 和 Xbox One 組建上傳回:
using UnityEngine;
public class WinRTAPI : MonoBehaviour {
void Update() {
auto adId = GetAdvertisingId();
// ...
}
string GetAdvertisingId() {
#if ENABLE_WINMD_SUPPORT
return Windows.System.UserProfile.AdvertisingManager.AdvertisingId;
#else
return "";
#endif
}
}
在 Unity C# 專案中編輯腳本
當您按兩下 Unity 編輯器中的腳本時,預設會在編輯器專案中啟動您的腳本。 因為 Visual Studio 專案不會參考Windows 執行階段,所以 WinRT API 看起來會是未知的。 ENABLE_WINMD_SUPPORT指示詞未定義,而且在您建置專案到 UWP Visual Studio 方案之前,會忽略任何#if包裝的程式碼。