LoginSignup
9
10

More than 5 years have passed since last update.

HoloLens(UWP-Unity)で使えない機能と対処法(一部)

Last updated at Posted at 2018-04-20

概要

UnityでHoloLensアプリを開発していて発生した
「ビルドが通らない」とか「PCとなんか動作が違う」などの失敗事例について掲載していました。

ただ、様々な方からアドバイスをいただく機会があり、
「原因や事情、発生するポイント」などの情報が
参考リンクのページを回っていただくと理解できるようになっています。

注意
読むべき内容は参考リンクの方にあり、
上半分は検索キーワード代わりに残しているだけで、
あらためて読みやすい文章をまとめたいと思っています。
中途半端な考察などがあるため、鵜呑みにしないでください。

動かないと確認したクラスなど

シリアライザ関連

'Binary'
'ISerializable'
'SerializationInfo'

型情報

'Type'

スレッド

'Thread'
'Thread.Sleep'

通信関連

'SocketFlags'
'Socket'
'Dns'
'UdpClient'
(System.Net名前空間がおそらく全滅?)

UWP系製作の注意

同様の問題に関する知見として,
KCS(Keio Computer Society)さんの所に以下の記事がありました。
UNITYでUWP(WINDOWS STORE)アプリを作るときに気を付けること

HoloLensでUDP通信する

UDP Clientに関しては
HoloLens で UDP 通信を行う方法について調べてみた - 凹みTips
凹先生(@hecomi)の所に対処方法があります。

なお、こちらで掲載してくださっているコードについて、
まずはHoloLensで動かそうと思って、DatagramSocket周囲だけコピペしたコンポネントを作りましたが、
これもビルドをうまく通りませんでした。

VisualStudioから参照が不十分とかnamespaceが見つからないと出るので、
オブジェクトファインダーで該当するものを探して追加したのですが、
どのバージョンのDLLを取り込んでもビルドできません。

とりあえず動かしたいだけなのに!
という事で、凹先生に質問させていただいたら、
とても丁寧に教えてもらうことができました。
本当にありがとうございます。。。!

問題の原因

問題の原因は
「UnityのC#」と「UWPの実機書き出しプロジェクトのC#」で
使っているランタイムが違うのがこうした現象の原因らしいです。
(Unity側のC#ランタイムが古いためDatagramSocketが動かせないらしいです)

対処

UWP 向けにビルドすると、C# のランタイムが新しいプロジェクトが生成され、
ここで初めて DatagramSocket を使えるようになりました。
この新しいランタイムに対応していないUnityではもちろん動かないので、動作確認は実機のみになります。
エディタ側のエラーが出た状態だとビルドできないため、
こうしたUWP向けの部分はインタフェースだけ共有して、
実装は #if UNITY_EDITOR または #if NETFX_COREを使って、
コンパイル時に切り替える事になるようです。

こうした切り替えを使っての実装についても、
Unity 向けの OSC 実装を作ってみた - 凹みTips
凹先生からこちらの記事を紹介してもらいました。

参考リンク

スライド

UnityによるHoloLens用UWPアプリケーション開発の勘所
https://www.slideshare.net/TakahiroMiyaura/unityhololensuwp
このスライド、HoloLens開発を始める前に、とにかく最初に読みたかった。。。!
スライドの作者であるmiyauraさんはほかにもたくさんドキュメントを書かれていて、
qiitaでの記事は「 https://qiita.com/miyaura 」で読ませてもらえます。

公式ドキュメント

Unity や UWP で不足している .NET API | Microsoft Docs
https://docs.microsoft.com/ja-jp/windows/uwp/gaming/missing-dot-net-apis-in-unity-and-uwp
Unityで不足している.NetのAPIや、
その代替についてなどが細かくまとめられています。
こちらもとりあえず一読しておくと、
HoloLens開発で落とし穴に落ちる回数が大きく減ると思います。

.NET Core への移植 - ライブラリ | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/core/porting/libraries
「.NET Core で使用できない .NET Framework テクノロジ」
「コードの移植性を判別する」などのトピックがあり、
UnityでUWPアプリを作る前に一読するとよさそうです。

dotnet/corefx
https://github.com/dotnet/corefx/wiki/ApiCompat
Microsoftが公式で提供してくれている
挙動や互換性に関して注意が必要な.NetのAPIリスト

サンプルリポジトリ

Microsoft/Windows-universal-samples
https://github.com/Microsoft/Windows-universal-samples
Microsoftが公式で提供してくれている
UWPのサンプル集です。

ライブラリプロジェクト

akihiro0105/HoloLensModule
https://github.com/akihiro0105/HoloLensModule
HoloLens開発で使いたい手のトラッキングや各種通信、あると便利なユーティリティなどを、
コンパクトにまとめてくださっているプロジェクト。
ありがたや。。。

謝辞

参考リンクについては、凹み先生から直接教えていただいたり、
株式会社ホロラボ|HoloLab Inc.に所属されている方々から、Twitterを通じて教えていただいたりしました。
ゆーじさん(@yuujii)
d_yamaさん(@dy_karous)
デコシさん(@Ash_Yin)
ありがとうございます!!
ほかにも、おすすめのリンクなどがありましたら、コメントなどに残していただけると嬉しいです。

追記 1(2018/6/6 14:00) HoloLensでUDP通信する、を追加しました
追記 2(2018/6/6 19:50) 参考リンクを追加しました

9
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
10