2017/10/21(土)
ASP.NET系ばかりなので、.NETのクライアント側ネタで乗り込みます!って通常枠は埋まっているのでLTで!
2017/10/29(日)
2日間イベントの2日目に登壇します。MRアプリ開発の入門をわかりすく解説します。
2017/10/11(水)
開催案内はまだですが、「今まで待っていたものに名前がついた。それはMixed Realityだよとあなたは言った。」というタイトルでWinMRの世界観を30分でお伝えいたします。
一般の方にはもしかしたらなじみがなく、また、仕事道具を動かすプラットフォームとしてWindowsを使っている人にも縁がないものに、Insider Previewがあります。
あくまでも「いまつくっている最中のバージョンを様々な環境でまずはつかってもらおう」というものです。
一般公開前ですから品質的に問題があったり致命的なバグがあったりも覚悟しつつ、アプリ開発していたり、OSそのものの新しい機能をいち早くためしたいという人がちょっとだけ未来に一般公開されるバージョンを試せるものということです。
Insider Previewのリリース間隔がみじかくなってくると、秋に公開されるというFall Creators updateもそろそろなの?みたいな感覚が味わえるのもいい点ですね。
もちろん、品質や日本語訳の変な点をどんどんフィードバックするのもInsider Preview参加者の役目の1つだったりします。
16294でなにがかわったかといえば以下のような点。変わったというよりもほぼバグフィックス。
これをみて思うのは新機能の追加というよりも特定条件下で発生する問題の解決が多く、チューニングと汎用化の最終的な匙加減にはいてきたのかなって点。
よく「これくらいのバグをみつけられずにだしてくるのか?」なんて感想がブログで見受けられるけど、これ、なかなか面倒ですよね。対象ハードを絞れるといいだろうけれど。
あと、どうしてInsider Previewなのに「マイクロソフトも」みたいな感じで人格攻撃しちゃう人がいるのかはいつも不思議だったりします。問題点をかばう必要はないけど。きっと身近な人が失敗すると「だからお前はダメなんだ!」みたいな怒り方をしてそうですよね。
ソースコードを公開せずに多人数でHoloLensアプリを作るときは、「Visual Studio Team Services」などで非公開でやっていくとよいと感じです。
ちょっとしたサンプルコードならば、gistなどもいいでしょう。
サンプルプロジェクトを公開するならgithubがやっぱり一番よさそうです。
HoloLensアプリを公開するときはUnityプロジェクトとUWPプロジェクトでそれぞれ別の.gitignoreファイルを置けると便利です。
そこで次のようなフォルダ構造を作成し、UnityプロジェクトフォルダとVisualStudioソリューションフォルダにそれぞれに適した.gitignoreファイルを置きましょう。
[アプリ名フォルダ]
+[Unityプロジェクトフォルダ]
+assets
|unityファイル
+UWP
|VisualStudioソリューションファイル
+[プロジェクトフォルダ]
このフォルダの作り方やその他の詳細はHoloLensアプリ作成時の共通作業(2017年9月編)を参照してください。
新規にリポジトリを作るときに下の方に[.gitignore]ドロップダウンリストがあるので、そこで「Unity」を選択して「アプリ名フォルダ」と同じ名前でリポジトリを作成します。
Unityを指定したときの.gitignoreファイルの内容は次のようになります。
--
/[Ll]ibrary/
/[Tt]emp/
/[Oo]bj/
/[Bb]uild/
/[Bb]uilds/
/Assets/AssetStoreTools*
# Visual Studio 2015 cache directory
/.vs/
# Autogenerated VS/MD/Consulo solution and project files
ExportedObj/
.consulo/
*.csproj
*.unityproj
*.sln
*.suo
*.tmp
*.user
*.userprefs
*.pidb
*.booproj
*.svd
*.pdb
# Unity3D generated meta files
*.pidb.meta
# Unity3D Generated File On Crash Reports
sysinfo.txt
# Builds
*.apk
*.unitypackage
--
リポジトリができたならば、ローカル(自分のPC)にリポジトリをクローンします。
このとき、すでにサンプルプロジェクトを作ってしまっていたならば、作成済のサンプルプロジェクトのアプリ名フォルダをリネームしておきます。そして、その場所を指定してクローンします。
ローカルドライブにフォルダが作成できならば、このフォルダを「アプリ名フォルダ」としてHoloLensアプリのプロジェクトを作成します。
あらかじめ作成してありリネームしてあるならば、そのフォルダの中身を移動してきます。
クローン下フォルダに移動するだけでローカル側の変更として検知されます。ここで、.gitignoreファイルをUnityプロジェクトフォルダに移動します。
今回はUWP側はUnityから自動生成すればいいのでUWPフォルダを丸ごと削除します。
UWP側でも独自のコードを書いているのであれば、UWPファイルだには次のような.gitigoneファイルを配置します。
--
#ignore thumbnails created by windows
Thumbs.db
#Ignore files build by Visual Studio
*.obj
*.exe
*.pdb
*.user
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.cache
*.ilk
*.log
*.dll
*.lib
*.sbr
*.msi
*.appx
obj/
bin/
TestResults/
AppPackages/
BundleArtifacts/
packages/
UpgradeLog*.*
--
公開するコードがすべて格納出来たら、コミットを行い、プッシュします。
github上のUnityプロジェクトフォルダを見てみる次のようになります。
これでコードを公開できました。
HoloLensアプリを作成するときのフォルダ構成を公開します。
[アプリ名フォルダ]
+[Unityプロジェクトフォルダ]
+assets
|unityファイル
+UWP
|VisualStudioソリューションファイル
+[プロジェクトフォルダ]
こんな感じにUnity関連とUWP関連が別フォルダになるようにしていて、その2つのフォルダをアプリ名フォルダの下に作っています。
こうすることでまとめてドンっと開発環境渡したいときは[アプリ名フォルダ]まるごとzipにして渡してしまえばいいですね。
githubにあげるときも同様ですが、Unity環境とUWP環境で除外したいファイルが違ったりするので、UnityプロジェクトフォルダとUWPフォルダにそれぞれ.gitignoreを記述しておくとよいでしょう。
そのためには、HoloLensアプリを作るときにUnityを立ち上げたら、例えば次のように[Project Name]欄に記載する値と、[Location]欄に記載するフォルダ名の最後をまずは一致させておきます。
Unityプロジェクトができあがったら、提携作業としてまずはHoloToolkit-Unityをアセットとして追加します。
githubのreleaseにアセットパッケージファイルがあるのであらかじめダウンロードしておきます。
2017/09/06現在、私が使っている環境は、
Unity 5.6.2f1
なので、HoloToolkit-Unityもv1.5.8.0になります。
[Assets]-[Import Package]-[Custom Package]メニューでダウンロードしたアセットパッケージファイルを指定します。
アセットが追加されるとメニューなども拡張されるので、HoloToolkitメニューからいつものConfigurationをやっておきましょう。
Unityのシーンを保存したいときは、プロジェクト名と同じ名前で保存しています。
HoloLensに搭載されたOSはまだWindows 10 Anniversary Updateなので、開発環境がCreators UpdateやFall Creators Updateだったりした場合には、UWP SDKとして10.0.14393.0を明示的に選択します。
また、[Unity C# Projects]チェックもデフォルト状態ではついていないのでこれもつけておきます。
UWPフォルダは最初できていないので[新しいフォルダー]をクリックしてフォルダを作成して名前を「UWP」にします。
UWPのソリューション構成は次のように3つのプロジェクトから構成されます。
*ここでVisual Studio 2015 Update 3を使っていると特に問題なく、HoloLensをUSBで接続した途にビルドタイプ「x86」にして出力先を「Device」にすればHoloLensでアプリが立ち上がります。
さて、現状のUnity 5.6.2f1からだとVisual Studio 2017を使うとエラーでビルドが失敗します(15.3.3でも失敗する)。
原因は、上2つのプロジェクトのcsprojファイルで記載されている
RunSerializationWeaver
の実行プロセスで
System.Collections.Generic.KeyNotFoundException: 指定されたキーはディレクトリ内に存在しませんでした。
というエラーが発生して
UWP\GeneratedProjectsUWP\Assembly-CSharp-firstpass\bin\x86\Debug\Assembly-CSharp-firstpass.dll
UWP\GeneratedProjects\UWP\Assembly-CSharp\bin\x86\Debug\Assembly-CSharp.dll
が作成されないからです。
また、最後の1つのプロジェクトでも
UWP\Unity\Tools\AssemblyConverter.exeの実行プロセスで
System.Collections.Generic.KeyNotFoundException: 指定されたキーはディレクトリ内に存在しませんでした。
というエラーが発生します。
どうやらこれを解決するためには、Unity 5.6ならばVisual Studio 2015にするか、Visual Studio 2017にしたいならUnity側をUnity 2017.1.0p5にするしかないようです。
でも、Unity 2017用のHoloToolKit-Unity (Unity 2017用だとMixedRealityToolkit-Unity) は、Pre-releaseなんですよね。
HoloLens Toolkit-UnityあらためMixed Reality Toolkit-UnityのSpatialMappingを使うと空間認識を行って、Unity空間の中に現実世界の床や壁を反映してくれます。
やり方は簡単で、[SpatialMapping]-[Prefabs]から[SpatialMapping]オブジェクトをHierarchyウィンドウにドラッグアンドドロップするだけであとは自動的に良しなにやってくれます。
起動するとすぐに空間認識が始まって、その進行に合わせて不定形のメッシュが描画されていきます。
SpatialMappingを使うと手軽に空間メッシュ表示が得られますが、平面に合わせてもう少し綺麗に賽の目で表示してほしいときがあると思います。そういったときはSpatialUnderstandingを「追加」します。
やり方は、[SpatialUnderstanding]-[Prefabs]から[SpatialUnderstanding]オブジェクトをHierarchyウィンドウにドラッグアンドドロップします。
あとは以下の点を修正するのみです。
SpatialMappingオブジェクトが動作していることを前提としてSpatialUnderstandingオブジェクトは動作するので、SpatialMapping側の[Auto Start Observer]プロパティのチェックを外したりすると動かなくなりますのでご注意ください。
動作環境:
Unity 5.6.2f1 + Visual Studio 2017 Update 3
ターゲットバージョン Windows 10 Anniversary Edition (10.0.14393)
Visual Studio 2017 Update 3 (Ver 15.3.0)がリリースされました。
サイトからダウンロードでもいいのですが、Visual Studio 2017をインストールしたときにインストールされるVisual Studio Installerを立ち上げるとUpdate 3の更新を求められるので、サクッと更新してから画面上の[変更]ボタンを押して各種必要なものをUpdate 3に置き換えていくのがいいでしょう。
とはいえ、UnityとかはUpdate 3よりも更新が進んでいるので、必要に応じて、Visual Studio Installerからインストールした後に、プログラムの追加と削除からUnityをアンインストールしてUnityのサイトからUnity 2017をダウンロードしてインストールしてあげるといいでしょう。
それでは、よりVisual Studioライフを!
HoloLensでMixed Realityアプリを作成するために、Unityでオブジェクトを配置するとWorld-Lockといって周りの空間にオブジェクトが配置されます。
そのため、ほかのところを向いてオブジェクトの方を向くと、きちんとオブジェクトはさっきの場所に居続けます。
また、周りの空間に対して配置されているので、シースルーで見える風景とCGのオブジェクトがずれることがなく、そのため3D酔いのようなことが起こりません。
ここまでであれば、すごく性能の良いARっぽい感じですが、HoloLensがMixed Realityと呼ばれるのは、現実世界のモノの向こう側にCGのオブジェクトを配置すれば、きちんと見切れてくれる、つまり、現実のモノでCGの一部や全部が隠れてしまうという効果が実現できるからです。
このように現実世界にモノを固定することをWorld-LockとHoloLensの世界では呼んでいます。
一方、HoloLensのスタートメニューのように視点をかえるとそこに追いかけてくるようなものはBody-Lockと呼びます。Body-Lockでオブジェクトを配置することはあまりないかもしれませんが、例えば、動作状態やメッセージを常に視野の端にいれておきたいようなときがあると思います。
このようなオブジェクトの動きを実現するには、HoloToolkit-Unityにあるtagalongを使います。
Unityを立ち上げてHoloToolkit-Unityを設定するなど準備が整ったら、Unity標準の3DオブジェクトであるCubeとHoloToolkit-UnityのUITextプレハブを配置します。
UITextプレハブのInspectorで[Add Component]ボタンをおして、「Billboard (Script)」と「Tagalong (Script)」を追加します。
Billboardはオブジェクトの表示面が常に視野を追従するようにするスクリプトです。UITextプレハブは配置直後はテキストが正面を向くようになっているので、Billboardを追加して[Pivot Axis]プロパティに「Free」を指定することで常にテキストが正面を向いてくれて読みやすい状態をキープできます。
Tagalongはオブジェクトが視界から外れたら視界の中に動かすためのスクリプトです。追加直後のプロパティ値から次のように値を指定します。このあたりは好みに応じて値を変更してみてください。
プロパティ | 設定値 |
Tagalong Distance | 1 |
Minimum Horizontal Overlap | 1 |
Minimum Vertical Overlap | 1 |
Minimum Tagalong Distance | 0.5 |
このように設定すると次のサンプル動画のような動きになります。
デバッグ時の数値を確認するような場合にも使えると思います。