2017-05-01 22 views
0

私が構築する必要があり、そこからHLAPIを使用して、ネットワークユニティプロジェクトを持っている:未解決の名前空間UnityEngine.VR.WSA

  • A Hololensクライアント(プラットフォーム= WSA)
  • A Windowsデスクトップクライアント(プラットフォーム= PCスタンドアロン)
  • A Windowsデスクトップサーバ(プラットフォーム= PCスタンドアロン)

私は3つの専門のシーン、これらの役割ごとに1つ、およびのみに依存し、実行時にそれらのいずれかをロードベースのシーンを持っていますロールe設定。

ここから問題があります。私はのHoloToolkitを含むというスクリプトを持ち、名前空間UnityEngine.VR.WSAUnityEngine.VR.WSA.Ipnutのクラスを使用するHololensクライアントシーンで参照されています。これはWSAプラットフォームにとってうまくコンパイルされます。しかし、デスクトップクライアントとデスクトップサーバーを構築するときに、それらの名前空間が存在しないかのようにすべてのスクリプトがコンパイルに失敗します。ここ

は一例であり:

Assets/HoloToolkit/Input/Scripts/GestureManager.cs(139,17): error CS0246: The type or namespace name `GestureRecognizer' could not be found. Are you missing an assembly reference? 

GestureRecognizerUnityEngine.VR.WSA.Inputです。私はバックエンドが実行時にNotSupported例外を投げるのに十分なほどスマートであると思っていましたが、もしそれらの名前空間のクラスがPCスタンドアロンプ​​ラットフォームの下で呼び出されれば(そして、私はrole = desktopクライアントまたはデスクトップサーバー)しかし、それは単にコンパイルされないので、私は本当に立ち往生しています。サードパーティのインポートされたアセットでもどこにでも挿入するために、UNITY_WSAまたはUNITY_STANDALONEプリプロセッサフ​​ラグを使用してすべてを書き直すことなく、誰にでもこの解決策を知っていますか?

私はHololensのUnity 5.4ベータ版を使用していましたが、これはまったく問題ありませんでした。その後私は5.6に移行し、これが1になりました。

答えて

1

アプリを作成する前にこれを考慮する必要があります。一部のAPIは、WindowsスタンドアロンとWindowsストアビルドの間では使用できません。ホーレンが関わっているのは最悪です。

プリプロセッサソリューションが受け入れられない理由の例は良くありません。 プリプロセッサディレクティブはこれを解決する方法です。 classが宣言されている場所を囲む必要はありません。名前空間をインポートした場所を囲むだけです。また例えば、

#if UNITY_WSA 
    using UnityEngine.VR.WSA; 
#endif 

、あなたは、あなたがないアクセスあなたの他のクラスから直接UnityEngine.VR.WSA名前空間のAPIべきため、これは本当に簡単にします。

UnityEngine.VR.WSA名前空間からの入力をすべてラップするラッパークラスを作成し、そのクラス内に#if UNITY_WSAを使用します。これを行うことで、は、UnityEngine.VR.WSA名前空間のAPIを参照するすべてのクラスではなく、1つのクラスにのみ必要です。

管理が簡単です。 UnityEngine.VR.WSA名前空間からの入力にアクセスするには、そのラッパーを使用します。必要なAPIだけをラップすることを忘れないでください。

+0

ありがとうございました。私はあなたの提案を単一のラッパークラスの下に集めることは理解していますが、ホロレンズ、またはまだ追加されていないことがあればHoloToolkitを使ってはいけません。多くのサブプロジェクトに分解されます。サブプロジェクトごとに1つのプラットフォームがあり、この質問が行われます。実際、Unity HLAPIを使ってすでに試してみました。異なるプロジェクトの資産は扱うのが面倒です。 HLAPIは1つのプロジェクトを対象としています。しかし多分ユニティLLAPIを使用してください... – RCYR

+0

コードを同じように見せなければならないので、さらに悪いことに、サブプロジェクトごとに1つのプラットフォームを実行できます。 1つのプロジェクトで1つのバグを修正する場合は、別のプロジェクトで別のバグを修正する必要があります。それが管理不能になるまでにどれぐらいの時間がかかりますか?ラッパーを使用したくない場合は、問題ありません。上記の関数、インポート、変数宣言の中で '#if UNITY_WSA'を使用してください。それはうまくいくはずです。 – Programmer

関連する問題