tag:blogger.com,1999:blog-50811703117560455452024-03-06T08:59:56.568+09:00ZuQ9->Nn To 辛周(ズキューンとからまわり)空回りの日常をつづる日記です。ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.comBlogger300125tag:blogger.com,1999:blog-5081170311756045545.post-51190974296564040502023-06-30T21:45:00.000+09:002023-06-30T21:45:51.942+09:00Unityで作成したiOSアプリをvisioOS Simulatorで動かしてみた。お疲れ様です。ZuQ9->Nnです。<br />
WWDC2023で発表された、注目の新デバイス Apple Vision Proの開発環境が提供されました。<br />
Apple Vision Proの開発環境は、Xcode、SwiftUI、RealityKit、ARKitの他、Unityがアナウンスされています。<br /><br />
Unity関連情報では、Bring your Unity VR app to a fully immersive spaceおよび
<a class="embedly-card" href="https://developer.apple.com/videos/play/wwdc2023/10093/"></a><script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
Create immersive Unity appsという動画が公開されています。
<a class="embedly-card" href="https://developer.apple.com/videos/play/wwdc2023/10088/"></a><script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
<br />
この動画をチェックしてみたのですが、結局、具体的なUnityでのApple Vision Proのアプリ開発が理解できませんでした。。
<br />このブログ記事を書いている2023年6月30日の現時点では、
結局のところUnityを用いたApple Vision Pro、visionOSアプリの開発は具体的な方法が無いようです。<br />
この理解が間違っているなら、ご指摘して頂きたいです。<br /><br />
しかし、Apple Vision Pro、visionOSでは、iOSのアプリがそのまま動くのハズなので、<br />
ひょっとしたら、UnityでiOSのSimulator向けに出力すればvisioOS Simulatorでもそのまま動くのでは?と思い試してみました。<br />
今回の開発環境は下記です。
<div style="background: rgb(255, 255, 255); border: 2px solid rgb(17, 17, 17); padding: 10px;">
<ul style="text-align: left;">
<li>Unity 2022.3.3f1(Apple Silicon)</li>
<li>Xcode 15.0 bata2(15A516b)</li>
<li>macOS Ventura 13.4.1</li>
<li>ハードウェアは、M2 MacBook Air</li>
</ul>
</div>
<br />
今回は、アプリが起動することが確認できれば良いので、とりあえず、Cubeをひとつ表示するアプリを作成します。<br />
これは、必須では無いのですが、プロジェクトを開くときに、UnityでiOSを選択しておけば、Swithc Platformを行う手間が省けて便利です。<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinqMfrlgRitaC3NTNVNTf2zSWa2dwI3Y-BiF2rZ2yJknX5UrpPogslFTO-ReovehnWvYiHUyi9oZ8iKZKStC7INpCeEwe0BgFxv-3cdjfR2RaZHTEizwOtSHJVuCA2lpcnK7btnIGD52rK_N_wCHw0NJHLGH4SaJdgDzYDzyve2_BIvKqQYbIU18JRUMR2/s1370/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2023-06-29_22_27_05.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="246" data-original-width="1370" height="114" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinqMfrlgRitaC3NTNVNTf2zSWa2dwI3Y-BiF2rZ2yJknX5UrpPogslFTO-ReovehnWvYiHUyi9oZ8iKZKStC7INpCeEwe0BgFxv-3cdjfR2RaZHTEizwOtSHJVuCA2lpcnK7btnIGD52rK_N_wCHw0NJHLGH4SaJdgDzYDzyve2_BIvKqQYbIU18JRUMR2/w640-h114/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2023-06-29_22_27_05.png" width="640" /></a></div>
<br />
Unityが起動したら、Hierarchyから、+ > 3D Object > Cubeを選択して、Cubeを配置<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGBoMirGK4VP8XRq3hzu0EAEJxZka7Lk8gPkwwlm0BTCdIMiwQKoivvDFrtOcCQGEFRlbQr7-gkksIaGIHZ-nX-JRmFi0c18vYO7LXt2SAc_5AFVHPp-Xgm0NmoyY4VdnSCP_pkL_GNVmSp4e5uSkiSWlZk4Z_KFXF8jVI9NG_z6H2RQ8MF957gFn-jacd/s796/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2023-06-29_22_35_52.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="444" data-original-width="796" height="356" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGBoMirGK4VP8XRq3hzu0EAEJxZka7Lk8gPkwwlm0BTCdIMiwQKoivvDFrtOcCQGEFRlbQr7-gkksIaGIHZ-nX-JRmFi0c18vYO7LXt2SAc_5AFVHPp-Xgm0NmoyY4VdnSCP_pkL_GNVmSp4e5uSkiSWlZk4Z_KFXF8jVI9NG_z6H2RQ8MF957gFn-jacd/w640-h356/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2023-06-29_22_35_52.png" width="640" /></a></div>
Cubeの配置が終わったら、Unityのメニューバー Edit > Project SettingsでProject Settingsを開き、iOSのタブを選択<br />
Playerから Other SettingsのTarget SDKをSimulator SDKに変更<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpY6GHTRIE2vs4qp5SMc5Q4HpYhoAUD8gjDo41GzQD2Ylor4Ji3o1KoFPrhm0caolzMlebrRNRaAA3F6eX3_bjyPjBQdUpmtzkreYCEIvcTxeqhkEzgacLwxSpRCmg4UChXkPiz5zNgy-BzZNsQafHBa4KULVRj0sOcIxttI21HzMp2S0B_ZtEdIqDSoMO/s2114/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2023-06-29_22_45_33.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1628" data-original-width="2114" height="492" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhpY6GHTRIE2vs4qp5SMc5Q4HpYhoAUD8gjDo41GzQD2Ylor4Ji3o1KoFPrhm0caolzMlebrRNRaAA3F6eX3_bjyPjBQdUpmtzkreYCEIvcTxeqhkEzgacLwxSpRCmg4UChXkPiz5zNgy-BzZNsQafHBa4KULVRj0sOcIxttI21HzMp2S0B_ZtEdIqDSoMO/w640-h492/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2023-06-29_22_45_33.png" width="640" /></a></div>
最後に、Unityのメニューバー File > Build SettingsでBuild Settingsを選択、Add Open ScenesでScenes/SampleSceneを追加<br />
PlatformがiOSになっているのを確認後、Run in Xcdoe を v15.0 / Applications / Xcode-beta.appを選択、<br />
Build And Runボタンを押下する
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc_kt0VFnlmrVs0huKfGiSs4gtT_lFsO54G0wgp2fxHITqIJJ5290r5h-LMadUL2E_UwlnnQIPHa529oR8JvlqFJ9KdjjuCVeWsJAzzpAH_eJsYKBO3ndMdD171jbbDSvUcZJ-POtWlN4UVAmxNLEZwjg5LSuDMsKLA8rTEw5kJmBxyXrT3N2mjEvopP2j/s2080/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2023-06-29_23_25_27.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1566" data-original-width="2080" height="482" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhc_kt0VFnlmrVs0huKfGiSs4gtT_lFsO54G0wgp2fxHITqIJJ5290r5h-LMadUL2E_UwlnnQIPHa529oR8JvlqFJ9KdjjuCVeWsJAzzpAH_eJsYKBO3ndMdD171jbbDSvUcZJ-POtWlN4UVAmxNLEZwjg5LSuDMsKLA8rTEw5kJmBxyXrT3N2mjEvopP2j/w640-h482/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2023-06-29_23_25_27.png" width="640" /></a></div>
アプリの保存のダイアログが開き、New Folderで新規フォルダ作成してChooseボタンを押せば、Xcode15.0 bataが自動で起動します。これで、Unity側の作業は終了。<br /><br />
Xcodeがひらいたら、左のNavigationよりUnity-iPhoneを選択、TARGETSのUnity-iPhoneを選択、Build Settingsのタブ、All、Levelsを選択後、Base SDKのUnity-iPhoneをvisionOSに変更<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6oXZ3cZN9v3aXBVFC3nU1ul9QT1Yhd-QTrHsPxHfCRaI0cGrt6FwQq8RGie1BWLXMHWDDCJQ8gr6UzjElN9FO04IQ7p2RbFfKQlWP4yAm0H2dbq0mY6O46h3YQAiCOHhg-RpmBMkoady6yMQYkLCpoq_R864ETr1HR-BxavJ0wA5YJ6ZhfRiSur9MGt2t/s2770/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2023-06-29_22_58_34.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1056" data-original-width="2770" height="244" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi6oXZ3cZN9v3aXBVFC3nU1ul9QT1Yhd-QTrHsPxHfCRaI0cGrt6FwQq8RGie1BWLXMHWDDCJQ8gr6UzjElN9FO04IQ7p2RbFfKQlWP4yAm0H2dbq0mY6O46h3YQAiCOHhg-RpmBMkoady6yMQYkLCpoq_R864ETr1HR-BxavJ0wA5YJ6ZhfRiSur9MGt2t/w640-h244/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2023-06-29_22_58_34.png" width="640" /></a></div>
つづいて、TARGETSのUnityFrameworkを選択、Base SDKのUnityFrameworkをvisionOSに変更<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuMSIkGymMFkEy-8KQnJrJJ3czkizl6cVKQmBmPFN-VGXN1LOeooPkUmFUoxBZdW4pfZSaYIY1XbCA9LQD4d_skF7q-9WwHTYCpkjkAwEI3uGdjkv3OkoTLx63da2W1vwltggga7ndCEkgBTdGSQG7KW3pk_5IgENt5alhGfk9ysLho2QsRwRvuw3aGkVk/s2774/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2023-06-29_22_58_52.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1154" data-original-width="2774" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiuMSIkGymMFkEy-8KQnJrJJ3czkizl6cVKQmBmPFN-VGXN1LOeooPkUmFUoxBZdW4pfZSaYIY1XbCA9LQD4d_skF7q-9WwHTYCpkjkAwEI3uGdjkv3OkoTLx63da2W1vwltggga7ndCEkgBTdGSQG7KW3pk_5IgENt5alhGfk9ysLho2QsRwRvuw3aGkVk/w640-h266/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2023-06-29_22_58_52.png" width="640" /></a></div>
次に、XcodeのメニューバーからProduct > Destioation > Destinations Archtectures > Show Bothを選択<br />
(これは、僕のMacがApple Siliconだったから必要だった、Intel Macの人は必要ないかも)
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDDRG6nWVbw3GwImZAs4lfrD2UvreAHggU_44Z2rvjSFIFghZgp0bq_3Do7YuM4rp8vltLEAhCdjWcRih8henC24E0SrD34wwpD5pYV4o-WoItePcwg8Hrsw9-OpHc1wVRO5-ouN1936qzDvsHaHRbm2r3ObC-ZJzhKxUYoky4R1DqoIyjr-F78J8GFwDc/s2536/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2023-06-29_22_59_19.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1502" data-original-width="2536" height="380" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDDRG6nWVbw3GwImZAs4lfrD2UvreAHggU_44Z2rvjSFIFghZgp0bq_3Do7YuM4rp8vltLEAhCdjWcRih8henC24E0SrD34wwpD5pYV4o-WoItePcwg8Hrsw9-OpHc1wVRO5-ouN1936qzDvsHaHRbm2r3ObC-ZJzhKxUYoky4R1DqoIyjr-F78J8GFwDc/w640-h380/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2023-06-29_22_59_19.png" width="640" /></a></div>
ふたたび、TARGETSからUnity-iPhoneを選択、GeleralのSupproted Destinationsの + を押して、 Apple Vision > Apple VisionでvisionOS Simulatorを追加
<div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpgYvalAnfMiSORSI1yL5643j2Bb98QmSM9r5YjHnCwGKWVR_ZK3V_d6pI5XvH6rzRrYBCHr3WRNpzWONcA9_edK4FmQK-QvU-zkdusUWN7Njwb0XHI1IwPge-8L1oWfAaTnxz58zwnnZPj8vtZSoCMJrGzUdHjQ2z1roxxg_9XOgofDpjG84HeSf8r2VE/s2350/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2023-06-29_22_59_46.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="946" data-original-width="2350" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpgYvalAnfMiSORSI1yL5643j2Bb98QmSM9r5YjHnCwGKWVR_ZK3V_d6pI5XvH6rzRrYBCHr3WRNpzWONcA9_edK4FmQK-QvU-zkdusUWN7Njwb0XHI1IwPge-8L1oWfAaTnxz58zwnnZPj8vtZSoCMJrGzUdHjQ2z1roxxg_9XOgofDpjG84HeSf8r2VE/w640-h258/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88_2023-06-29_22_59_46.png" width="640" /></a></div>
追加されたvisionOS SImulatorを選択
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnJEVqs69EJB9HkxU9h8Bx5hxPLkPb9GnerxUUgEwLtABREDvc-D5xgxeYlzSCg45CIhNvrqQ74Hc9tLW0s0UhF0nKGC7Mtg5QbjI-bn0-pnA2D_uFDNMyXbvd__-3-RInBWo19RAUEEXgVsnYo8uAVReOeqVNfEQEz96hl7oqOZquwQMkasNM5efzwJRP/s860/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202023-06-30%206.57.15.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="732" data-original-width="860" height="544" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnJEVqs69EJB9HkxU9h8Bx5hxPLkPb9GnerxUUgEwLtABREDvc-D5xgxeYlzSCg45CIhNvrqQ74Hc9tLW0s0UhF0nKGC7Mtg5QbjI-bn0-pnA2D_uFDNMyXbvd__-3-RInBWo19RAUEEXgVsnYo8uAVReOeqVNfEQEz96hl7oqOZquwQMkasNM5efzwJRP/w640-h544/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202023-06-30%206.57.15.png" width="640" /></a></div>
Xcodeのメニュー、Debug > Attach to Process by PID or Nameを選択、出現したダイアログにProductNameを入れて、Attachボタンを押すとvisionOS Simulatorが起動します。<br />
<span style="color: red; font-size: large;"><b>アプリは自動起動しない</b></span>ので、visionOS Simulatorのアプリのアイコンをクリックします。起動は、こんな感じです。<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dw1uAuHXuuRNOBE4MWXSyw5swlD0o82P3wlNRrgpR0UkZspKAAZu0yQLfsmn-bNNlnKujuOyIgKcvEhTzCvJg' class='b-hbp-video b-uploaded' frameborder='0'></iframe>
</div>
<br /><b><span style="font-size: large;">いかがだったでしょうか?</span></b><br />
個人的には、iOSアプリが、そのまま動くのは、予想以上にインバクトが強かったです。<br />
すでにアプリをStoreにリリースしている人は、その時点でかなりのアドバンテージがあると言えますね。<br />
今回の検証は、visionOSに正式に対応したUnityがリリースされれば、意味なくなるようには思えたのですが、なんとなく気になったので。。<br />
くれぐれも、<b><span style="color: red; font-size: large;">UnityでvisionOS用のアプリを作成した訳では無い点</span></b>を勘違いしないでください。</div>ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-89118737875635776532021-06-18T09:24:00.001+09:002021-06-18T09:26:24.850+09:00Tokyo HoloLens ミートアップ vol.26でLTをしましたお疲れ様です。ZuQ9->Nnです。<br><br>
2021年6月16日(水)Tokyo HoloLens ミートアップ vol.26が開催されました。<br>
当初は、一般参加を予定していました。<br>
たまたま、気になって調べ始めていた、SpatialAwarenessのSurfaceMeshesToPlanesについて<br>
いったんまとまったので、ブログ記事にしようかとも悩んだのですが、<br>
タイミング的に思い切って勉強会でのLT発表に切り替えて参加しました。<br>
TLの資料はこちらです<br>
<div style="left: 0; width: 100%; height: 0; position: relative; padding-bottom: 56.25%; padding-top: 30px;"><iframe src="https://docs.google.com/presentation/d/1ELtyA2ZWHuHVmri72LVQFholzHHrIPlz_KqsktPWYak/embed" style="top: 0; left: 0; width: 100%; height: 100%; position: absolute; border: 0;" allowfullscreen scrolling="no" allow="encrypted-media"></iframe></div>
<br>
今回は、オンラインということもあり、こちらも折角なので<br>
リアルおっさんよりも、普段利用している幼女のアバターでのLTにしました。<br>
アバターはある程度、好評なようでした。<br>
プレゼンも、事前準備をしたためか、そこまでオタオタもせず、無事終えることができました。<br><br>
アバターは、たまたま、普段から利用していましたが。<br>
配信ソフトを利用する環境設定は、少し手間かなと。<br>
アバター表示は、今回は、こちらの<a href="https://booth.pm/ja/items/1272298">VMagicMirror</a>を利用しました。<br>
アバターとデスクトップの映像を Obs Studioの仮想カメラを用いてキャプチャーTeamsで利用という構成です。<br>
正直、たった5分のLTのために、ここまでコストをかけるのはとの思いもわいてきましたがプレゼンそのものは気軽になるような感覚が強かったです<br>
このあたりのバランスはそれぞれの人の環境にもよるかもしれません。<br>
<br>
発表内容にもあるようにSpatialAwarenessのSurfaceMeshesToPlanesは<br>
マルチプラットフォーム対応なので、(旧)HoloLensの実機でも動作しました。<br>
LTの時間関係上、実機での動作動画をはしょってしまったので、こちらにアップしておきます。<br><br>
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='600' height='498' src='https://www.blogger.com/video.g?token=AD6v5dwf4ZFNIHjj-rcMn5Th5EcPolQP0HsCnQz18Sw1CVVCwLuds8G_Rr6UfHetiJLc6Zf1J2eSAlNJuHthBCCvIQ' class='b-hbp-video b-uploaded' frameborder='0'></iframe>
<br><br>
昔のHoloLens、久々に触ったこともあり、HoloLens 2との操作の違いもあり<br>
Boomをすっかり忘れてしまって、あれ?どうやんだっけとかw<br>
エビデンスの動画一つに四苦八苦していまいました。<br><br>
Tokyo HoloLens ミートアップでのLTは、かなり久々というか<br>
アウトプットそのものも、かなり久々で<br>
量も少ないうえ、内容もイマイチかなぁとも悩んだのですが<br>
何もしないより、少しを積み重ねていくほうがマシかなと。。。。<br>
コロナの中において、業務でも、今、出来る自分のベストって何?<br>
と悩ましい日々を送っており、今後のためにも、この体験が自分のプラスに出来ればと思います。<br>
今後も機会があればチャレンジかな。意識しすぎて、辛くなりすぎない程度にと考えています。<br>
ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-83928942874020875182020-07-12T16:20:00.000+09:002020-07-12T16:20:12.456+09:00HoloLens 2でも、勝ちまくりモテまくり?手から札束を出して札束風呂にしてみた。お疲れ様です。ZuQ9->Nnです。<br />
<br />
2020年7月2日に、HoloLens 2が日本でも、<a href="https://www.microsoft.com/ja-jp/p/holoLens-2/91pnzzznzwcp/?activetab=pivot%3aoverviewtab">マイクロソフトWebサイト</a>から<br />
個人開発者でも購入可能になり、さっそく購入しました。<br />
僕は2020年7月7日に受け取りました。<br />
<br />
初代HoloLensを購入したとき、思い付きでつくた<br />
こちらの札束風呂アプリ。。<br />
<blockquote class="embedly-card">
<h4>
<a href="http://zuq9nn.blogspot.com/2017/01/hololens.html">勝ちまくりモテまくり? HoloLensを買ったのでバスタブに札束を敷き詰めてみた</a></h4>
お疲れ様です。ZuQ9->Nnです。 HoloLensを発作的に購入してしまいました。 ただ購入して遊ぶだけでは物足りず、 折角、開発者なので、それらしいことをと 思いついたのがこのネタです。 基本的にはHoloToolkit-Unityの Input > Tests > Secene InputManagerTest.unityのSceneで利用している InputHandleCallbackFX.csをもとに作成しました。 個人的には、もっと、あふれださせたかったんですが、オブジェクトを あまりに多く作り出すため、アプリが頻繁に落ちてしまいました。 この辺は、まだまだ修行不足ですね。。 ゆーじ さんの、このネタと、若干かぶってしまいましたが。 すでに作りこんでしまっていたのでもったいなかったのと なぜだか、どうしてもやっておきたい衝動を抑えきれませんでした。 GitHubにもアップしたので参考にどうぞ。 ちなみに、GitHubのリポジトリ名は「 勝ちまくりモテまくり」を ローマ字表記にしたもので このキーワードで画像検索をするとよく雑誌でみかける画像がでてきます。 このネタ、リアルでやるとすると、いくらかかるんだろう。。 実際やるには、ちょっと敷居が高くても バーチャルなら結構簡単にできるってネタは HoloLensのようなデバイスのアプリとして 向いているのではと思います。 今後もできる限り技術情報を発信していきたいですが 僕のことだからすぐ飽きちゃうかも ゆるりと楽しんでいくとします。</blockquote>
<br />
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
また、作ってみようかなと思い立ったのでやってみました。
<br />
とは言え、まったく同じものを作るのもつまらないかなと。。<br />
<br />
HoloLens 2はもちろん、Air Tapも可能なのですが、<br />
なんといってもハンドトラッキングが使えるのが特徴です。<br />
<br />
なので、今回は、手から札束を出すというアプローチを試みました。<br />
実装は、空のGameObject(名前は、SpawnPointにしました)に<br />
MRTKで提供されている。HandConstraintPalmUpをアタッチメントして作成。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgxCihS6DTS7SPc5iPXbI0TfW7BObdSqWdONi0l_E3UL9XDQES27E4S5ShfObiPwag1Zh6JQcU4c5hXKhrustBOG1hPsv4z1knTsRzMxsHGkU-xSOG8hyphenhyphen-A8YP1_oBaMbhT2su4eAcor38/s1600/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2020-07-11+081436.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="538" data-original-width="618" height="556" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgxCihS6DTS7SPc5iPXbI0TfW7BObdSqWdONi0l_E3UL9XDQES27E4S5ShfObiPwag1Zh6JQcU4c5hXKhrustBOG1hPsv4z1knTsRzMxsHGkU-xSOG8hyphenhyphen-A8YP1_oBaMbhT2su4eAcor38/s640/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2020-07-11+081436.png" width="640" /></a></div>
<br />
ただ、このままだと手のひらが画面に映ったときに札束がでてしまいます。<br />
今回は、手を風呂のほう、つまりカメラから見えなくなったときに<br />
札束をだしたかったので、onHandDeactivateのタイミングで札束を出すようにしました。。。<br />
<br />
しかし、onHandDeactivateは何も表示されていない場合もイベントが起きるらしく<br />
onHandActivateでフラグを立てて、最初はイベントが起きても<br />
札束が出ないように制御しました。あと、Orbitalもアタッチしないと<br />
手を動かしたときに、手の位置から札束がだせなかったりと。。<br />
こんな簡単なアプリをつくるだけでも色々ハマりがあり勉強になるものですね。<br />
<br />
ちなみに、アプリに用いた、札束のアセットはこちらです<br />
<blockquote class="embedly-card">
<h4>
<a href="https://assetstore.unity.com/packages/3d/money-pack-84433">Money Pack | 3D | Unity Asset Store</a></h4>
Elevate your workflow with Money Pack asset from Perfect Games. Find this & other great 3D options on the Unity Asset Store.</blockquote>
そして完成したアプリを実機で動かしたのがこちらです。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUMo2vtp8cvRTHJ3ut8EvNjNEj_MIaomEFQLLjIr9K7TgJZ0W6HVBkDcvCdimi_rwIYnAmPLmkHxGXGnQP3KELH-IZ5b4aIVfuhy6NQ_5e8rSMWjVLvsl-w-Dh7cndZpHulgqv14mXs1p6/s1600/Blog.mp4" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="240" data-original-width="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUMo2vtp8cvRTHJ3ut8EvNjNEj_MIaomEFQLLjIr9K7TgJZ0W6HVBkDcvCdimi_rwIYnAmPLmkHxGXGnQP3KELH-IZ5b4aIVfuhy6NQ_5e8rSMWjVLvsl-w-Dh7cndZpHulgqv14mXs1p6/s1600/Blog.mp4" /></a></div>
<br />
<br />
今回は、デプロイに手間取りました。Visual Studioにまでは出力できるのですが<br />
実機にデプロイするときに、何度も、タイムアウトになってデプロイが失敗する現象がおきてしまって。原因はちょっとわかりません。。Releaseでデプロイしようとすると各自にタイムアウトになってしまいます。。誰が、何が原因かを教えていただければ。。<br />
<br />
僕の場合はですが、とりあえずの回避方法はペアリングを一度外して実機を再起動とかすると再びデプロイの成功率がよくなりました。。(これが正しいのかは不明です。)<br />
<br />
やはり、いつものパターンでアウトプットが滞っているのでなんとかしたいです。。<br />
せめて、こんな感じのネタアプリが連発できたらなと。。<br />
<br />
ゆるりとモチベーションを維持しつつ、続けていければと思っています。ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-11118679914029427852020-02-13T22:48:00.001+09:002020-02-13T22:48:34.162+09:00EyeTrackingTargetを試してみた【MRTKv2.2 】お疲れ様です。ZuQ9->Nnです。<br />
これは、2020/02/08(土)から2020/02/09(日)に開催されたOsaka HoloLens "2" ハッカソン2020の準備のため<br />
<br />
EyeTrackingネタをやろうと決めたときに調べた調査メモのようなものです。<br />
<br />
EyeTrackingはずっと実機じゃないと使えないと思っていたのですが、<br />
Unity上でもシミレーションできると知って試してみました。<br />
<br />
今回の環境はUnity2019.<br />
Microsoft Mixed Reality Toolkit v2.2.0 です。<br />
<br />
Microsoft.MixedReality.Toolkit.Unity.Foundation.2.2.0.unitypackageのインポート<br />
UnityのMixed Relaity ToolkitメニューからAdd to Scene and Configureを選択する等はいつも通り<br />
わからない方は、<a href="http://zuq9nn.blogspot.com/2019/12/hololens-advent-calendar-2019-8-mixed.html">以前の記事</a>を参考にしてください。<br />
EyeTrackingを利用するにはProfileの設定が必要です。<br />
<br />
Hierarchyから、MixedRealityToolkitを選択し、Inpsectorを表示<br />
InpsectorからCopy & Cutomizeをクリック<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhivFVM_AWYxAuQWR9I7icWKaO8WddlQm1Gh-HA5fal2GKGgB7e4qzRaVEwPWQyXR1qmLByeMGeQVu_FWz1n_T4SzAvP8diHzwDAuQmBnEUFK4O0Fk_M0Nz196kx9IeMrKrUfn9R7EAy8ze/s1600/CloneConfige.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="505" data-original-width="1041" height="310" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhivFVM_AWYxAuQWR9I7icWKaO8WddlQm1Gh-HA5fal2GKGgB7e4qzRaVEwPWQyXR1qmLByeMGeQVu_FWz1n_T4SzAvP8diHzwDAuQmBnEUFK4O0Fk_M0Nz196kx9IeMrKrUfn9R7EAy8ze/s640/CloneConfige.png" width="640" /></a></div>
<br />
Cloning Profileのダイアログが出ますので、Profile Nameを決定してCloneボタンをクリック<br />
Profile Nameは何でも良いのですが、今回はTextMixedRealityToolkitConfigurationProfileとしました。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoHbVhUkdjcazvzKvjfkQX2R76evnoWz8iaPsChmxyjbqJvqbPD86yxflE_RViOLkFl0r39xuEZ0rDAMlEfh2cx1CHBhoToPQXJoh0LiBQVndS9gKhzvTKFlEqfnr2pHLYl-8tp5CfA3ys/s1600/Cloning.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="267" data-original-width="627" height="272" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoHbVhUkdjcazvzKvjfkQX2R76evnoWz8iaPsChmxyjbqJvqbPD86yxflE_RViOLkFl0r39xuEZ0rDAMlEfh2cx1CHBhoToPQXJoh0LiBQVndS9gKhzvTKFlEqfnr2pHLYl-8tp5CfA3ys/s640/Cloning.png" width="640" /></a></div>
<br />
InpsectorのProfileがTextMixedRealityToolkitConfigurationProfileに切り替わっていることを確認し<br />
Profileの中からInputを選択 DefaultMixedRealityInputSystemProfileの横のCloneボタンをクリック<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgULAadx5d6YJBVUZIm6rbNExwsAD6Luz7MP8DPdbUJrORWqAxVdndRbg6_Hml0f4r3qZHXTOebHyYwaqc1j9k8B27adhnoZPHWWGYkiGyDP74QNnby0Pnpn9g3XaaTvbA38k1kceaWxcQL/s1600/Input.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="852" data-original-width="1051" height="518" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgULAadx5d6YJBVUZIm6rbNExwsAD6Luz7MP8DPdbUJrORWqAxVdndRbg6_Hml0f4r3qZHXTOebHyYwaqc1j9k8B27adhnoZPHWWGYkiGyDP74QNnby0Pnpn9g3XaaTvbA38k1kceaWxcQL/s640/Input.png" width="640" /></a></div>
<br />
Cloning Profileのダイアログが出ますので、Profile Nameを決定してCloneボタンをクリック<br />
Profile Nameは何でも良いのですが、今回はTestMixedRealityToolkitInputSystemProfileとしました。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAkIu_E9V1aM5WowJog-Es65zEehgs5r4Gz7tzH4KfxV6t22cVDPp3T22xqPGkGzTv-jZ6arCIOHk1T_2CfNdrDqiFkfszx3tp3bORqjTCxoh85UQuNHhpuNxSHBJfgz664D6TNLtF6Lj8/s1600/CloningInput.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="255" data-original-width="628" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhAkIu_E9V1aM5WowJog-Es65zEehgs5r4Gz7tzH4KfxV6t22cVDPp3T22xqPGkGzTv-jZ6arCIOHk1T_2CfNdrDqiFkfszx3tp3bORqjTCxoh85UQuNHhpuNxSHBJfgz664D6TNLtF6Lj8/s640/CloningInput.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
InpsectorのProfileがTestMixedRealityToolkitInputSystemProfileに切り替わっていることを確認し<br />
Input Data Providersの + Add Data Providerをクリック、New Data providerが追加されますので<br />
▼マークをクリックして展開します。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRX9nt2wOYreAw0sMMTiw9dbXI5uZ-w6xMBLC9V9L1EaTCAbbwv_KqW3FXVRxRu3iqduAnOlgCpzA0aUOfx-roDe8OeC-Kx1ZEO5Nm8JixyZyNRWXprC9NlDhV5jUxmBQvjmqo52tUsnUh/s1600/InputSetting.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="777" data-original-width="1051" height="472" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRX9nt2wOYreAw0sMMTiw9dbXI5uZ-w6xMBLC9V9L1EaTCAbbwv_KqW3FXVRxRu3iqduAnOlgCpzA0aUOfx-roDe8OeC-Kx1ZEO5Nm8JixyZyNRWXprC9NlDhV5jUxmBQvjmqo52tUsnUh/s640/InputSetting.png" width="640" /></a></div>
<br />
New Data providerのTypeのドロップダウンから<br />
Microsoft.MixedReality.Toolkit.WindowsMixedReality.Input > WindowsMixedRealityEyeGazeDataProviderを選択<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdbrBR5fpq0bB5BJO-Td1KbL9h83VQylD0PjwdvLlN01ZJYAWDqpWqwGItP0mzca-rCdIA2gxwkbN6_Wi94uiNGIebs1vj-tuZZkr3fz7dcxoP7o06ajt24nwJhM5VS6PtX41m6GHagqoW/s1600/GazeDataProvider.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="771" data-original-width="1092" height="450" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjdbrBR5fpq0bB5BJO-Td1KbL9h83VQylD0PjwdvLlN01ZJYAWDqpWqwGItP0mzca-rCdIA2gxwkbN6_Wi94uiNGIebs1vj-tuZZkr3fz7dcxoP7o06ajt24nwJhM5VS6PtX41m6GHagqoW/s640/GazeDataProvider.png" width="640" /></a></div>
<br />
Input Data Providersから Input Simulation Serveiceの▼マークをクリックして展開
DefultMixeRealityInputSimulationProfileのCloneボタンをクリック<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJczsSSZNgKY9qJ2z3KAaddbdRp5gajo4stN4ZFRmtcz6F3naPVuj8umImRaW36a3M3lQfTF7WPAuv3CbNz3p75Z8Tszm8Vs9hCsB0wVg_vbvQGRvjqMBqBW-9dX4UcPF4m0FO4_5Skq8M/s1600/Simulated.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="871" data-original-width="1052" height="528" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJczsSSZNgKY9qJ2z3KAaddbdRp5gajo4stN4ZFRmtcz6F3naPVuj8umImRaW36a3M3lQfTF7WPAuv3CbNz3p75Z8Tszm8Vs9hCsB0wVg_vbvQGRvjqMBqBW-9dX4UcPF4m0FO4_5Skq8M/s640/Simulated.png" width="640" /></a></div>
<br />
Cloning profileのダイアログが出ますので、Profile Nameを決定してCloneボタンをクリック<br />
Profile Nameは何でも良いのですが、今回はTestMixedRealityToolkitInputSimulationProfileとしました。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0LRiZ-JyAzoKt6Ls1G6aRh6JakQKp2JUFY1mbKvBuc436IlL6w_bIQ9ir3E3X0xwVrvSZyZa8w8kKXQa6mNK_aZD0_ouNXUllv9nGDRiwO9d-FTb_dbwfwoOmDepH0QoTSKf-iUB4FUQv/s1600/SimuProfile.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="262" data-original-width="622" height="268" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0LRiZ-JyAzoKt6Ls1G6aRh6JakQKp2JUFY1mbKvBuc436IlL6w_bIQ9ir3E3X0xwVrvSZyZa8w8kKXQa6mNK_aZD0_ouNXUllv9nGDRiwO9d-FTb_dbwfwoOmDepH0QoTSKf-iUB4FUQv/s640/SimuProfile.png" width="640" /></a></div>
<br />
InpsectorのProfileがTextMixedRealityToolkitInputSystemProfileに切り替わっていることを確認し<br />
Simulate Eye PositionのチェックをOnにします。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQrPbHaAurzr76DS1sAY9XOm7zubtNn82ldlPMP6idZYOZnBDQhXIi5_dWswmzCN77S_-mqEJmz_EjBAZziHi6n5UOE5QZx1JIqplVHoNNzSV2IrbOhyQqeuyDaqpTbFMSY0DBdu8a4CQJ/s1600/SimulateEyePosition.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="862" data-original-width="757" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQrPbHaAurzr76DS1sAY9XOm7zubtNn82ldlPMP6idZYOZnBDQhXIi5_dWswmzCN77S_-mqEJmz_EjBAZziHi6n5UOE5QZx1JIqplVHoNNzSV2IrbOhyQqeuyDaqpTbFMSY0DBdu8a4CQJ/s640/SimulateEyePosition.png" width="562" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
最後に、Hierarchyから、MixedRealityPlayspaceの下のMain Cameraを選択<br />
InpsectorからUse Eye TrackingのチェックをOnにします。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsa0N7BJgWB1P9duOBUay-Ga3r3ovKcOdL52hjJxa0BkCJMv_dAhiF2OfAyiKKvv9mQLKb69Kvd69vyFzNjiWCR2LHPxgCTZ7DFGGtJEhiywq-XOlrjAOQ4XbzygxZWjprrLU3jQHNS5gu/s1600/UseEyeTracking.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="842" data-original-width="1063" height="506" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsa0N7BJgWB1P9duOBUay-Ga3r3ovKcOdL52hjJxa0BkCJMv_dAhiF2OfAyiKKvv9mQLKb69Kvd69vyFzNjiWCR2LHPxgCTZ7DFGGtJEhiywq-XOlrjAOQ4XbzygxZWjprrLU3jQHNS5gu/s640/UseEyeTracking.png" width="640" /></a></div>
<br />
これで、EyeTrackingのためのProfileの設定は完了です。<br />
今回はEyeTrackingを利用して、視界に入ったらCubeの色を変えるようなサンプルを作成します。<br />
<br />
HierarchyからCreate > 3D Object > CubeでCubeを作成<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWVVh_qfytYOrD3ZHwQChu3N91BSJuo271u5f_w_V5j3Mp96TXiiZodA4giJAv2Ys9lWAv8cndeYxT8x2D44Ej6JvlcYZRBtwpooEcS7Va_OOE6LnGKgubBRBs5MlcGzwH4kTv0FeWFYVf/s1600/3DObject.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="401" data-original-width="451" height="568" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWVVh_qfytYOrD3ZHwQChu3N91BSJuo271u5f_w_V5j3Mp96TXiiZodA4giJAv2Ys9lWAv8cndeYxT8x2D44Ej6JvlcYZRBtwpooEcS7Va_OOE6LnGKgubBRBs5MlcGzwH4kTv0FeWFYVf/s640/3DObject.png" width="640" /></a></div>
<br />
Cubeの座標を適当にCameraに写る位置に移動させます。(このサンプルでは x:0 y:0 z:2)<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvH_8oiL0L4kdkqvE0m5JT44SYV__NZxA2OdhpwJ1C2Rz42d15VnZ4aXFBmVWFpHRPPFRC_U5xuiItBurGht31c6CJov6JtUnQ5rI5WhddkOTV1gCWH2bkfYoXISxZFOGi8zF6riq7pflx/s1600/Cube.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="450" data-original-width="756" height="380" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvH_8oiL0L4kdkqvE0m5JT44SYV__NZxA2OdhpwJ1C2Rz42d15VnZ4aXFBmVWFpHRPPFRC_U5xuiItBurGht31c6CJov6JtUnQ5rI5WhddkOTV1gCWH2bkfYoXISxZFOGi8zF6riq7pflx/s640/Cube.png" width="640" /></a></div>
<br />
Hierarchyから、Cubeを選択、InpsectorからAdd Component > New Scriptを選択して新しいScriptを追加します。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixVIsCZ0EcJ1OKCsWb3QSpytdMAojdarLexgiru_10EVopDPrf1b8fgOnfJcchKnHgmZoS8fWMzkE7u8Z40-CdlHYgHhM6H5yVR87iVpEKSlJiDDBWquqTKiE_OSzsJrznX9UjDBXme6cN/s1600/NewScript.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="694" data-original-width="727" height="610" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixVIsCZ0EcJ1OKCsWb3QSpytdMAojdarLexgiru_10EVopDPrf1b8fgOnfJcchKnHgmZoS8fWMzkE7u8Z40-CdlHYgHhM6H5yVR87iVpEKSlJiDDBWquqTKiE_OSzsJrznX9UjDBXme6cN/s640/NewScript.png" width="640" /></a></div>
<br />
Script名は特に何でも良いのですが、今回はEyeTrackingTestとしました。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYbLNZ0IqI-CgFWj0pjMPVEsyKn4YdesJGK-UvkVjfpjCQdZlrEOqnTgsvH8n1y517mOjVvx25LevjVtkOilsL8NN4f08kgNP7WpglQ3NHDH_9a7j8ohtgb_Byxoppy8Y_lUEKbi2RrdrM/s1600/TestScript.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="720" data-original-width="744" height="618" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYbLNZ0IqI-CgFWj0pjMPVEsyKn4YdesJGK-UvkVjfpjCQdZlrEOqnTgsvH8n1y517mOjVvx25LevjVtkOilsL8NN4f08kgNP7WpglQ3NHDH_9a7j8ohtgb_Byxoppy8Y_lUEKbi2RrdrM/s640/TestScript.png" width="640" /></a></div>
<br />
EyeTrackingTestの中身はこんな感じです。
<script src="https://gist.github.com/ZuQ9Nn/09ea0380b2506c48af00103490ae654a.js"></script>
Hierarchyから、Cubeを選択、InpsectorからAdd Component > EyeTrackingTargetを選択してアタッチメント<br />
InpsectorからEyeTrackingTargetのイベントを設定します。<br />
EyeTrackingTargetのイベントと、そのイベントの後、どのような動きになるかを関連づけます。<br />
Hierarchyから、Cubeを選択、InpsectorのEyeTrackingTarget、On Look At Startに
Runtime OnlyにはCube、Functionには、EyeTrackingTestのAfterOnLookStartを設定<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgk-Zbcv5Fs-B6Yi4Yn43_MBQevBUieIf8qoPSZpcv0wkJWMOVWrvdjKp5Xkrx57TLriNMI7E8p_26XHyXlmC7E9MpdlXubC8k4tGBENLUl309cOAyaQ0_vDqaEV05DhdWUx45V2sSfHz7k/s1600/AfterOnLooAtStart.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="703" data-original-width="845" height="532" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgk-Zbcv5Fs-B6Yi4Yn43_MBQevBUieIf8qoPSZpcv0wkJWMOVWrvdjKp5Xkrx57TLriNMI7E8p_26XHyXlmC7E9MpdlXubC8k4tGBENLUl309cOAyaQ0_vDqaEV05DhdWUx45V2sSfHz7k/s640/AfterOnLooAtStart.png" width="640" /></a></div>
<br />
InpsectorのEyeTrackingTarget、On Look Awayに
Runtime OnlyにはCube、Functionには、EyeTrackingTestのAfterOnLookAwayを設定<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwilgo6Be4O78UAB4w2k9yq7mlpUIOud2WT6YVbO153DW9e9RU2WZdOADduoOTrYO9UgYKLNtuUlsGQNzE56XXvGrTAKT7NuFbN-vpzW4_X4DAeGLFk55qNnPRvU7XDsGmeoUiF4JM-edc/s1600/LookAway.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="779" data-original-width="956" height="520" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwilgo6Be4O78UAB4w2k9yq7mlpUIOud2WT6YVbO153DW9e9RU2WZdOADduoOTrYO9UgYKLNtuUlsGQNzE56XXvGrTAKT7NuFbN-vpzW4_X4DAeGLFk55qNnPRvU7XDsGmeoUiF4JM-edc/s640/LookAway.png" width="640" /></a></div>
<br />
これでアプリは完成です。Unityで実行するとこんな感じです。<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dwS_GpKbj0AvFB-Bk-RrRiR12H3VjwWZo2Ts54M1d3kJ_BX_aclnGp0LdiYv0kBET84-LImCmXn-Oxz7L81pg' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div>
Unity上はHead Trackingと同じ扱いになります。<br />
なので、実機に入れないと実際の動きは確認しきれません<br />
<br />
EyeTrackingTarget.csについて<br />
こちらは、MixedRealityToolkit-Unityで提供されているScriptです。<br />
<blockquote class="embedly-card">
<h4>
<a href="https://microsoft.github.io/MixedRealityToolkit-Unity/api/Microsoft.MixedReality.Toolkit.Input.EyeTrackingTarget.html?q=EyeTrackingTarget">Class EyeTrackingTarget</a></h4>
A game object with the "EyeTrackingTarget" script attached reacts to being looked at independent of other available inputs. Assembly: cs.temp.dll.dll Syntax public class EyeTrackingTarget : InputSystemGlobalHandlerListener, IMixedRealityPointerHandler, IMixedRealitySpeechHandler, IMixedRealityBaseInputHandler, IEventSystemHandler EyeCursorSnapToTargetCenter If true, the eye cursor (if enabled) will snap to the center of this object.</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
文字どうり、EyeTrackingの対象となるオブジェクトにアタッチして利用します。<br />
定義されているイベントに、そのイベントの後の処理を関連づけることで、制御を行っていきます。<br />
イベントは下記<br />
<br />
* OnDwell<br />
Event is triggered when the target has been looked at for a given predefined duration (dwellTimeInSec).<br />
ユーザーがdwellTimeInSecで指定された一定時間ターゲットを見ていた場合。<br />
InpsectorからdwellTimeInSecが指定できるので、その秒数で指定された時間内でターゲットを見ていた時のようですが、
ちょっとよくわかりませんでした。<br />
<br />
* OnLookAtStart<br />
Event is triggered when the user starts to look at the target.<br />
ユーザーがターゲットに視線が入った時<br />
<br />
* WhileLookingAtTarget<br />
Event is triggered when the user continues to look at the target.<br />
ユーザーがターゲットを見続けたとき<br />
<br />
*OnLookAway
Event to be triggered when the user is looking away from the target.<br />
ユーザーがターゲットから目をそらしたとき<br />
<br />
* OnSelected<br />
Event is triggered when the looked at target is selected<br />
ターゲットが選択されたとき<br />
これは、EyeTrackingで見つめて、かつ ハンドトラッキングのタップ、またはVoice Commandで対象のオブジェクトが選択された場合です。<br />
<br />
目からビームでは、OnLookAtStartのタイミングで当たり判定を行いました。<br />
そのため、必ずしもビームが当たらなくても視界に敵のターゲットが入った時点で<br />
敵がダメージをくらい、うまい人だと、かなり長く遊べてしまいます。<br />
<br />
WhileLookingAtTargetで3秒以上見つめたら、みたいな制御は必要だったかもしれません。<br />
<br />
このようにEyeTrackingTarget.csを利用することで、<br />
対象のオブジェクトに対する処理を書くだけでいいのは楽ですね。<br />
<br />
しかし、きっちりとした制御を行うのは、<br />
なにかしらもっと複雑な処理が必要になるかと思いますが<br />
今のところ、僕の知識ではわかっていません。<br />
<br />
EyeTrackingにつては他のデバイス含めて、<br />
機会あるごとに積極的に使っていこうかと思っています。<br />
何故かはわかりませんが、ハンドトラッキングよりも可能性が広がる気がしています<br />
<br />ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-73670535776637703042020-02-12T09:01:00.000+09:002020-02-12T09:01:07.284+09:00Osaka HoloLens "2" ハッカソン2020に参加 【二日目2020/02/09(日)】お疲れ様です。ZuQ9->Nnです。<br />
2020/02/08(土)から2020/02/09(日)に開催された<br />
<a href="https://osaka-driven-dev.connpass.com/event/160361/">Osaka HoloLens "2" ハッカソン2020</a> の二日目2020/02/09(日)レポです。<br />
<br />
2020/02/08(土)で、なんとか目からビームのアプリを<br />
実機で動くことに目途をつけて大阪の実家に戻り休むことにしました。<br />
<br />
夜通しの開発も提供されてたのですが、一人作業になってしまうこと<br />
日曜のハッカソンを乗り越えても、次の月曜からの仕事を考えると<br />
ここは、無理に作業をせず、いかに休んで体力と集中力を保つかを重視しました。<br />
<br />
会場に入って、とりあえず、実機での確認を行いました。<br />
また、最終的な動画を撮れないことも考えて<br />
バグがあっても動いているところさえと思い<br />
保険的に、提出用の動画撮影も行いました。<br />
<br />
棒状のオブジェクトから、LineRenderをメインに利用したアセットに切り替えたため<br />
当たり判定がうまく行っていなかったり、音とパーティクルの素材 Prefabでは<br />
Play on awakeのチェックが入りぱなしになっていたりと凡ミスも多く<br />
動いてはいるものの。。不具合も結構ありました。<br />
<br />
一番の苦戦は、やはり当たり判定です。当初はビームと一緒に<br />
Shpereの球も出して、その当たり判定で倒せる実装にしたのですが<br />
逆に球が全然当たらず、敵が倒せないようになってしまっていました。<br />
<br />
しかし、一人作業の疲れからか、集中力がかなり落ち始めて<br />
ずっと座っているのも。辛くなってきました。<br />
頻繁に離籍しては休みを入れ、休憩を繰り返しました。<br />
<br />
その間は、もう自分の焦りの気持ちとの闘い、<br />
これは、最悪、バグ入りの動画を見せればいいとの保険の<br />
ための動画をとっていたので、そちらを何回も見直すことで、<br />
気持ちを落ち着けたり、先にプレゼンの資料だけを書いておいたり<br />
その場で出来ることの作業を、少しづつ進めていきました。<br />
<br />
エナジードリンクの差し入れもいただき<br />
<blockquote class="instagram-media" data-instgrm-captioned="" data-instgrm-permalink="https://www.instagram.com/p/B8VIP1kgAlz/?utm_source=ig_embed&utm_campaign=loading" data-instgrm-version="12" style="background: #fff; border-radius: 3px; border: 0; box-shadow: 0 0 1px 0 rgba(0 , 0 , 0 , 0.5) , 0 1px 10px 0 rgba(0 , 0 , 0 , 0.15); margin: 1px; max-width: 540px; min-width: 326px; padding: 0; width: 99.375%;">
<div style="padding: 16px;">
<a href="https://www.instagram.com/p/B8VIP1kgAlz/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank"> </a><br />
<div style="align-items: center; display: flex; flex-direction: row;">
<div style="background-color: #f4f4f4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;">
</div>
<div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;">
<div style="background-color: #f4f4f4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;">
</div>
<div style="background-color: #f4f4f4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;">
</div>
</div>
</div>
<div style="padding: 19% 0;">
</div>
<a href="https://www.instagram.com/p/B8VIP1kgAlz/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank"> </a><br />
<div style="display: block; height: 50px; margin: 0 auto 12px; width: 50px;">
<a href="https://www.instagram.com/p/B8VIP1kgAlz/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank"><svg height="50px" version="1.1" viewbox="0 0 60 60" width="50px" xmlns:xlink="https://www.w3.org/1999/xlink" xmlns="https://www.w3.org/2000/svg"><g fill-rule="evenodd" fill="none" stroke-width="1" stroke="none"><g fill="#000000" transform="translate(-511.000000, -20.000000)"><g><path d="M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631"></path></g></g></g></svg></a></div>
<a href="https://www.instagram.com/p/B8VIP1kgAlz/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank">
</a>
<br />
<div style="padding-top: 8px;">
<div style="color: #3897f0; font-family: Arial,sans-serif; font-size: 14px; font-style: normal; font-weight: 550; line-height: 18px;">
<a href="https://www.instagram.com/p/B8VIP1kgAlz/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank">この投稿をInstagramで見る</a></div>
</div>
<a href="https://www.instagram.com/p/B8VIP1kgAlz/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank">
</a>
<br />
<div style="padding: 12.5% 0;">
</div>
<a href="https://www.instagram.com/p/B8VIP1kgAlz/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank">
</a>
<br />
<div style="align-items: center; display: flex; flex-direction: row; margin-bottom: 14px;">
<div>
<div style="background-color: #f4f4f4; border-radius: 50%; height: 12.5px; transform: translatex(0px) translatey(7px); width: 12.5px;">
</div>
<div style="background-color: #f4f4f4; height: 12.5px; margin-left: 2px; margin-right: 14px; transform: rotate(-45deg) translatex(3px) translatey(1px); width: 12.5px;">
</div>
<div style="background-color: #f4f4f4; border-radius: 50%; height: 12.5px; transform: translatex(9px) translatey(-18px); width: 12.5px;">
</div>
</div>
<div style="margin-left: 8px;">
<div style="background-color: #f4f4f4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;">
</div>
<div style="border-bottom: 2px solid transparent; border-left: 6px solid #f4f4f4; border-top: 2px solid transparent; height: 0; transform: translatex(16px) translatey(-4px) rotate(30deg); width: 0;">
</div>
</div>
<div style="margin-left: auto;">
<div style="border-right: 8px solid transparent; border-top: 8px solid #f4f4f4; transform: translatey(16px); width: 0px;">
</div>
<div style="background-color: #f4f4f4; height: 12px; transform: translatey(-4px); width: 16px;">
</div>
<div style="border-left: 8px solid transparent; border-top: 8px solid #f4f4f4; height: 0; transform: translatey(-4px) translatex(8px); width: 0;">
</div>
</div>
</div>
<a href="https://www.instagram.com/p/B8VIP1kgAlz/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank">
</a> <br />
<div style="margin: 8px 0 0 0; padding: 0 4px;">
<a href="https://www.instagram.com/p/B8VIP1kgAlz/?utm_source=ig_embed&utm_campaign=loading" style="color: black; font-family: "arial" , sans-serif; font-size: 14px; font-style: normal; font-weight: normal; line-height: 17px; text-decoration: none; word-wrap: break-word;" target="_blank">お賽銭の効果があり、エナドリタワーのお供えがありました #HoloHack</a></div>
<div style="color: #c9c8cd; font-family: Arial,sans-serif; font-size: 14px; line-height: 17px; margin-bottom: 0; margin-top: 8px; overflow: hidden; padding: 8px 0 7px; text-align: center; text-overflow: ellipsis; white-space: nowrap;">
<a href="https://www.instagram.com/zuq9nn/?utm_source=ig_embed&utm_campaign=loading" style="color: #c9c8cd; font-family: Arial,sans-serif; font-size: 14px; font-style: normal; font-weight: normal; line-height: 17px;" target="_blank"> ずきゅ~ん たん</a>(@zuq9nn)がシェアした投稿 - <time datetime="2020-02-09T02:56:01+00:00" style="font-family: Arial,sans-serif; font-size: 14px; line-height: 17px;">2020年 2月月8日午後6時56分PST</time></div>
</div>
</blockquote>
<script async="" src="//www.instagram.com/embed.js"></script>
ようやく不具合も落ち着いたところで、お昼休憩<br />
お昼はお弁当が用意されました。<br />
<blockquote class="instagram-media" data-instgrm-captioned="" data-instgrm-permalink="https://www.instagram.com/p/B8VKv_fgdg_/?utm_source=ig_embed&utm_campaign=loading" data-instgrm-version="12" style="background: #fff; border-radius: 3px; border: 0; box-shadow: 0 0 1px 0 rgba(0 , 0 , 0 , 0.5) , 0 1px 10px 0 rgba(0 , 0 , 0 , 0.15); margin: 1px; max-width: 540px; min-width: 326px; padding: 0; width: 99.375%;">
<div style="padding: 16px;">
<a href="https://www.instagram.com/p/B8VKv_fgdg_/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank"> </a><br />
<div style="align-items: center; display: flex; flex-direction: row;">
<div style="background-color: #f4f4f4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;">
</div>
<div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;">
<div style="background-color: #f4f4f4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;">
</div>
<div style="background-color: #f4f4f4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;">
</div>
</div>
</div>
<div style="padding: 19% 0;">
</div>
<a href="https://www.instagram.com/p/B8VKv_fgdg_/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank"> </a><br />
<div style="display: block; height: 50px; margin: 0 auto 12px; width: 50px;">
<a href="https://www.instagram.com/p/B8VKv_fgdg_/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank"><svg height="50px" version="1.1" viewbox="0 0 60 60" width="50px" xmlns:xlink="https://www.w3.org/1999/xlink" xmlns="https://www.w3.org/2000/svg"><g fill-rule="evenodd" fill="none" stroke-width="1" stroke="none"><g fill="#000000" transform="translate(-511.000000, -20.000000)"><g><path d="M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631"></path></g></g></g></svg></a></div>
<a href="https://www.instagram.com/p/B8VKv_fgdg_/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank">
</a>
<br />
<div style="padding-top: 8px;">
<div style="color: #3897f0; font-family: Arial,sans-serif; font-size: 14px; font-style: normal; font-weight: 550; line-height: 18px;">
<a href="https://www.instagram.com/p/B8VKv_fgdg_/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank">この投稿をInstagramで見る</a></div>
</div>
<a href="https://www.instagram.com/p/B8VKv_fgdg_/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank">
</a>
<br />
<div style="padding: 12.5% 0;">
</div>
<a href="https://www.instagram.com/p/B8VKv_fgdg_/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank">
</a>
<br />
<div style="align-items: center; display: flex; flex-direction: row; margin-bottom: 14px;">
<div>
<div style="background-color: #f4f4f4; border-radius: 50%; height: 12.5px; transform: translatex(0px) translatey(7px); width: 12.5px;">
</div>
<div style="background-color: #f4f4f4; height: 12.5px; margin-left: 2px; margin-right: 14px; transform: rotate(-45deg) translatex(3px) translatey(1px); width: 12.5px;">
</div>
<div style="background-color: #f4f4f4; border-radius: 50%; height: 12.5px; transform: translatex(9px) translatey(-18px); width: 12.5px;">
</div>
</div>
<div style="margin-left: 8px;">
<div style="background-color: #f4f4f4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;">
</div>
<div style="border-bottom: 2px solid transparent; border-left: 6px solid #f4f4f4; border-top: 2px solid transparent; height: 0; transform: translatex(16px) translatey(-4px) rotate(30deg); width: 0;">
</div>
</div>
<div style="margin-left: auto;">
<div style="border-right: 8px solid transparent; border-top: 8px solid #f4f4f4; transform: translatey(16px); width: 0px;">
</div>
<div style="background-color: #f4f4f4; height: 12px; transform: translatey(-4px); width: 16px;">
</div>
<div style="border-left: 8px solid transparent; border-top: 8px solid #f4f4f4; height: 0; transform: translatey(-4px) translatex(8px); width: 0;">
</div>
</div>
</div>
<a href="https://www.instagram.com/p/B8VKv_fgdg_/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank">
</a> <br />
<div style="margin: 8px 0 0 0; padding: 0 4px;">
<a href="https://www.instagram.com/p/B8VKv_fgdg_/?utm_source=ig_embed&utm_campaign=loading" style="color: black; font-family: "arial" , sans-serif; font-size: 14px; font-style: normal; font-weight: normal; line-height: 17px; text-decoration: none; word-wrap: break-word;" target="_blank">お弁当タイム!いよいよHoloLen 2は使用制限が、かかり終盤戦に。#HoloHack</a></div>
<div style="color: #c9c8cd; font-family: Arial,sans-serif; font-size: 14px; line-height: 17px; margin-bottom: 0; margin-top: 8px; overflow: hidden; padding: 8px 0 7px; text-align: center; text-overflow: ellipsis; white-space: nowrap;">
<a href="https://www.instagram.com/zuq9nn/?utm_source=ig_embed&utm_campaign=loading" style="color: #c9c8cd; font-family: Arial,sans-serif; font-size: 14px; font-style: normal; font-weight: normal; line-height: 17px;" target="_blank"> ずきゅ~ん たん</a>(@zuq9nn)がシェアした投稿 - <time datetime="2020-02-09T03:17:53+00:00" style="font-family: Arial,sans-serif; font-size: 14px; line-height: 17px;">2020年 2月月8日午後7時17分PST</time></div>
</div>
</blockquote>
<script async="" src="//www.instagram.com/embed.js"></script>
また、ここで、HoloLens 2の実機の利用制限が出されました。<br />
HoloLens 2は、一日目の利用により、バッテリーがかなり少なくなっていました。<br />
あらかじめ予約することで、30分間利用できるルールになったので<br />
予約をおこない、そこまでは、ひたすらにUnityでの確認を繰り返しました。<br />
<br />
ここまで、不具合の修正と、動く最低限を目指しての<br />
消極的対応だったので、せめてFirst Person Shotter系でよくみる、<br />
十字の照準(CROSSFIREと言うみたいですw)等をつけてみて<br />
実機での確認を待つばかり。。<br />
<br />
ようやく実機での確認可能になってインストールをしてみたものの<br />
ここで、先ほどいれた十字の照準(CROSSFIRE)が実機では<br />
シェーダーがこわれてピンク色になり、またもや戻す羽目に。.. orz..<br />
<br />
不具合の修正をおこない最終動画の撮影と、実機確認を行いました。<br />
やはり、アイトラッキングの制御がカクカクだったのと<br />
当たり判定が簡単になりすぎて、うまい人だと、<br />
今度は、逆にゲームが終わらない感じに仕上がってしまいましたが<br />
残念ながら、これ以上、手を加えるより、このままで評価をしてもらおうと<br />
またもや、消極的な対応に戻しました。<br />
<br />
1日目に行っていた、じゃんけんと、くじ引きの結果、<br />
トップで発表することが決まっていたので、プレゼン資料のしあげと<br />
配布用のパッケージ作成に時間を費やすことにしました。<br />
<br />
15時に開発終了、その後、スポンサーのセッションが行われ<br />
いよいよ最終発表。。最終発表の資料はこんな感じでした。<br />
もう、なるべくポジティブなメッセージ性を発信しようと内容を何度か書き換えました。<br />
<br />
<iframe allowfullscreen="true" frameborder="0" height="569" mozallowfullscreen="true" src="https://docs.google.com/presentation/d/e/2PACX-1vQn2Aa3xOjMxfPl7tJ0G7vpefo0KOJsNviYpDQNtjtXdZXgEtfPadNTsY0T_HCBHauOjRwpyaGQYn70/embed?start=false&loop=false&delayms=3000" webkitallowfullscreen="true" width="960"></iframe>
<br />
途中でPCの操作を間違えてしまって焦ったり、<br />
もはや自分では何を言っているのか頭が真っ白な感じでした。<br />
発表終了して、次の人が来たので、慌ててしまい<br />
審査員の人の総評の途中で舞台から捌けようとしたりと<br />
もはや、何やってんだよって感じのテンパり具合。<br />
<br />
発表前に、公平を期すために、この2日間での進捗で。。<br />
とか言われて。アレやべ。事前に、プロトタイプ作ってきちゃったよ<br />
ってのがやたらと気になり、 他の人の発表に心ここに在らずみたいな状態に<br />
<br />
一応、全員の審査が終わってから、スタッフの方には<br />
ごめんなさい、事前にある程度つくりました。てへぺろ☆(・ω<)って<br />
正直に打ち明けました。あんまり、これは審査員は気にしてなかったみたいです。<br />
<br />
発表のあと、試遊時間に、一人作業なので、自分のアプリの<br />
アテンドを行うことに、となりのチームと合同でHoloLens 2を利用したこともあり<br />
イマイチ、アプローチをうまくできず、試遊時間を活かしきれませんでした。<br />
<br />
試遊での課題は、やはりキャリブレーションでした。<br />
また、自分のアプリをピン止めして直ぐに使えるようにすべきでした<br />
どこにあるかをまず見つけてもらうのに苦労しました。<br />
<br />
審査員によっては、簡単すぎたり、逆にキャリブレーションがうまくいかず<br />
遊べなかったりとアイトラッキング故の問題点が多かった印象です。<br />
最後に、Unityの<a href="https://twitter.com/takashijona">@takashijona(常名)</a>さんには、かなり楽しんでもらえたのでなんだか、ホッとしました。<br />
<br />
他の開発者の作品で、個人的に気になっていた、音の可視化のアプリのみ体感させてもらいました。<br />
実は、自分のネタを捨てて他人のネタをやるなら、これだなぁと思っていたアプリだったので。。<br />
<br />
試遊を終え、審査結果発表。優勝のMVPは、AEDの訓練アプリ<br />
ですよね。。僕が審査員なら絶対に選ぶよ。。って結果に。<br />
<br />
その他各賞の発表が。。そしてなんと、主催コミュニティの一つHoloMagiciansさんから<br />
賞をいただける、結果に、事前のプロトタイプ作成が気にかかりましたが<br />
場の雰囲気を壊したくなかったので、素直にいただくことに。。<br />
<blockquote class="instagram-media" data-instgrm-captioned="" data-instgrm-permalink="https://www.instagram.com/p/B8V0vWAAujo/?utm_source=ig_embed&utm_campaign=loading" data-instgrm-version="12" style="background: #fff; border-radius: 3px; border: 0; box-shadow: 0 0 1px 0 rgba(0 , 0 , 0 , 0.5) , 0 1px 10px 0 rgba(0 , 0 , 0 , 0.15); margin: 1px; max-width: 540px; min-width: 326px; padding: 0; width: 99.375%;">
<div style="padding: 16px;">
<a href="https://www.instagram.com/p/B8V0vWAAujo/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank"> </a><br />
<div style="align-items: center; display: flex; flex-direction: row;">
<div style="background-color: #f4f4f4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;">
</div>
<div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;">
<div style="background-color: #f4f4f4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;">
</div>
<div style="background-color: #f4f4f4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;">
</div>
</div>
</div>
<div style="padding: 19% 0;">
</div>
<a href="https://www.instagram.com/p/B8V0vWAAujo/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank"> </a><br />
<div style="display: block; height: 50px; margin: 0 auto 12px; width: 50px;">
<a href="https://www.instagram.com/p/B8V0vWAAujo/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank"><svg height="50px" version="1.1" viewbox="0 0 60 60" width="50px" xmlns:xlink="https://www.w3.org/1999/xlink" xmlns="https://www.w3.org/2000/svg"><g fill-rule="evenodd" fill="none" stroke-width="1" stroke="none"><g fill="#000000" transform="translate(-511.000000, -20.000000)"><g><path d="M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631"></path></g></g></g></svg></a></div>
<a href="https://www.instagram.com/p/B8V0vWAAujo/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank">
</a>
<br />
<div style="padding-top: 8px;">
<div style="color: #3897f0; font-family: Arial,sans-serif; font-size: 14px; font-style: normal; font-weight: 550; line-height: 18px;">
<a href="https://www.instagram.com/p/B8V0vWAAujo/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank">この投稿をInstagramで見る</a></div>
</div>
<a href="https://www.instagram.com/p/B8V0vWAAujo/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank">
</a>
<br />
<div style="padding: 12.5% 0;">
</div>
<a href="https://www.instagram.com/p/B8V0vWAAujo/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank">
</a>
<br />
<div style="align-items: center; display: flex; flex-direction: row; margin-bottom: 14px;">
<div>
<div style="background-color: #f4f4f4; border-radius: 50%; height: 12.5px; transform: translatex(0px) translatey(7px); width: 12.5px;">
</div>
<div style="background-color: #f4f4f4; height: 12.5px; margin-left: 2px; margin-right: 14px; transform: rotate(-45deg) translatex(3px) translatey(1px); width: 12.5px;">
</div>
<div style="background-color: #f4f4f4; border-radius: 50%; height: 12.5px; transform: translatex(9px) translatey(-18px); width: 12.5px;">
</div>
</div>
<div style="margin-left: 8px;">
<div style="background-color: #f4f4f4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;">
</div>
<div style="border-bottom: 2px solid transparent; border-left: 6px solid #f4f4f4; border-top: 2px solid transparent; height: 0; transform: translatex(16px) translatey(-4px) rotate(30deg); width: 0;">
</div>
</div>
<div style="margin-left: auto;">
<div style="border-right: 8px solid transparent; border-top: 8px solid #f4f4f4; transform: translatey(16px); width: 0px;">
</div>
<div style="background-color: #f4f4f4; height: 12px; transform: translatey(-4px); width: 16px;">
</div>
<div style="border-left: 8px solid transparent; border-top: 8px solid #f4f4f4; height: 0; transform: translatey(-4px) translatex(8px); width: 0;">
</div>
</div>
</div>
<a href="https://www.instagram.com/p/B8V0vWAAujo/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank">
</a> <br />
<div style="margin: 8px 0 0 0; padding: 0 4px;">
<a href="https://www.instagram.com/p/B8V0vWAAujo/?utm_source=ig_embed&utm_campaign=loading" style="color: black; font-family: "arial" , sans-serif; font-size: 14px; font-style: normal; font-weight: normal; line-height: 17px; text-decoration: none; word-wrap: break-word;" target="_blank">なんと、Osaka HoloLens "2" ハッカソン2020で、HoloMagicians賞。とったどー #HoloHack</a></div>
<div style="color: #c9c8cd; font-family: Arial,sans-serif; font-size: 14px; line-height: 17px; margin-bottom: 0; margin-top: 8px; overflow: hidden; padding: 8px 0 7px; text-align: center; text-overflow: ellipsis; white-space: nowrap;">
<a href="https://www.instagram.com/zuq9nn/?utm_source=ig_embed&utm_campaign=loading" style="color: #c9c8cd; font-family: Arial,sans-serif; font-size: 14px; font-style: normal; font-weight: normal; line-height: 17px;" target="_blank"> ずきゅ~ん たん</a>(@zuq9nn)がシェアした投稿 - <time datetime="2020-02-09T09:24:47+00:00" style="font-family: Arial,sans-serif; font-size: 14px; line-height: 17px;">2020年 2月月9日午前1時24分PST</time></div>
</div>
</blockquote>
<script async="" src="//www.instagram.com/embed.js"></script>
なんでも、EyeTrackingは絶対に役に立たないと思っていたが<br />
そこを何とかしようとアプローチしたこと。<br />
アプリとして完成して一応、一通り遊べるようになっていたことが評価されたようです。<br />
<br />
賞をとれるとは思ってもみなかったので、かなり意外だったし<br />
申し訳ない、こんなネタで。。とか、<br />
嬉しさやら恐縮の気持ち、その他諸々が入り混じりました。<br />
<br />
最後に、参加者スタッフで記念撮影、会場の片づけを行いました。<br />
片づけの時間、他のチームの開発者さんから、刺激になりましたと言われたのが、なんとも印象的でした。<br />
<br />
開発者だとやはり、EyeTrackingは利用してみたい欲求は高いみたいでした。<br />
しかし、それを何に活かすか?って提案は中々できない、<br />
ましてや真面目なビジネスシーンでは。。<br />
<br />
だからこそ、こんなネタが許されるハッカソンのイベントで<br />
目からビームというネタ一本で積極的に使えるように割り切ったのは<br />
あながち悪い結果ばかりでは無かったようです。。<br />
<br />
東京で次の日、普通に仕事があったので、新幹線の時間が<br />
間に合わないとつらいなと思い、早々に会場を出てしまいました。。<br />
<br />
これほど、大規模で、かなり大きな企業がスポンサーになっているイベントを<br />
開催してくれたスタッフさんには感謝しかありません。中には、夜通しのイベントにも付き合ってた人もいたような感じなので本当にご苦労様でした。<br />
<br />
なんどか、ハッカソンのイベントには参加したことがありますが<br />
賞がもらえたこともあり、過去最高のハッカソンだったと思います。<br />
<br />
ただ、100%全力で楽しめたか?と言われると、<br />
色々な反省点や課題も多く残りました。。<br />
<br />
また、これを次に活かせるのかとか思うとちょっと尻込みもあります。<br />
まぁ、そこは、そんなにも思い詰めず、緩くしていこうかなと。。<br />
<br />
とりあえず、主に発作的な欲求で参加したハッカソン。<br />
今年はこれくらいのフットワークの軽さが維持できて<br />
他のイベントにも積極的になれればと考えています。<br />
<br />
<b><span style="font-size: large;">おまけ。。</span></b><br />
ハッカソンの後、気になってアイトラッキング関連を調べなおしたら。。<br />
<a href="https://docs.microsoft.com/ja-jp/windows/mixed-reality/eye-tracking">こちらのMicrosoftの公式ドキュメント</a>に<br />
<i></i><br />
<span style="font-size: large;"><b>"お客様の目からレーザービームを撮影してください。 RoboRaid For HoloLens 2で試してみてください。"
</b></span><br />
<i></i><b></b><b></b><span style="font-size: large;"></span><i></i><i></i><b></b><br />
との記述が。。。<br />
どうやらすでにMicrosoftの公式アプリが、同じネタを実装していたようです。。<br />
プレゼンでは、ひょっとして世界初では。。とかいっちゃったけど。。<br />
<br />
<div style="text-align: center;">
<b><span style="font-size: x-large;">全然、世界初でもなんでもなかったw</span></b></div>
ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-17829516703884472282020-02-10T21:30:00.000+09:002020-02-11T08:16:55.161+09:00Osaka HoloLens "2" ハッカソン2020に参加 【一日目2020/02/08(土)】お疲れ様です。ZuQ9->Nnです。<br />
<br />
2020/02/08(土)から2020/02/09(日)<br />
<a href="https://osaka-driven-dev.connpass.com/event/160361/">Osaka HoloLens "2" ハッカソン2020 <span style="color: #007600;"> </span></a>が開催されたので参加してきました。<br />
<blockquote class="embedly-card">
<h4>
<a href="https://osaka-driven-dev.connpass.com/event/160361/">Osaka HoloLens "2" ハッカソン2020 (2020/02/08 10:00〜)</a></h4>
スタッフ確保等兼ね合いで、少しだけ一般枠を増枠しました。 抽選が終了していますが、繰り上がりの可能性、(スタッフ増員等による)枠の増加/変動の可能性がありますので、 参加を希望する方は引き続き参加表明をお願いいたします。 また、逆に今後繰り上がり等で参加になった際に、参加が難しくなったという方はキャンセルの手続きをお願いいたします。 一般枠の定員が募集開始4時間ほどで埋まりましたが、抽選制&スタッフ人数次第では増枠(または他の枠との人数調整)の可能性有りなので、気にせずご応募ください。 当日はHoloLensやHoloLens 2等の開発が可能なイベントです。 メンターの対応などを考慮し、イベントでは以下の環境で進める予定です。 事前環境構築済みで参加していただくとよりスムーズに開発に入っていただけます。 Mac端末で参加予定の方への注意事項BootCampなどでWindows 10 OS環境をセットアップ済みの開発機を持参してください。 Bootcampで構築したWindows OSはUnity,Visual Studioをインストールするため最低でも100GB近いサイズは必要になります。ハッカソン当日開発に使う場合は常用できるディスクサイズを確保したものを用意してください 2020/01/20 HoloLensの開発環境に必要なセットアップ作業と確認方法を記載した資料を公開 2/1の環境構築ハンズオンはこの手順に従ってセットアップを実施します。 Mixed Reality Toolkit V2開発環境構築(2020/01版) Windows 10 Fall Creators Update(以降) OSのエディションについてはHome以上であれば問題ありません。 Unity 2019.1.10f1 以下のコンポーネントをセットアップ UWP Build Support(IL2CPP) UWP Build Support(.NET) Microsoft Visual Studio 2019(Community Edition可) Visual Studioインストール時に「ユニバーサルWindowsプラットフォーム開発」「Unityによるゲーム開発」選択 以下のオプション系もインストール Windows 10 SDK 10.0.17763 ⇒</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
きっかけは、2020/01/17(金)に<a href="http://zuq9nn.blogspot.com/2020/01/hololens-2-hackday2020-in-tokyo.html">HoloLens 2 HackDay2020 in Tokyo に参加</a>したことです。<br />
ここでアプリを作成し、やはり、楽しかったし、また、課題も見えてきました。<br />
<br />
次にチャンスがあったら、もう少し上手く作業できるのでは?<br />
あるいは、もっと面白いアプリを作れるんじゃないのか?<br />
また、一人だと限界が早くなるけど、ほかの人と連携すると限界を少し伸ばせるのでは?<br />
と、さまざまな、思いがこみ上げ、勢いで参加を決めました。<br />
大阪には実家があるので、泊りのイベントでも、まぁ何とかなるだろう。そんな気持ちもありました。<br />
<br />
いつまでも、他人がやったピザのネタに乗っかるのが、なんとなく嫌だったので<br />
今回は、両手でピザのアプリは完全に封印しました。<br />
<br />
HoloLens 2 HackDay2020 in Tokyo では、EyeTrackingをきちんと試せなかったので<br />
絶対にEyeTrackingのネタで行こう。。そして、EyeTrackingを使うなら、目からビームのネタで行こう。<br />
そう思い、事前にEyeTrackingに関して調査を行っていました。<br />
<br />
<a href="http://zuq9nn.blogspot.com/2018/07/hololens-vol2.html">以前、北海道に行ったとき、当日の移動でやらかしてしまった</a>ので<br />
前日の2020/02/09(金)に、仕事終わりの直後に、新幹線で大阪に移動、実家で過ごすことにしました。<br />
<br />
ハッカソン一日目、当日、茶屋町にあるMBSの会場に入りました。<br />
あまりの会場の大きさと、まさしくテレビで見るような、いかにも<br />
発表する舞台のある会場で、思っていた以上に、ガチな印象を持ちました。<br />
参加人数は、参加者、スタッフを含めて50人くらいだったかと思います。<br />
<br />
最初、Slackに入れなかったりトラブルも多少あったものの、<br />
自己紹介を終えて、アイデアのある人の1分間ピッチが行われました。<br />
ここで、せっかくなので目からビームのネタを披露しました。<br />
<br />
まぁ、誰か一人くらいは、乗っかってくれるのでは?<br />
そんな淡い期待があったものの、結局、誰一人として共感は得られませんでした。 orz...<br />
ちょっと迷ったのですが、どうしても自分のアイデアを捨てれられなかった事<br />
また、ほかに一人でやる方もおられたので、ボッチソンの道を選択しました。<br />
<br />
Wi-Fiも提供され、いざというときの調査ができるようになり<br />
とりあえず、お昼ご飯をとることにしました。<br />
メンバーがいないため、結局お昼ご飯もボッチですることになってしまいましたw<br />
<br />
昼から、<a href="https://twitter.com/takabrz1">@Miyaura</a>
さんによる、開発講座を聞いていると<br />
EyeTrackingを使うには、目のキャリブレーションが必須という衝撃の事実が。。<br />
<br />
なるほど、どうりで以前の Hack Dayではうまく動かなかったのか。。<br />
という思いと、同時に、これは試遊の時のハードルが上がってしまうと感じました。<br />
しかし、今更、後に戻ることもできず、突き進むことに。。<br />
<br />
開発を
17時の中間発表まで、もくもくと開発、僕は事前にちょっと<br />
プロトタイプを作ってきてたので、とりあえず実機でのEyeTrackingが<br />
どのような体感になるかを確認、同時に、中間発表の動画を撮影しました。<br />
<br />
ここで、勘違いが発覚します。てっきり両目の情報を扱えると思い込んでいましたが<br />
実際に利用しているAPIでは両目から何かオブジェクトを操作する用ではありませんでした。<br />
<br />
軽くその場で調べてみたのですが、すぐには見つけられませんでした。<br />
なので、両目からビームを出すのは早々にあきらめることにしました。<br />
<br />
最初は、棒状のオブジェクトをアイトラッキングで操作する予定でしたが、<br />
そもそも勘違いをベースにコーディングしていたので<br />
制御がヘンテコで、アイトラッキングでは操作が、ほとんどできなくて<br />
あまりにも爽快感が得られず、なんか思っていたのと違う。。って結果に。<br />
<br />
中間発表のプレゼン資料の作成も必要となり、<br />
ここで、ボッチ開発の作業量の多さと、辛さを痛感させられることに<br />
中間発表のプレゼンを書くことで、問題点を洗い出し一度頭を整理することに集中しました。<br />
<br />
提供されたお菓子も堪能しながら、<br />
<blockquote class="instagram-media" data-instgrm-captioned="" data-instgrm-permalink="https://www.instagram.com/p/B8TNMMyAzYy/?utm_source=ig_embed&utm_campaign=loading" data-instgrm-version="12" style="background: #fff; border-radius: 3px; border: 0; box-shadow: 0 0 1px 0 rgba(0 , 0 , 0 , 0.5) , 0 1px 10px 0 rgba(0 , 0 , 0 , 0.15); margin: 1px; max-width: 540px; min-width: 326px; padding: 0; width: 99.375%;">
<div style="padding: 16px;">
<a href="https://www.instagram.com/p/B8TNMMyAzYy/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank"> </a><br />
<div style="align-items: center; display: flex; flex-direction: row;">
<div style="background-color: #f4f4f4; border-radius: 50%; flex-grow: 0; height: 40px; margin-right: 14px; width: 40px;">
</div>
<div style="display: flex; flex-direction: column; flex-grow: 1; justify-content: center;">
<div style="background-color: #f4f4f4; border-radius: 4px; flex-grow: 0; height: 14px; margin-bottom: 6px; width: 100px;">
</div>
<div style="background-color: #f4f4f4; border-radius: 4px; flex-grow: 0; height: 14px; width: 60px;">
</div>
</div>
</div>
<div style="padding: 19% 0;">
</div>
<a href="https://www.instagram.com/p/B8TNMMyAzYy/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank"> </a><br />
<div style="display: block; height: 50px; margin: 0 auto 12px; width: 50px;">
<a href="https://www.instagram.com/p/B8TNMMyAzYy/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank"><svg height="50px" version="1.1" viewbox="0 0 60 60" width="50px" xmlns:xlink="https://www.w3.org/1999/xlink" xmlns="https://www.w3.org/2000/svg"><g fill-rule="evenodd" fill="none" stroke-width="1" stroke="none"><g fill="#000000" transform="translate(-511.000000, -20.000000)"><g><path d="M556.869,30.41 C554.814,30.41 553.148,32.076 553.148,34.131 C553.148,36.186 554.814,37.852 556.869,37.852 C558.924,37.852 560.59,36.186 560.59,34.131 C560.59,32.076 558.924,30.41 556.869,30.41 M541,60.657 C535.114,60.657 530.342,55.887 530.342,50 C530.342,44.114 535.114,39.342 541,39.342 C546.887,39.342 551.658,44.114 551.658,50 C551.658,55.887 546.887,60.657 541,60.657 M541,33.886 C532.1,33.886 524.886,41.1 524.886,50 C524.886,58.899 532.1,66.113 541,66.113 C549.9,66.113 557.115,58.899 557.115,50 C557.115,41.1 549.9,33.886 541,33.886 M565.378,62.101 C565.244,65.022 564.756,66.606 564.346,67.663 C563.803,69.06 563.154,70.057 562.106,71.106 C561.058,72.155 560.06,72.803 558.662,73.347 C557.607,73.757 556.021,74.244 553.102,74.378 C549.944,74.521 548.997,74.552 541,74.552 C533.003,74.552 532.056,74.521 528.898,74.378 C525.979,74.244 524.393,73.757 523.338,73.347 C521.94,72.803 520.942,72.155 519.894,71.106 C518.846,70.057 518.197,69.06 517.654,67.663 C517.244,66.606 516.755,65.022 516.623,62.101 C516.479,58.943 516.448,57.996 516.448,50 C516.448,42.003 516.479,41.056 516.623,37.899 C516.755,34.978 517.244,33.391 517.654,32.338 C518.197,30.938 518.846,29.942 519.894,28.894 C520.942,27.846 521.94,27.196 523.338,26.654 C524.393,26.244 525.979,25.756 528.898,25.623 C532.057,25.479 533.004,25.448 541,25.448 C548.997,25.448 549.943,25.479 553.102,25.623 C556.021,25.756 557.607,26.244 558.662,26.654 C560.06,27.196 561.058,27.846 562.106,28.894 C563.154,29.942 563.803,30.938 564.346,32.338 C564.756,33.391 565.244,34.978 565.378,37.899 C565.522,41.056 565.552,42.003 565.552,50 C565.552,57.996 565.522,58.943 565.378,62.101 M570.82,37.631 C570.674,34.438 570.167,32.258 569.425,30.349 C568.659,28.377 567.633,26.702 565.965,25.035 C564.297,23.368 562.623,22.342 560.652,21.575 C558.743,20.834 556.562,20.326 553.369,20.18 C550.169,20.033 549.148,20 541,20 C532.853,20 531.831,20.033 528.631,20.18 C525.438,20.326 523.257,20.834 521.349,21.575 C519.376,22.342 517.703,23.368 516.035,25.035 C514.368,26.702 513.342,28.377 512.574,30.349 C511.834,32.258 511.326,34.438 511.181,37.631 C511.035,40.831 511,41.851 511,50 C511,58.147 511.035,59.17 511.181,62.369 C511.326,65.562 511.834,67.743 512.574,69.651 C513.342,71.625 514.368,73.296 516.035,74.965 C517.703,76.634 519.376,77.658 521.349,78.425 C523.257,79.167 525.438,79.673 528.631,79.82 C531.831,79.965 532.853,80.001 541,80.001 C549.148,80.001 550.169,79.965 553.369,79.82 C556.562,79.673 558.743,79.167 560.652,78.425 C562.623,77.658 564.297,76.634 565.965,74.965 C567.633,73.296 568.659,71.625 569.425,69.651 C570.167,67.743 570.674,65.562 570.82,62.369 C570.966,59.17 571,58.147 571,50 C571,41.851 570.966,40.831 570.82,37.631"></path></g></g></g></svg></a></div>
<a href="https://www.instagram.com/p/B8TNMMyAzYy/?utm_source=ig_embed&utm_campaign=loading" style="background: #FFFFFF; line-height: 0; padding: 0 0; text-align: center; text-decoration: none; width: 100%;" target="_blank">
<div style="padding-top: 8px;">
<div style="color: #3897f0; font-family: Arial,sans-serif; font-size: 14px; font-style: normal; font-weight: 550; line-height: 18px;">
この投稿をInstagramで見る</div>
</div>
<div style="padding: 12.5% 0;">
</div>
<div style="align-items: center; display: flex; flex-direction: row; margin-bottom: 14px;">
<div>
<div style="background-color: #f4f4f4; border-radius: 50%; height: 12.5px; transform: translatex(0px) translatey(7px); width: 12.5px;">
</div>
<div style="background-color: #f4f4f4; height: 12.5px; margin-left: 2px; margin-right: 14px; transform: rotate(-45deg) translatex(3px) translatey(1px); width: 12.5px;">
</div>
<div style="background-color: #f4f4f4; border-radius: 50%; height: 12.5px; transform: translatex(9px) translatey(-18px); width: 12.5px;">
</div>
</div>
<div style="margin-left: 8px;">
<div style="background-color: #f4f4f4; border-radius: 50%; flex-grow: 0; height: 20px; width: 20px;">
</div>
<div style="border-bottom: 2px solid transparent; border-left: 6px solid #f4f4f4; border-top: 2px solid transparent; height: 0; transform: translatex(16px) translatey(-4px) rotate(30deg); width: 0;">
</div>
</div>
<div style="margin-left: auto;">
<div style="border-right: 8px solid transparent; border-top: 8px solid #f4f4f4; transform: translatey(16px); width: 0px;">
</div>
<div style="background-color: #f4f4f4; height: 12px; transform: translatey(-4px); width: 16px;">
</div>
<div style="border-left: 8px solid transparent; border-top: 8px solid #f4f4f4; height: 0; transform: translatey(-4px) translatex(8px); width: 0;">
</div>
</div>
</div>
</a> <br />
<div style="margin: 8px 0 0 0; padding: 0 4px;">
<a href="https://www.instagram.com/p/B8TNMMyAzYy/?utm_source=ig_embed&utm_campaign=loading" style="color: black; font-family: "arial" , sans-serif; font-size: 14px; font-style: normal; font-weight: normal; line-height: 17px; text-decoration: none; word-wrap: break-word;" target="_blank">お菓子のスポンサー様、感謝で、ございます。いただきます! #HoloHack</a></div>
<div style="color: #c9c8cd; font-family: Arial,sans-serif; font-size: 14px; line-height: 17px; margin-bottom: 0; margin-top: 8px; overflow: hidden; padding: 8px 0 7px; text-align: center; text-overflow: ellipsis; white-space: nowrap;">
<a href="https://www.instagram.com/zuq9nn/?utm_source=ig_embed&utm_campaign=loading" style="color: #c9c8cd; font-family: Arial,sans-serif; font-size: 14px; font-style: normal; font-weight: normal; line-height: 17px;" target="_blank"> ずきゅ~ん たん</a>(@zuq9nn)がシェアした投稿 - <time datetime="2020-02-08T09:00:43+00:00" style="font-family: Arial,sans-serif; font-size: 14px; line-height: 17px;">2020年 2月月8日午前1時00分PST</time></div>
</div>
</blockquote>
<script async="" src="//www.instagram.com/embed.js"></script><br />
プレゼン資料作成に飽きたら、少し開発作業をしたりと<br />
とりあえず、何かしら手を止めない状況にしました。<br />
そして、出来上がった中間発表の資料はこちら。<br />
<br />
<iframe allowfullscreen="true" frameborder="0" height="569" mozallowfullscreen="true" src="https://docs.google.com/presentation/d/e/2PACX-1vTNgN6zYL4ydx3VCjnlUzEajj8JFqyioyvcfE1LlD6iJn-zMwH8V2lMRgdi57aT1PtJOzKnwlDOX0nl/embed?start=false&loop=false&delayms=3000" webkitallowfullscreen="true" width="960"></iframe>
そして中間発表。。この時、審査員から、何故、HoloLens、HoloLens 2を<br />
使う必要があるのか。。ってことも考えて。。との指示が。。<br />
その場の思い付きで、なんか、「手や言葉の不自由な人にも出来る」。。<br />
とか、言ってしまい、最後の締まで言葉が思いつかず、<br />
おもいっきりグダグダな感じになってしまいました。<br />
<br />
中間発表を元に、アプリの改修を始めたのですが、<br />
いったん、目からビームをTrail Rendererにして出してみても<br />
かえって邪魔になってしまったり、ロックオンのようなUIの作成が<br />
思った以上に難しく、容易には実装出来きず苦戦してしまいました。<br />
<br />
そして、決定的なのは、NavMeshでの制御を基本に考えていたので<br />
ステージそのものをstaticにしてしまったこと。。<br />
これによって変更すると、すぐにNavMeshが破綻して<br />
今まで動いていた内容がすべてダメになってしまう結果となってしまいました。<br />
<br />
流石に、ここで、何も動かないのはマズイと思いgitからもとに戻して<br />
アイトラッキングの制御周りのコードの見直しと<br />
きれいなビームのアセットに置き換えて、見栄えをよくする等<br />
なるべく壊さずに、最終審査で実機で動くことを最低限にして<br />
消極的な対応を行うことに切り替えました。<br />
<br />
当初は考えていなかったBGMや効果音、爆破のパーティクル等<br />
急遽、無料のアセットから選出して、なんとか実機で動く目途をつけて<br />
1日目を終了しました。<br />
<br />
<br />ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-51602138284158117272020-01-20T23:15:00.004+09:002020-01-20T23:15:56.192+09:00【第39回】東ゲ部もくもく会に参加お疲れ様です。ZuQ9->Nnです。<br />
<br />
<br />
<br />
2020/01/19(日)に<br />
<br />
【第39回】東ゲ部もくもく会が開催されたので参加しました。
<br />
<blockquote class="embedly-card">
<h4>
<a href="https://togebu.doorkeeper.jp/events/101588">【第39回】東ゲ部もくもく会</a></h4>
関東ゲーム制作部こと、東ゲ部 のもくもく会です。 毎月第2日曜日に開催(を予定)しています。 各々ゲーム関係のやりたいこと、作業を持ち込み、ひたすらもくもくする会となっております。 職種、ツール、ジャンルは問いません。 アナログ、デジタルも問いません。 書籍を持ち込んで学習するもよし、ゲーム作りの作業をするもよし、アセットの作成をするもよし。 ゲームに関する作業であれば、なんでもOKです。 ...</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
場所は、茅場町の<a href="https://www.coworking.tokyo.jp/">コワーキングスペース茅場町 Co-Edo</a><br />
特に僕は、ガチでゲーム開発をしているわけではないんですが、<br />
実は、かなり前から、タイミングが合えば参加していました。<br />
<br />
基本的には、ゲームそのものでなくても、ゲームに関連するツールや<br />
またデジタルゲームではなく、アナログのボードゲーム等の開発関連?なら<br />
特におとがめなしで参加できるようです。。<br />
僕は本当に、いつも、あんまりゲーム関連の作業してなくてすんません。って感じです。<br />
<br />
僕は、毎回、そん時に気になった作業をしてたので<br />
実際、まったくゲームに関係なくても、きちんとモクモク作業をしていたり<br />
よほど行動が怪しくない限りは参加可能なようです。。<br />
<br />
今回は、HoloLens 2 Hack Dayのイベントで作成したピザアプリを<br />
もう少し改良していました。ただ、HoloLens 2は現状、所有してなかったので<br />
折角つくっても実機で動かせないとテンションがさがるので<br />
Oculus Questのハンドトラッキングで動く、簡単なゲームのようなものを作成しました。<br />
<br />
実機まで動く形になったのがこちら。<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
HoloLens 2でのピザアプリが少し盛り上がったので。本日の <a href="https://twitter.com/hashtag/%E6%9D%B1%E3%82%B2%E9%83%A8?src=hash&ref_src=twsrc%5Etfw">#東ゲ部</a> もくもく会でピザを武器にCubeとShpereをぶった切れる?謎の何かが出来上がった。とりあえずQuestで動くところまで出来た。 <a href="https://twitter.com/hashtag/OculusQuest?src=hash&ref_src=twsrc%5Etfw">#OculusQuest</a> <a href="https://twitter.com/hashtag/handtracking?src=hash&ref_src=twsrc%5Etfw">#handtracking</a> <a href="https://t.co/P98S6mnsjP">pic.twitter.com/P98S6mnsjP</a></div>
— ずきゅ~んたん (@ZuQ9Nn) <a href="https://twitter.com/ZuQ9Nn/status/1218888436209180672?ref_src=twsrc%5Etfw">2020年1月19日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
内容は、<a href="https://store.steampowered.com/app/486780/Fruit_Ninja_VR/?l=japanese">Fruit Ninja VR</a> のように<br />
飛んでくるオブジェクトを切る感じです。<br />
<br />
結局、ゲームのクリアとゲームオーバーを決めきれず<br />
悩んでいるうちに制限時間終了。。<br />
<br />
実際に実機で動かして自分で遊んでみたのですが、<br />
まず、掴んだピザがすぐに外れてしまい、<br />
とても操作できたもんじゃないですね。。<br />
<br />
ここらへん実機でないと確かめられないので大変だなと。<br />
<br />
本当に、個人でゲーム系のアプリを普段から作成され<br />
展示会なんかで発表される方々には尊敬しかできません。<br />
<br />
最後に、各自の進捗発表があるのですが、そこで主催の<a href="https://twitter.com/Usui_KKYL">@Usui</a>さんに<br />
ピザアプリちょっとやってみたいかも。。<br />
と言われたのがちょっと嬉しかったので、<br />
なんとか遊べる形までにはしたいです。。<br />
来週別のモクモク会があるので、そこで続きをやりたい。<br />
<br />
<br />
<br />ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-39931220225501139372020-01-18T10:04:00.000+09:002020-01-20T05:51:47.725+09:00HoloLens 2 HackDay2020 in Tokyo に参加お疲れ様です。ZuQ9->Nnです。<br />
<br />
2020/01/17(金)<a href="https://hololens.connpass.com/event/157969/">HoloLens 2 HackDay2020 in Tokyo <span style="color: #007600;"> </span></a>に参加してきました。<br />
<br />
<blockquote class="embedly-card">
<h4>
<a href="https://hololens.connpass.com/event/157969/">HoloLens 2 HackDay2020 in Tokyo (2020/01/17 13:00〜)</a></h4>
HoloLens 2アプリを開発したいけど実機が無い・・・ そんなお悩みを抱える方にむけた HoloLens 2実機を使える開発者向けハックイベント です HoloLens 2が手元に届くのを待てない技術者の方はぜひこの機会に実機を触ってガンガン進捗上げちゃいましょう!! HoloLens 2の開発に欠かせないMRTK v2については下記をご覧ください! MRTK v2 の概要 事前にこちらのチュートリアルも確認しておくと吉です! チュートリアルとサンプルアプリ HoloLens 2 のチュートリアル ・HoloLens 2は参加者全員分の台数を準備できません。参加者同士譲り合ってご使用ください。 ・開発用PCの貸し出しはありません。 ・事前に開発を進めておき、当日ビルド&デプロイと不備修正などを行うことをお勧めいたします。 ・開発者向けのイベントです。事前アンケートに過去の開発物がわかるページへのリンクをご記入頂ける方を優先致します。 ・イベント中に取材が入る可能性があります。またイベントスタッフによる写真やビデオ撮影等を予定しております。撮影されました内容は後日主催者や会場提供者によるイベントの開催レポート等に使わせていただくことがありますので予めご了承ください。 ・当日の成果を是非とも当日夜の「HoloLensミートアップ Tokyo Vol.19」で発表してください! イベント名:HoloLens 2 HackDay2019 in Tokyo 日程:1月17日(金) 時間:12:30 受付開始 13:00~18:00 会場:日本マイクロソフト株式会社(品川) 31F セミナールームBCD 費用:無料 協力: 日本マイクロソフト Youtubeチャンネル: TMCN 私たちのコミュニティは、性別、性的自認、外形的な性別、年齢、性的指向、障害、身体的特徴、身体のサイズ、 人種、民族、宗教(あるいは無宗教)、技術の選択、を理由としたハラスメントの無い状態を維持すべく行動します。 私たちは、コミュニティメンバーに対する、いかなる種類のハラスメントも容認しません。 性的な表現や画像は、トーク、ワークショップ、パーティ、Twitterその他のオンラインメディアを含め、いかなるコミュニティイベントでも、不適切なものとします。 これらの規則を破った参加者は、オーガナイザーの決定のもと、制裁を受けるか、当該イベントおよび将来のあらゆるイベントあるいはコミュニティから、 払い戻し(もしある場合でも)無しで参加を拒絶されることがあります。 詳細は下記をご確認ください。 HoloLensミートアップ行動規範 https://holomagicianspolicy2019.azurewebsites.net/ 私たちのコミュニティは、ScalaMatsuri 2016にて上映された本動画に賛同いたします。 https://youtu.be/lIfOQNTWdxI</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
このイベントは、HoloLens 2の実機を操作するだけでなく、<br />
自分が開発したアプリを実機にインストールして試せる。<br />
またとない機会だと思い。平日の昼からのイベントでしたが<br />
参加登録を行いました。とてもラッキーなことに、抽選にあたりチャンスをものにできました。<br />
<br />
折角ですし、次のチャンスがいつくるのかわからない。<br />
更に、落選した人もいるので、せめて、準備を十分にして参加しようと思い。<br />
Visual Studio 2019の出力まで終えて参加に臨みました。<br />
<br />
しかしながら、前半、<strike>USBのドライバを入れ忘れていて</strike>、<br />
正しくは、Visual StudioのUSDデバイス接続の設定でした。<span style="background-color: white; color: #3c4043; display: inline; float: none; font-family: "arial" , sans-serif; font-size: 14px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; line-height: 1.57; overflow-wrap: break-word; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"> m(-_-)m スマヌ</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCpl1YtBx2vo3qhH2RZTkae5nvCNrN-kZV7V5gfyUyi1c8lpj234ZMZEAlH-StkgggQqtlSBmlASOSENs_S7BumUVMlfcz_AttMS5Fgr3yHhzKibv5RzUMeMFY1y6sfPWjiQ9Xd7wFQjMs/s1600/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2020-01-19+110659.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="587" data-original-width="610" height="307" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCpl1YtBx2vo3qhH2RZTkae5nvCNrN-kZV7V5gfyUyi1c8lpj234ZMZEAlH-StkgggQqtlSBmlASOSENs_S7BumUVMlfcz_AttMS5Fgr3yHhzKibv5RzUMeMFY1y6sfPWjiQ9Xd7wFQjMs/s320/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2020-01-19+110659.png" width="320" /></a></div>
<br />
認識してくれなかったです。幸いスタッフの<a href="https://twitter.com/torikasyu">@torikasyu(とりかしゅ)</a>さんに助けられ<br />
こちらは、即解決となりました。<br />
<br />
しかし、その後もUnityのバージョンなのか?はたまたVisual Studioが原因なのか<br />
デプロイまで出来るがアプリが起動直後に落ちる等、うまくいきませんでした。<br />
実機が5人に一台と少なく、しかもビルド、デプロイに時間がかかるため<br />
あまり一人で占有しきれないので、待ちの時間が多くできてしまいました。<br />
<br />
詳しい原因はよくわからないんですが。<br />
Visual Studioで実機にインストールするときARMではなく、<br />
ARM64だと
アプリが落ちることがなく利用できるようになりました。<br />
<br />
そして、ようやくうまく動いたのがこちら。<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
ようやくデプロイできました。両手でピザを食べることで肩が開いて人間工学的に良いことを体感できるアプリ。。 <a href="https://twitter.com/hashtag/HoloLens?src=hash&ref_src=twsrc%5Etfw">#HoloLens</a> <a href="https://twitter.com/hashtag/TMCN?src=hash&ref_src=twsrc%5Etfw">#TMCN</a> <a href="https://t.co/Kw7ibpW364">pic.twitter.com/Kw7ibpW364</a></div>
— ずきゅ~んたん (@ZuQ9Nn) <a href="https://twitter.com/ZuQ9Nn/status/1218051419892174849?ref_src=twsrc%5Etfw">2020年1月17日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
たまに、界隈の懇親会で利用されているネタ。<br />
実は、すでに、Oculus Questがハンドトラッキング が対応され<br />
ホロラボの<a href="https://twitter.com/tarukosu?lang=ja">@tarukosu(たるこす)</a>さんが、MRTKv2で利用できるようにしてくれたので<br />
その時にノリで作ってました。<br />
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
他人のネタに乗っかって作ってしまった。後悔はしていない。 <a href="https://twitter.com/hashtag/OculusQuest?src=hash&ref_src=twsrc%5Etfw">#OculusQuest</a> <a href="https://twitter.com/hashtag/handtracking?src=hash&ref_src=twsrc%5Etfw">#handtracking</a> 実装は <a href="https://twitter.com/hashtag/MRTKv2?src=hash&ref_src=twsrc%5Etfw">#MRTKv2</a> <a href="https://t.co/D1Xzvv5al8">https://t.co/D1Xzvv5al8</a> <a href="https://t.co/FnLUzoYGaM">pic.twitter.com/FnLUzoYGaM</a></div>
— ずきゅ~んたん (@ZuQ9Nn) <a href="https://twitter.com/ZuQ9Nn/status/1210178620812980227?ref_src=twsrc%5Etfw">2019年12月26日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
その後、少し心の余裕ができ、まだ時間があるので、
前からやってみたかった、指から光線の出るアプリにとりかかりました。
かなり実装は雑で、なんちゃって感パナイのですが。
あまりなりふり構まっておられなかったので、とりあえずデプロイし、動かしたのがこちら。
<br />
<blockquote class="twitter-tweet" data-lang="ja">
<div dir="ltr" lang="ja">
もう一個アプリ完成しました。幽遊白書の霊丸ぽくゆびから、ビーム出せるやつ。ハンドメッシュないほうが良かったかも。。 <a href="https://twitter.com/hashtag/HoloLens?src=hash&ref_src=twsrc%5Etfw">#HoloLens</a> <a href="https://twitter.com/hashtag/TMCN?src=hash&ref_src=twsrc%5Etfw">#TMCN</a> <a href="https://t.co/6DOvvJNoiN">pic.twitter.com/6DOvvJNoiN</a></div>
— ずきゅ~んたん (@ZuQ9Nn) <a href="https://twitter.com/ZuQ9Nn/status/1218063893567655936?ref_src=twsrc%5Etfw">2020年1月17日</a></blockquote>
<script async="" charset="utf-8" src="https://platform.twitter.com/widgets.js"></script>
その後、ピザアプリをもうちょっと遊べるようにとアセット等を入れて<br />
改良して、ビルド、デプロイを行ったのですが、<br />
ここでも、やはり、実機で実行時に落ちるようになってしまったり。<br />
<br />
兎に角、もったいない時間も多かったと自分なりに反省です。<br />
イベント中に、いろいろ聞きまくってたのに嫌な顔をせず、<br />
むしろ、とても分かりやすく返答をいただいた<a href="https://twitter.com/arcsin16">@arcsin16(だん)</a>さんにも<br />
とても感謝しています。<br />
<br />
そして何よりこのイベントを開催し、運営してくれた<br />
コミュニティやスタッフさんにもお礼を申し上げます。<br />
本当にありがとうございました。そしてお疲れ様でした。<br />
<br />
ゆくゆくはこのチャンスをもらえたお返しに
少しでも良いアプリを作ること<br />
アプリのクォリティーを高めることが重要かなと感じています。<br />
<br />
<br />ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-55909272272688417712019-12-21T18:53:00.000+09:002019-12-21T19:07:03.966+09:00[HoloLens Advent Calendar 2019] 21日目 MRTKv2のClippingをやってみたお疲れ様です。ZuQ9->Nnです。<br />
この記事は、HoloLens Advent Calendar 2019、21日目<br />
2019/12/21 の内容です。<br />
<br />
当初、azure remote renderingを試そうと思ったのですが、日本からではまだ利用できないようでした。<br />
(認識あってます??、間違ってたら指摘お願いいたします。日本以外でも未だなのかも。。)<br />
折角、枠をとったので、何か投稿しようと思い。色々見ていました。<br />
やはり、Clippingの表現がとても映えて面白いと思ったので試してみました。<br />
Clippingを利用するとオブジェクトをくり抜いて、中身を見るといったMRならではの表現が簡単に可能になります。<br />
既に、何人か記事も出していますので、そちらも参考にお願いします。<br />
<br />
<blockquote class="embedly-card">
<h4>
<a href="https://www.tattichan.work/archive/2019/11/05">2019-11-05から1日間の記事一覧 - デコシノニッキ</a></h4>
ホロレンジャーの戦いの記録</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
<br />
<blockquote class="embedly-card">
<h4>
<a href="https://redhologerbera.hatenablog.com/entry/2019/11/11/095441">MixedRealityToolKit v2 Examplesを触ってみる ClippingExamples - 夜風のMixedReality</a></h4>
MixedRealityToolKit(以下MRTK)にはExamplesというデモサンプル集が含まれています。 Examplesを理解すればMRTKの機能の使い方を学習することや ノンコーディングでの アプリ開発 が可能になります。 今回は UX/StandardShader/ClippingExamplesを見ていきます。 HoloLens ClippingExample ...</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
今回の環境は、Unity 2019.2.12f1 <br />
Microsoft Mixed Reality Toolkit v2.1.0(<a href="https://github.com/microsoft/MixedRealityToolkit-Unity/releases/tag/v2.1.0">Microsoft.MixedReality.Toolkit.Unity.Foundation.2.1.0.unitypackage</a>) を利用しました。<br />
<br />
プロジェクトの作成、
Microsoft.MixedReality.Toolkit.Unity.Foundation.2.1.0.unitypackageのインポート<br />
UnityのMixed Relaity ToolkitメニューからAdd to Scene and Configureを選択する等はいつも通り<br />
わからない方は、<a href="http://zuq9nn.blogspot.com/2019/12/hololens-advent-calendar-2019-8-mixed.html">以前の記事</a>を参考にしてください。<br />
MixedRealityToolkit > StandardShaderに<br />
ClippingBox.cs、ClippingPlane.cs、ClippingSphere.csが存在します。<br />
そちらがClippingの処理を行うスクリプトで、形状の違いはありますが、使い方は一緒です。<br />
今回はCubeにClippingPlaneを行う手順を示します。<br />
まずは、HierarchyのCreate > 3D Object > CubeでCubeを作成<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEio78MfeRnAGQuABit9IyrP3ZlYvpwiGq1-sW1WymuU2RxLp4V5fWzZYH8ffPGo39r_fd_qiGfhfF_J3TBp_M4MWnSesktXW4bv-sk3bXwiudTFq-Tw7_ANRClsz86VXNDR8lfxZAuvJI__/s1600/CreateCube.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="430" data-original-width="532" height="516" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEio78MfeRnAGQuABit9IyrP3ZlYvpwiGq1-sW1WymuU2RxLp4V5fWzZYH8ffPGo39r_fd_qiGfhfF_J3TBp_M4MWnSesktXW4bv-sk3bXwiudTFq-Tw7_ANRClsz86VXNDR8lfxZAuvJI__/s640/CreateCube.png" width="640" /></a></div>
<br />
次にClipping用のマテリアルを作成します。<br />
Pro<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg565lwvSTzoIlOSVNWxSCQzXHO4uG7f0TLWbkYKxwHpEDLvX2FHeNo53uYSqKPBiTLmVSevD0yzv9z9kYsalKDzEOOMbxuAptcFOm4Fqc2XkKbuqIsLj1AqoiiiwzC3DxNPZ65ThBCLTk5/s1600/creatematerial.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="639" data-original-width="367" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg565lwvSTzoIlOSVNWxSCQzXHO4uG7f0TLWbkYKxwHpEDLvX2FHeNo53uYSqKPBiTLmVSevD0yzv9z9kYsalKDzEOOMbxuAptcFOm4Fqc2XkKbuqIsLj1AqoiiiwzC3DxNPZ65ThBCLTk5/s640/creatematerial.png" width="366" /></a></div>
<br />
ProjectのCreate > Materialを選択、Materialの名前は何でも大丈夫ですが<br />
今回はClippingMaterialとしました。<br />
<br />
<br />
ClippingMaterialを選択、InspectorのShaderのドロップダウン押し<br />
Mixed Reality Toolkit<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHaRRVRkdtO4CSNoT0BuvbVuxvCMtAuP52DFlMiGDO2jvq00mJoVK-rEuexzCs0IJPts3idD-FMyETaBM1LTHFkkuOj3BgySlFL2Ccox04v4WWEzuoW8OCu4iilDtTSQaxojPX4MDcelyW/s1600/MixedRelaity.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="761" data-original-width="775" height="626" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHaRRVRkdtO4CSNoT0BuvbVuxvCMtAuP52DFlMiGDO2jvq00mJoVK-rEuexzCs0IJPts3idD-FMyETaBM1LTHFkkuOj3BgySlFL2Ccox04v4WWEzuoW8OCu4iilDtTSQaxojPX4MDcelyW/s640/MixedRelaity.png" width="640" /></a></div>
<br />
さらにStandardを選択<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ1KMgHI8Z1a-xYdg97L3l14PS84ziKHo4meNgqGPesYtGgQLQkHztSQwSqkEo4rw3jNBpp-oJDv2qRAdOq42CEAq1dFKkqDVnG2Z5cJHobs6vQ1-LsxvSeuQsovDv4MqUHioCYgIiilLP/s1600/Standard.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="753" data-original-width="773" height="622" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ1KMgHI8Z1a-xYdg97L3l14PS84ziKHo4meNgqGPesYtGgQLQkHztSQwSqkEo4rw3jNBpp-oJDv2qRAdOq42CEAq1dFKkqDVnG2Z5cJHobs6vQ1-LsxvSeuQsovDv4MqUHioCYgIiilLP/s640/Standard.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
InspectorがMixedRealityToolkit/Standardに切り替わったら<br />
Clipping BorderのチェックをONにします。
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzfKen5acGYlbFzD5wtemWrLRHkDma56vZNDZRKOqYLYP5y26ABxJfhYq6eJAP8ld1KCQN3iJCU9Piei6hJGMDOHdbDFrBwp0IIxfhVI7c95qPPVaYU9AQd6Da09Mf5cjz0go2mr3nP9Ot/s1600/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-05+164724.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="735" data-original-width="741" height="634" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzfKen5acGYlbFzD5wtemWrLRHkDma56vZNDZRKOqYLYP5y26ABxJfhYq6eJAP8ld1KCQN3iJCU9Piei6hJGMDOHdbDFrBwp0IIxfhVI7c95qPPVaYU9AQd6Da09Mf5cjz0go2mr3nP9Ot/s640/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-05+164724.png" width="640" /></a><br />
ProjectrのClippingMaterialをHierarchyのCreateにドラッグ&ドロップでアタッチ<br />
CubeのInspectorでClippingMaterialがアッタッチされたことを確認してください。
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy5kqGbuU8I7vHEhijg8zYBVLqTCjDr_xEJKRT6_oVgtu3nYRat49rM9hcgF1EJRnzIcY3PlC9wlQDHe0usmf_9gPoq9Unyqzit_U8ExUrC30PRRHxTpU6m7Ds0NCyVotQX795dxG3oDZK/s1600/material.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="753" data-original-width="768" height="626" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhy5kqGbuU8I7vHEhijg8zYBVLqTCjDr_xEJKRT6_oVgtu3nYRat49rM9hcgF1EJRnzIcY3PlC9wlQDHe0usmf_9gPoq9Unyqzit_U8ExUrC30PRRHxTpU6m7Ds0NCyVotQX795dxG3oDZK/s640/material.png" width="640" /></a></div>
<br />
Cubeを右クリック、メニューからCreate Empetyを選択、Cubeの子供にします。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizRxVQrL9QhsbyHpdkSEnIcDN_fHzGbJsdOJ1jY4m1VWYuoTPuHPghlkK_OSxENsVaXGcmDdcYdDJn-67vGKG9KQR2Gj7EAmVyUi8tXrlt8c5JyxrJNKCuVCLkSj_ZWDzydIPhAU68JmCz/s1600/cureateempty.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="587" data-original-width="353" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizRxVQrL9QhsbyHpdkSEnIcDN_fHzGbJsdOJ1jY4m1VWYuoTPuHPghlkK_OSxENsVaXGcmDdcYdDJn-67vGKG9KQR2Gj7EAmVyUi8tXrlt8c5JyxrJNKCuVCLkSj_ZWDzydIPhAU68JmCz/s640/cureateempty.png" width="384" /></a></div>
<br />
Empetyのオブジェクトの名前を変更します。特に何でも良いのですが、今回はClippingPlaneとしました。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMN0VH9oe_F8bWxuashKH1zEGoAr2g8P24ccL0rLbR0A40HPhR6C2Amsxe6_vXeKUKdhep9qVwpN1CF07WLQq_24uDBVNHWY0NT6S7ZkBMjOCIDl-kU0MzMNu7RZ8Vrq1TtKDBFUaJTb6O/s1600/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-05+164106.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="231" data-original-width="635" height="232" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMN0VH9oe_F8bWxuashKH1zEGoAr2g8P24ccL0rLbR0A40HPhR6C2Amsxe6_vXeKUKdhep9qVwpN1CF07WLQq_24uDBVNHWY0NT6S7ZkBMjOCIDl-kU0MzMNu7RZ8Vrq1TtKDBFUaJTb6O/s640/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-05+164106.png" width="640" /></a></div>
<br />
ClippingPlaneのがInspectorのAdd Componentで、Clipping Planeのスクリプトをアタッチ<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaK3BQAUgSRDyuzHarKOKSUvy58DWNEmYtN5ckfYPDEuhAae9laI1RpB3r-fdqZU893FxdeN4ler73Vl9tOPtMyD5vQqxrGlKc2WWGf-MH4xRscimJlRJqZ5lvIyYqB9Nm2-hm-aGzrncw/s1600/clip.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="449" data-original-width="639" height="448" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaK3BQAUgSRDyuzHarKOKSUvy58DWNEmYtN5ckfYPDEuhAae9laI1RpB3r-fdqZU893FxdeN4ler73Vl9tOPtMyD5vQqxrGlKc2WWGf-MH4xRscimJlRJqZ5lvIyYqB9Nm2-hm-aGzrncw/s640/clip.png" width="640" /></a></div>
<br />
InspectorのClipping PlaneスクリプトRenderersのsizeに1を入力<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghqdU1ddy9q-u7iY2vZcnRF6EDO1OF5FN03GwvIjVsualjnUfbrSfBqvfXW2BY0HGJl8KbSTsAgL_IK6Im3QOKIwUW6zXmsQ-gJDbZf0kgmwssVrIhIzhM0QDNDiW8m4KuTDbrQfkBpvvI/s1600/size.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="393" data-original-width="636" height="394" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghqdU1ddy9q-u7iY2vZcnRF6EDO1OF5FN03GwvIjVsualjnUfbrSfBqvfXW2BY0HGJl8KbSTsAgL_IK6Im3QOKIwUW6zXmsQ-gJDbZf0kgmwssVrIhIzhM0QDNDiW8m4KuTDbrQfkBpvvI/s640/size.png" width="640" /></a></div>
<br />
HierarchyのCubeをClipping PlaneスクリプトのInspector > Renderers<br />
Element 0 にドラッグ&ドロップでアタッチメント<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinmIJMKatSc_5gmyjHqvE0tmDJMwd3RgtVC2OlGncNb8myEAJdCUAlO0EJymmf2yhr-RZ4j5c1FD56AqPcW2SN-Jcdu9JTHtGZAkfqQLcsoiCK3IGni9S5J6ERPEhbd0h1B57EuudooDhG/s1600/AttachCUbe.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="390" data-original-width="754" height="330" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinmIJMKatSc_5gmyjHqvE0tmDJMwd3RgtVC2OlGncNb8myEAJdCUAlO0EJymmf2yhr-RZ4j5c1FD56AqPcW2SN-Jcdu9JTHtGZAkfqQLcsoiCK3IGni9S5J6ERPEhbd0h1B57EuudooDhG/s640/AttachCUbe.png" width="640" /></a></div>
<br />
そうすると、この時点で、SceneとGameのCubeの下半分が消えて見えなくなっています。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGzH8fsYaOkjsaoqZQWChACheUbgtiR1Lv33veSdZnbHdBiyg6q1oZNbF7gBpjuXMk6TOLg5_mn_TMAtx9r4LGN4ca7yhJfBh40JUKj0Q2lSkj7SNxY8VrwzJe1mu4ayQgOXlvRvgWEWWg/s1600/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-05+173950.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="680" data-original-width="1600" height="270" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGzH8fsYaOkjsaoqZQWChACheUbgtiR1Lv33veSdZnbHdBiyg6q1oZNbF7gBpjuXMk6TOLg5_mn_TMAtx9r4LGN4ca7yhJfBh40JUKj0Q2lSkj7SNxY8VrwzJe1mu4ayQgOXlvRvgWEWWg/s640/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-05+173950.png" width="640" /></a></div>
SceneでClipping PlaneオブジェクトのY座標を変更すると、Cubeが消えたり、現れたりします。こんな感じになります。<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dzNAaOzwFR070FONiPDinaYizDeUlpyPJG8pvlsYZ8J96k3FLTZN4-dBoOpYO13HW4cRHVIwqBbtaP2xzDKLw' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div>
<br />
Exampleでは、すでに専用のMaterialが作成されていたり、<br />
Animationを利用して自動でClipping Planeオブジェクトの座標を変更して<br />
カッコイイ表現を行っていますので、是非、そちらを見てください。<br />
<br />
おまけ。。<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dx_pZiYr_dsIwl1k9WrSZ-WtUiybu5U7JK9DD9bWLS7nT_-hj9haZbmYy0ckM4U6rszQ6YTehI5JwShDbf_zg' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div>
<br />
まぁ、やっちゃいますよね。こんなこと。。
<br />
<div style="text-align: center;">
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script><b><span style="font-size: x-large;">
あんたも好きねぇ。。</span></b>
</div>
ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-75917687446390534212019-12-17T09:22:00.002+09:002020-02-06T11:16:53.627+09:00[HoloLens Advent Calendar 2019] 17日目 HoloLen 2で床、壁、天井にPlaneのオブジェクトを作成する Scene understanding SDK のUnity Sampleを実行してみた。お疲れ様です。ZuQ9->Nnです。<br />
この記事は、HoloLens Advent Calendar 2019、17日目<br />
2019/12/17 の内容です。<br />
<br />
HoloToolkit-Unity時代、SurfaceMeshesToPlanes.csという<br />
床、壁、天井にPlaneのオブジェクトを作成するScriptが存在しました。<br />
SurfaceMeshesToPlanes.csについて詳しくは下記の記事が参考になるとおもいます。<br />
<blockquote class="embedly-card">
<h4>
<a href="http://uradev.hatenablog.com/entry/2017/03/21/172532">壁とか天井とか床とか欲しいな 〜 空間認識 - ウラデブ</a></h4>
ども、ウラさんです。HoloLensなんだから壁や床を利用したいよね?って事で、空間認識ってか部屋認識をやってみましょ。 前回と同じでHoloToolkitを使って空間メッシュが表示されるまで作ります。んで、空のゲームオブジェクトを追加。 自前の スクリプトとして「MakePlanes.cs」を作成&アタッチ。 HoloToolkitから「SurfaceMeshesToPlanes.cs」「RemoveSurfaceVertices.cs」をアタッチ。 んで、MakePlanes.csを編集。 sing System.Collections; using System.Collections.Generic; using UnityEngine; using HoloToolkit.Unity.SpatialMapping; using HoloToolkit.Unity.InputModule; public class MakePlanes : MonoBehaviour, IInputClickHandler { void Start () { InputManager.Instance.PushFallbackInputHandler(gameObject); SurfaceMeshesToPlanes.Instance.MakePlanesComplete += SurfaceMeshesToPlanes_MakePlanesComplete; } void Update () { } public void OnInputClicked(InputClickedEventData eventData) { SpatialMappingManager.Instance.StopObserver(); SurfaceMeshesToPlanes.Instance.MakePlanes(); } private void SurfaceMeshesToPlanes_MakePlanesComplete(object source, System.EventArgs args) { RemoveSurfaceVertices.Instance.RemoveSurfaceVerticesWithinBounds(SurfaceMeshesToPlanes.Instance.</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
<br />
<blockquote class="embedly-card">
<h4>
<a href="https://torikasyu.com/?p=938">目指せ脱HoloLens初心者!その2(SpatialProcessing)</a></h4>
https://torikasyu.com/?p=927 の続きです。 さて、次は別のサンプルを使ってSpatialMappingを更に調べてみます。 HoloToolkit-UnityのHoloToolkit-Testにある、SpatialProcessingシーンを実行してみます。 (HoloToolkit-1.5.7で試していますので、バージョンが違うと多少違うかもしれません) ...</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
個人的には、あの機能が好きで、Mixed Realty Tookit Unity v2 ではどうやるんだろうと探していました。<br />
MRTKv2には、SpatialAwarenessSurfaceTypes.csというScriptで<br />
enumの定義で、Floor、Ceiling、Wall、Platformの定義が行われている他、
<br />
<blockquote class="embedly-card">
<h4>
<a href="https://microsoft.github.io/MixedRealityToolkit-Unity/api/Microsoft.MixedReality.Toolkit.SpatialAwareness.SpatialAwarenessSurfaceTypes.html">Enum SpatialAwarenessSurfaceTypes</a></h4>
null</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
SpatialAwarenessPlanarObject.csのCreateSpatialObjectメソッドというのが存在し、<br />
なんだか出来そうな感じでした。<br />
<blockquote class="embedly-card">
<h4>
<a href="https://microsoft.github.io/MixedRealityToolkit-Unity/api/Microsoft.MixedReality.Toolkit.SpatialAwareness.SpatialAwarenessPlanarObject.html">Class SpatialAwarenessPlanarObject</a></h4>
Inheritance Assembly: cs.temp.dll.dll Syntax public class SpatialAwarenessPlanarObject : BaseSpatialAwarenessObject, IMixedRealitySpatialAwarenessObject SpatialAwarenessPlanarObject() Declaration public SpatialAwarenessPlanarObject() Collider Declaration public BoxCollider Collider { get; set; } Property Value CreateSpatialObject(Vector3, Int32, String, Int32) Declaration public static SpatialAwarenessPlanarObject CreateSpatialObject(Vector3 size, int layer, string name, int planeId) Parameters Returns</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
残念ながらサンプルが見つけられず、どう使うのかはわからずじまい。<br />
しかし、色々と検索しているうちに、Scene understanding SDKというものが別に存在していることを知りました。
<br />
<blockquote class="embedly-card">
<h4>
<a href="https://github.com/MicrosoftDocs/mixed-reality/blob/master/mixed-reality-docs/scene-understanding-SDK.md">MicrosoftDocs/mixed-reality</a></h4>
The goal of Scene understanding is to transform the un-structured environment sensor data that your Mixed Reality device captures and to convert it into a powerful but abstracted representation that is intuitive and easy to develop for. The SDK acts as the communication layer between your application and the Scene Understanding runtime.</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
というか、MicrosoftDocs/mixed-realityというリポジトリの存在そのものも、今回初めて知りました。。orz..。<br />
<br />
Scene understanding SDKは、どうやら、HoloToolkit-Unity時代のSpatial Understandingと呼ばれた機能のHoloLens 2版のようです。<br />
<br />
UnityでのSampleがまた、別のGithubのリポジトリに存在しましたので、<br />
今回は、そちらを確認しました。<br />
<blockquote class="embedly-card">
<h4>
<a href="https://github.com/sceneunderstanding-microsoft/unitysample">sceneunderstanding-microsoft/unitysample</a></h4>
A Unity-based sample application that showcases Scene Understanding on HoloLens 2. When this sample is deployed on a HoloLens, it will show the virtual representation of your real environment. When this sample is deployed on a PC, it will load a serialized scene (included under Resources\SerializedScenesForPCPath) and display it.</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
Githubに色々注意書きがあるのですが、Unity 2018.4.12以上が必要になる他<br />
Windows SDK version 10.0.18362.0以上も必要です。<br />
また、これは、Mixed Realty Tookit Unity v2 とは全く関係無く。<br />
<div style="text-align: center;">
<b><span style="color: red; font-size: large;">実機では、HoloLens 2のみで旧型のHoloLensでは動作しないようです。</span></b>
</div>
UnityのSampleはPCでも確認できるようになっていたため、<br />
今回はPCのUnity Editorで確認を行いました<br />
<br />
GitHubからプロジェクトをCloneかダウンロードしてプロジェクトを開きます。<br />
Unityで確認する場合は Asset > SceneのSceneUnderstandingSampleを開き<br />
HierarchyからSceneUnderstandingManagerを選択<br />
InspectorのSceneUnderstandingDataProvider > Run On Deviceのチェックを外して実行します。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5D_nxH8536VYM24AZUjXQWz_KwQpiFzMfS-1ig6sZJegXmR0Qn_nc7HJtJmqi1oiIpdukT1b0zLcp3s5N7ILnBpLuGURRPUxvOq7byQS2AMcGazi8dF91rrglxEo-xLCw-xokM6yYuNkD/s1600/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-06+110105.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="722" data-original-width="988" height="466" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5D_nxH8536VYM24AZUjXQWz_KwQpiFzMfS-1ig6sZJegXmR0Qn_nc7HJtJmqi1oiIpdukT1b0zLcp3s5N7ILnBpLuGURRPUxvOq7byQS2AMcGazi8dF91rrglxEo-xLCw-xokM6yYuNkD/s640/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-06+110105.png" width="640" /></a></div>
<br />
Unityで実行ボタンを押すと、こんな感じで壁や天井、床といったオブジェクトがせいせいされた部屋のようなものが表示されます。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0jHflaI8f9-F_MWK1knfVKDkMVRN_325r5uE7s-CVnZOGyoHdNhTJb_tGCEvqU14OIxG5B1Iwth60RZmnLdHv1AOKgTbpuK_vaNYbZALY9Jpf96VToDLFWN-hUAfcPchjo0j6usZTxjhl/s1600/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-06+140431.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="835" data-original-width="1557" height="342" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0jHflaI8f9-F_MWK1knfVKDkMVRN_325r5uE7s-CVnZOGyoHdNhTJb_tGCEvqU14OIxG5B1Iwth60RZmnLdHv1AOKgTbpuK_vaNYbZALY9Jpf96VToDLFWN-hUAfcPchjo0j6usZTxjhl/s640/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-06+140431.png" width="640" /></a></div>
<br />
しつこいようですが、<br />
<span style="color: red; font-size: x-large;"><b>Mixed Realty Tookit Unity v2 とは全く関係無いため、</b><span style="background-color: white; color: red; display: inline; float: none; font-family: "times new roman"; font-size: 32px; font-style: normal; font-variant: normal; font-weight: 700; letter-spacing: normal; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Mixed Realty Tookit Unity v2 </span><b>のパッケージインポートをする必要すらありません。</b></span><br />
独立した全く別の一つの機能としてとらえた方がよさそうです。<br />
<br />
少し、中身を確認したところ<br />
SceneUnderstandingDataProvider.cs、SceneUnderstandingDisplayManager.cs、<br />
SceneUnderstandingUtils.csというScriptが利用されています。<br />
こちらは、Microsoft.MixedReality.SceneUnderstanding.Samples.Unityという<br />
namespace のため、SceneUnderstandingそのもののコードではなく<br />
あくまで、サンプルのために作成されたScriptです。<br />
<br />
SceneUnderstandingそのものは、UnityではAsset > Packages > Microsoft.MixedReality.SceneUnderstanding.0.5.2042-rc > Unityの中に<br />
CPU毎のフォルダにMicrosoft.MixedReality.SceneUnderstanding.dllが入っています。<br />
dllなのでコードの中身は見ることができませんでした。<br />
<br />
SceneUnderstandingDataProvider.cs、Start()メソッドの中で<br />
var access = await SceneUnderstanding.SceneObserver.RequestAccessAsync();<br />
が呼び出されています。実機ではこちらで、実際の部屋を読み取り、<br />
床、壁、天井にPlaneのオブジェクトを作成するようです。<br />
<br />
PCだと、SceneUnderstandingDataProvider.csの SUSerializedScenePath プロパティに<br />
指定されているbyteデータを読み込んで表示しています。<br />
<br />
GitHubのサンプルでは、Asset > Resources > SerializedScenesForPCPath > SU_Kitchen.bytesが利用されています。<br />
<br />
<div style="text-align: center;">
<b><span style="font-size: x-large;">いかがだったでしょうか?</span></b></div>
<b></b><span style="font-size: x-large;"></span><br />
開発者は、Mixed Realty Tookit Unity v2のリポジトリだけではなく、MicrosoftDocs/mixed-realityのリポジトリのチェックも必要そうです。<br />
<br />
<b><span style="color: red; font-size: large;">あと、やはり、Microsoftの開発ドキュメントはよく読みましょう。。</span></b>
僕は、今回、何度も、見落としておりましたので。。orz..
ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-60057947916946937922019-12-16T09:55:00.001+09:002019-12-17T09:19:21.497+09:00[HoloLens Advent Calendar 2019] 16日目 Mixed Realty Tookit Unity v2 HandConstraint.csのOnHandActivateの呼び出しタイミングについてお疲れ様です。ZuQ9->Nnです。<br />
この記事は、HoloLens Advent Calendar 2019、16日目
2019/12/16 の内容です。<br />
Mixed Realty Tookit Unity v2(以下MRTKv2)に<br />
ハンドトラッキングを扱うHandConstraint.csというスクリプトがあります。
<br />
<blockquote class="embedly-card">
<h4>
<a href="https://microsoft.github.io/MixedRealityToolkit-Unity/api/Microsoft.MixedReality.Toolkit.Utilities.Solvers.HandConstraint.html">Class HandConstraint</a></h4>
Provides a solver that constrains the target to a region safe for hand constrained interactive content. This solver is intended to work with IMixedRealityHand but also works with IMixedRealityController. public class HandConstraint : Solver protected HandBounds handBounds protected IMixedRealityController trackedController When a hand is activated for tracking, should the cursor(s) be disabled on that hand?</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script><br />
HandConstraint.csは、Provides a solver that constrains the target to a region safe for hand constrained interactive content.<br />
つまり、手の領域にあるオブジェクトに対して制約をつけて、手が見えたり隠れたりするときにイベントを実行するScriptです。<br />
HandConstraint.csにはOnFirstHandDetected、OnHandActivate、OnHandDeactivate、
OnHandDeactivateというイベントが定義されています。<br />
<br />
OnFirstHandDetectedは、Event which is triggered when zero hands to one hand is tracked.<br />
日本語に直すとゼロ本の手の片手がトラッキングされたときにトリガーとなるイベント<br />
<br />
OnHandActivateは、Event which is triggered when a hand begins being tracked.<br />
手がトラッキング開始されたときにトリガーとなるイベント<br />
<br />
OnHandDeactivateは、Event which is triggered when a hand stops being tracked.
手がトラッキング終了されたときにトリガーとなるイベント<br />
<br />
OnLastHandLostは、Event which is triggered when all hands are lost.
すべての手がトラッキングが失われたきにトリガーとなるイベント<br />
<br />
となっています。ふと、OnFirstHandDetectedとOnHandActivateのタイミングってどう違うのだろう?そんな純粋な気持ちで調べたら。。。<br />
<b><span style="font-size: x-large;">なんだか思っていた結果と違ったので、</span></b><br />
<br />
自分のメモ用にまとめておきます。
プロジェクトの作成、<br />
Microsoft.MixedReality.Toolkit.Unity.Foundation.2.1.0.unitypackageのインポート<br />
UnityのMixed Relaity ToolkitメニューからAdd to Scene and Configureを選択する等はいつも通り行ってください。<br />
わからない方は、<a href="http://zuq9nn.blogspot.com/2019/12/hololens-advent-calendar-2019-8-mixed.html">以前の記事</a>を参考にしてください。<br />
<br />
HierarchyのCreate > 3D Object > 3D Textを作成<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6hdUB16cHJZnnQohojwB0lE6F73EVwj45Pph2dfTTGPwsqWhG-UMdaSJFlauUA-M9xquKgreq00gaMH2GzUc-qAfKr7sbfBVjrHILDemhiG4L4FfgODwTyEAC-if8jDDjZE-5NnjpSYMP/s1600/3DText.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="445" data-original-width="497" height="572" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6hdUB16cHJZnnQohojwB0lE6F73EVwj45Pph2dfTTGPwsqWhG-UMdaSJFlauUA-M9xquKgreq00gaMH2GzUc-qAfKr7sbfBVjrHILDemhiG4L4FfgODwTyEAC-if8jDDjZE-5NnjpSYMP/s640/3DText.png" width="640" /></a></div>
<br />
これはデバックの文字列を画面に表示させるためのテキストです。<br />
画面で確認できるように3D TextのTransFormや設定を行ってください。<br />
僕は今回、Transform x:0, y:0, z:20 、Textは空に<br />
Text MeshのAnchor Middle Center、Aligiment Center、Font Size 50としました。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKw-07Lge3bszM-__Q72c0pRennlgovUlgB1LpvPfvaY3BR7xdBUG7M4A8_vxvni47WkBN65fe3-6ZFM4wBy4qCJ3rRe3pbL1Y6Kolt_nWbDMaUGhxKVNSkrpAD1U7rtlQfJ7DGkNVL74a/s1600/TextTrans.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="642" data-original-width="880" height="466" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKw-07Lge3bszM-__Q72c0pRennlgovUlgB1LpvPfvaY3BR7xdBUG7M4A8_vxvni47WkBN65fe3-6ZFM4wBy4qCJ3rRe3pbL1Y6Kolt_nWbDMaUGhxKVNSkrpAD1U7rtlQfJ7DGkNVL74a/s640/TextTrans.png" width="640" /></a></div>
<br />
HierarchyのCreate > Create Emptyで空のオブジェクトを作成<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbZ-qWeumJ0GVit2C2BAuI9spRv1oNkL79qNfLf8_gfiynHH3k1t5jiWE9AryobIpiySLNqyo9YBL0XUbzWnps_IIAvZmgvmuydew6zNcsyO4v7JhLdGnW2EzuEMvcUTiFtiPEaQyFG2qm/s1600/CreateEmpty.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="357" data-original-width="405" height="564" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbZ-qWeumJ0GVit2C2BAuI9spRv1oNkL79qNfLf8_gfiynHH3k1t5jiWE9AryobIpiySLNqyo9YBL0XUbzWnps_IIAvZmgvmuydew6zNcsyO4v7JhLdGnW2EzuEMvcUTiFtiPEaQyFG2qm/s640/CreateEmpty.png" width="640" /></a></div>
<br />
特に名前は何でもいいのですが、今回は、HandConstraintTestとしました。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxVOmJftktrGtT9aYOH1ZWt6LFjvHEiuGGOGhWhA5rnX6k0lmyXHA3tDYcGrQuKgUgclxvK9Y26cFcqWohzg6c0X5GYEiVWq4bxuDvgH5EKD1Fg3beEY8KtRG1l7Fx7MhyphenhyphenraLYIV-DVkew/s1600/EmptyObject.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="377" data-original-width="810" height="296" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxVOmJftktrGtT9aYOH1ZWt6LFjvHEiuGGOGhWhA5rnX6k0lmyXHA3tDYcGrQuKgUgclxvK9Y26cFcqWohzg6c0X5GYEiVWq4bxuDvgH5EKD1Fg3beEY8KtRG1l7Fx7MhyphenhyphenraLYIV-DVkew/s640/EmptyObject.png" width="640" /></a></div>
<br />
HierarchyのHandConstraintTestを選択、<br />
InspectorからAdd CompnentでHandConstraintを選択してアタッチ<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLJ81uKmoU38olAuskxu0eePF7SpnZyyy0sEbmWCe2qoJZRuqGcdF3DJwi2OM2RSJJOUt_TkDg_LJ29xGedAgd3zBgd3OpxB8dGzngyMGuSjzxe4JajtIOTYjgfGF-3yfErMJdy0EPDXQ0/s1600/AddComp.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="499" data-original-width="1046" height="304" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLJ81uKmoU38olAuskxu0eePF7SpnZyyy0sEbmWCe2qoJZRuqGcdF3DJwi2OM2RSJJOUt_TkDg_LJ29xGedAgd3zBgd3OpxB8dGzngyMGuSjzxe4JajtIOTYjgfGF-3yfErMJdy0EPDXQ0/s640/AddComp.png" width="640" /></a></div>
<br />
更に、Add CompnentのNew ScriptでScriptを追加<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN6D0r2LG5o9URqFkODnW3aAlIM-Q2SzzKCGYauxTeinYMQk_T8VnvLtjGfNPKFih2xJrbR_fur1jbFVXpWF3KmtByRfTQJYiR2HJI-aygjbx3BhctKeRZ_dd7wagqwItHYHZhyphenhyphenMsbmWKe/s1600/NewScript.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="701" data-original-width="881" height="508" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN6D0r2LG5o9URqFkODnW3aAlIM-Q2SzzKCGYauxTeinYMQk_T8VnvLtjGfNPKFih2xJrbR_fur1jbFVXpWF3KmtByRfTQJYiR2HJI-aygjbx3BhctKeRZ_dd7wagqwItHYHZhyphenhyphenMsbmWKe/s640/NewScript.png" width="640" /></a></div>
<br />
Script名は何でも良いのですが、
今回は HandConstraintTest.csとしました。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh51q78zefrSIeJ5q1_Q1vi_u2EpEjecKrrs1PnFHHGwR-Mua0dQ48UJcoCMs5xCIBodSuqxJCOy1QqxoawLSbyBqfmTKeKd1sGpGQnmIjofyiu3HrNlCnarNqRZuo7Ex1_U58YIW6BeuSb/s1600/Name.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="775" data-original-width="888" height="558" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh51q78zefrSIeJ5q1_Q1vi_u2EpEjecKrrs1PnFHHGwR-Mua0dQ48UJcoCMs5xCIBodSuqxJCOy1QqxoawLSbyBqfmTKeKd1sGpGQnmIjofyiu3HrNlCnarNqRZuo7Ex1_U58YIW6BeuSb/s640/Name.png" width="640" /></a></div>
<br />
中身は、こんな感じ
<script src="https://gist.github.com/ZuQ9Nn/33d32b9558f3516a64bcc26bd0ce439a.js"></script>
HierarchyのNew TextをHandConstraintTest(Script)のTextにアタッチ<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsfIDwJuOtlK_doFbACGQXtDWRyuw_20d8tsUTGCv9_FTRFK1lIILGL6SdNPUjDuG2FYF8GaVIGWFwOnroMAorAWfYuxGl3nJtUEf30j5zHeHZGSChz_mmPgaHPRx7Lp9ajGHQrQ2eg3Mf/s1600/aTTACH.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="583" data-original-width="866" height="430" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsfIDwJuOtlK_doFbACGQXtDWRyuw_20d8tsUTGCv9_FTRFK1lIILGL6SdNPUjDuG2FYF8GaVIGWFwOnroMAorAWfYuxGl3nJtUEf30j5zHeHZGSChz_mmPgaHPRx7Lp9ajGHQrQ2eg3Mf/s640/aTTACH.png" width="640" /></a></div>
<br />
HandConstraintの各イベントにHandConstraintTestのメソッドを対応させます。<br />
OnHandActivate : AfterHandActivate<br />
OnHandDeactivate : AfterHandDeactivate<br />
OnFirstHandDetected: AfterFirstHandDetected<br />
OnLastHandLost: AfterHandLost<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFEl1YNMZHjzr13BDAkuaulDsgbTWQtrP3LbIkgbgcoUUe5NnZWOzIZ8d2mxy2pGSiG0miwzr-knKRqJP8lo4bw6wyejbnl4KRg7DARHsxJKiruFgvBpoyss4Qq0zHo6UQdsCrrhd0clCC/s1600/Event.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="573" data-original-width="867" height="422" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFEl1YNMZHjzr13BDAkuaulDsgbTWQtrP3LbIkgbgcoUUe5NnZWOzIZ8d2mxy2pGSiG0miwzr-knKRqJP8lo4bw6wyejbnl4KRg7DARHsxJKiruFgvBpoyss4Qq0zHo6UQdsCrrhd0clCC/s640/Event.png" width="640" /></a></div>
<br />
これでUnityを実行すると、このような感じになりました。<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dydZr0VNYuZqQn4bMZbR3o-uDzuEVfXbyfmhygeZ9fVszn3cyypg_iOrslCVZz6jRRVxdzY52LE4YnaNj-C6Q' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div>
<br />
動画では、少しわかりにくいので、スクリーンショットでも解説します。<br />
Unityを実行した直後は、OnLastHandLost、OnHandDeactivateが実行されます。
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdroOtbGv2GA7To05jR1jYARM_tf71yc5UD70hpDPZ4Ld_yarP2QlAqhOLHfhKD1njvgKT1wlPgT46P8_FDvfSfW2UeRTSEbWp9d3Bh6tSykDjRyzd9vbK4eflHJ6UybLatXfviVPS9Zij/s1600/beforeHand.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="457" data-original-width="1210" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdroOtbGv2GA7To05jR1jYARM_tf71yc5UD70hpDPZ4Ld_yarP2QlAqhOLHfhKD1njvgKT1wlPgT46P8_FDvfSfW2UeRTSEbWp9d3Bh6tSykDjRyzd9vbK4eflHJ6UybLatXfviVPS9Zij/s640/beforeHand.png" width="640" /></a></div>
<br />
次に手を表示したときには、<b><span style="color: red; font-size: large;">OnFirstHandDetectedのみ実行</span></b>されます。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0wvBoQWE1UYnIjrobZTjOdNELVW9TFe7S3YybysiMY4KPFFRyeoAEbwJNqz68zJ8hUA8pIN16lH6phTsyceRjoBFSuBZwtGM_O8bK4mwwQCCfJxwe4Do3pOGR4FuVX5pXlyxa6ae6jhAL/s1600/hand.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="408" data-original-width="1246" height="208" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0wvBoQWE1UYnIjrobZTjOdNELVW9TFe7S3YybysiMY4KPFFRyeoAEbwJNqz68zJ8hUA8pIN16lH6phTsyceRjoBFSuBZwtGM_O8bK4mwwQCCfJxwe4Do3pOGR4FuVX5pXlyxa6ae6jhAL/s640/hand.png" width="640" /></a></div>
<br />
つまり、このタイミングでは、<b><span style="color: red; font-size: large;">OnHandActivateは実行されません</span></b>。<br />
手を非表示にしたときは、OnLastHandLostが呼び出されます。<br />
<br />
では、いつ、OnHandActivateが呼び出されるのでしょうか?<br />
結論から言うと、Unityの設定を変更しなければ、OnHandActivateは呼び出されません。<br />
<br />
HandConstraint.csをアタッチすると、<br />
Solver Handler.csもアタッチされています。<br />
<blockquote class="embedly-card">
<h4>
<a href="https://microsoft.github.io/MixedRealityToolkit-Unity/api/Microsoft.MixedReality.Toolkit.Utilities.Solvers.SolverHandler.html?q=SolverHandler">Class SolverHandler</a></h4>
This class handles the solver components that are attached to this GameObject public class SolverHandler : MonoBehaviour protected Handedness currentTrackedHandedness protected Handedness preferredTrackedHandedness protected readonly List solvers Add an additional offset of the tracked object to base the solver on. Useful for tracking something like a halo position above your head or off the side of a controller.</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
Solver Handler.csは、GameObjectにアタッチして、オブジェクトの位置と方向を計算するコンポーネントを提供します。
<br />
HierarchyからHandConstraintTestを選択、<br />
InspectorでSolver HandlerのTracked Target Typeを確認してください。<br />
最初の設定は、<b><span style="color: red; font-size: large;">Head</span></b>になっています。<br />
つまり、<b><span style="color: red; font-size: large;">頭に追随する</span></b>設定なのです。<br />
<br />
Solver HandlerのTracked Target Typeのドロップダウンから<br />
Hand Jointを選択し。
手に追随する設定に変更します。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixlzioijgBtIv-JdROerjqTpFWePhXIc1lRuJrekMMN8rhAo3wTmW8He15nkM8PTBo6ybopL89x0urX9zlAC4torYgQtVFU-BtS_KdRGoJMi4542VwXB2FMKjujUnoDy4FADzwEAhbuLFo/s1600/HandJoint.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="409" data-original-width="1033" height="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixlzioijgBtIv-JdROerjqTpFWePhXIc1lRuJrekMMN8rhAo3wTmW8He15nkM8PTBo6ybopL89x0urX9zlAC4torYgQtVFU-BtS_KdRGoJMi4542VwXB2FMKjujUnoDy4FADzwEAhbuLFo/s640/HandJoint.png" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPeFBbkoyCFJHFsorRVmJKfro6vwszcIOeYsn9qqVcVXARLvcDxlSjceu0hEJ8muXBwFQSpHhCqWCiywAlNcTYlvrqLYjpOYkmd8fIs4WLYvwzHhKNRQbWJwpXYrxW3umqgw4lsPBCp_iV/s1600/solver.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="392" data-original-width="993" height="252" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPeFBbkoyCFJHFsorRVmJKfro6vwszcIOeYsn9qqVcVXARLvcDxlSjceu0hEJ8muXBwFQSpHhCqWCiywAlNcTYlvrqLYjpOYkmd8fIs4WLYvwzHhKNRQbWJwpXYrxW3umqgw4lsPBCp_iV/s640/solver.png" width="640" /></a></div>
<br />
もう一度、Unityを実行するとこのような感じになります。<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dzwk7ZJQkQuQuJ9fBN6HIpf7QiDDJzIdWbJW8g4H9zyIwSId3iID5qO5lY8oH22UjgXfahfh4g4ZgkTFZn40Q' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div>
<br />
今回は、手を表示した時点で、<br />
<span style="color: red; font-size: large;"><b>OnFirstHandDetected、OnHandActivateの二つのイベントが実行されました。</b></span> <br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLWRhVIW5XbZvBwG2iGXe07RCyyuziezoSO9JKpfT9apAKrSbwDNcnWfErYG5L4hb2b5r1vItXP9BY_c19wSoxpn5Alqpdi9dayKQ4pUHu_aiaJAQg9aMQAJdG4F77KJNzbTyIejM-ss1G/s1600/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-09+151906.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="427" data-original-width="1252" height="218" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLWRhVIW5XbZvBwG2iGXe07RCyyuziezoSO9JKpfT9apAKrSbwDNcnWfErYG5L4hb2b5r1vItXP9BY_c19wSoxpn5Alqpdi9dayKQ4pUHu_aiaJAQg9aMQAJdG4F77KJNzbTyIejM-ss1G/s640/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-09+151906.png" width="640" /></a></div>
<br />
InspectorでSolver HandlerのTracked HandnessをBothからRightやLeftにすると<br />
右手が表示されたときのみ、左手が表示されたときのみといった制御を行うことができます。<br />
<br />
Solver HandlerのTracked Hand JointをPalm以外にも変更してみましたが、<br />
OnFirstHandDetected、OnHandActivateの二つのイベントが実行されました。<br />
しかし、これはUnity Editorで実行しているからかもしれませんね。<br />
<br />
<span style="color: red; font-size: large;"><b>もしかしたら実機で、Tracked Hand JointをThumbTipにした場合、</b></span><br />
<span style="color: red; font-size: large;"><b>親指を隠した状態で手を表示し、親指を立てたときのみ</b></span><br />
<span style="color: red; font-size: large;"><b>OnHandActivateが実行される可能性があるのでは?</b></span><br />
と思ったのですが、Noneにしてもイベントが実行されました。<br />
なので、おそらく、Tracked Hand Jointは、OnHandActivateの実行タイミングとは関係ないと考えています。<br />
Tracked Hand Jointは、オブジェクトをトラッキングするときの位置のみに利用するのでしょう。<br />
<br />
しかし、これだけではありません、OnHandActivateイベントは、<br />
HandConstraintPalmUp.csをアタッチした場合では、また別のタイミングで実行されるのです。
<br />
<br />
一度、InspectorのHandConstraintの歯車アイコンをクリックし、<br />
Remove ComponentでHandConstraintをRemoveします。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTBbdiqJooZr5BKMOt7N8b1CcKqw8y12_qQuGj6JEq3-gc0yyPeJvOWxan-th7VYKFhG0apFid-dI5D9qmf5bTtgClqnYnVOXPvQXT0CCjp01X9lozTKDjYoEzAZNan1lAjcstnOPGR26u/s1600/Remove.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="630" data-original-width="909" height="442" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTBbdiqJooZr5BKMOt7N8b1CcKqw8y12_qQuGj6JEq3-gc0yyPeJvOWxan-th7VYKFhG0apFid-dI5D9qmf5bTtgClqnYnVOXPvQXT0CCjp01X9lozTKDjYoEzAZNan1lAjcstnOPGR26u/s640/Remove.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
InspectorのAdd ComponentからHandConstraintPalmUpを選択しアタッチします。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxKuIkvXxMHowVtM_Ykgrl2sZDr01Y__JKjUm5qvjCSsqTry2Tuw1AbnH5OKLskY5xP-whmxn2bzB0nTkmmuJLmmeUNPixIR7TKCuBIJzExBYPeC8gMpI5UYlcV7FeIB0pRxGK65VEk601/s1600/AddComp.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="738" data-original-width="864" height="546" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxKuIkvXxMHowVtM_Ykgrl2sZDr01Y__JKjUm5qvjCSsqTry2Tuw1AbnH5OKLskY5xP-whmxn2bzB0nTkmmuJLmmeUNPixIR7TKCuBIJzExBYPeC8gMpI5UYlcV7FeIB0pRxGK65VEk601/s640/AddComp.png" width="640" /></a></div>
<br />
HandConstraintPalmUpの各イベントにHandConstraintTestのメソッドを対応させます。<br />
OnHandActivate : AfterHandActivate<br />
OnHandDeactivate : AfterHandDeactivate<br />
OnFirstHandDetected: AfterFirstHandDetected<br />
OnLastHandLost: AfterHandLost<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFWSqh3Nw5Vy_y4fmqZuQ1ildZ4eG-BQmeTLJ2sm5SdYa6IS3yrltkaHMJaaNqYEww3xg8gzbG5AVUgFUl_ck4khX0BTKkRrRj18TvGj8D893HK-5xfrN3HQ5R5uI55_hfThdPrzgXb_zf/s1600/ParmUp.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="897" data-original-width="1004" height="570" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjFWSqh3Nw5Vy_y4fmqZuQ1ildZ4eG-BQmeTLJ2sm5SdYa6IS3yrltkaHMJaaNqYEww3xg8gzbG5AVUgFUl_ck4khX0BTKkRrRj18TvGj8D893HK-5xfrN3HQ5R5uI55_hfThdPrzgXb_zf/s640/ParmUp.png" width="640" /></a></div>
<br />
Unityを実行するとこのような感じになります。<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dxz3TyRVA00Kcg1gcWQKoCLxiZVz1iOERjihp3AEk7v39PmtYGHEm_iaNBYwNJcKxQMEBhNtmLutMD99swANw' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div>
<br />
こちらもスクリーンショットで開設します。まず、手を表示したときは、<br />
OnFirstHandDetectedのみ実行されます。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2GvkwCqMPFDix7otB9LpPeZZ3Xh4v-ysucXFVaqZATOWfOGmLL-t1guKumqrJjmqmv1uAh8K0Z_JVt2VWto1vg-sa5s83oK7rPtdWpe6r5CEyvbvUuEzRt8tI_ZYnPcFZ8eoT34gFaLT_/s1600/firs.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="411" data-original-width="1217" height="216" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2GvkwCqMPFDix7otB9LpPeZZ3Xh4v-ysucXFVaqZATOWfOGmLL-t1guKumqrJjmqmv1uAh8K0Z_JVt2VWto1vg-sa5s83oK7rPtdWpe6r5CEyvbvUuEzRt8tI_ZYnPcFZ8eoT34gFaLT_/s640/firs.png" width="640" /></a></div>
<br />
そして手を回転させて、手のひらが表示されたタイミングで<br />
OnHandActivateが実行されます。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMhJfPD-usFQ41jPrGUncXT9l_iagWq423sHQznG3BuSmn_x9v-ndcW9Nj9-w1taQxmOG22fyh2BLVSAlK-ar4JhGOtzY901whZoHoTNHjo2u9JoXyeTZ_Zp0KjLcXpHUqVgzCAEkt2jZC/s1600/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-10+171853.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="451" data-original-width="1213" height="236" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMhJfPD-usFQ41jPrGUncXT9l_iagWq423sHQznG3BuSmn_x9v-ndcW9Nj9-w1taQxmOG22fyh2BLVSAlK-ar4JhGOtzY901whZoHoTNHjo2u9JoXyeTZ_Zp0KjLcXpHUqVgzCAEkt2jZC/s640/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-10+171853.png" width="640" /></a></div>
<br />
Solver HandlerのTracked Hand JointをPalm以外にも変更してみましたが、<br />
Unityでは同じタイミングでイベントが実行されました。<br />
<br />
Tracked Target Typeを<b><span style="color: red; font-size: large;">Head</span></b>、頭に戻して確認したところ<br />
手のひらが表示されたタイミングでは、<span style="color: red; font-size: large;"><b>OnHandActivateが実行され無い</b></span>結果となりました。
<br />
<br />
実機でどのように動くか、確認したい。。欲求が高まりましたが、<br />
おそらく、イベントの実行タイミングはUnity Editorの時と変わらないと考えるのが妥当です。
<br />
<br />
とりあえずUnity上で確認した動きを表にしてまとめました。<br />
<table border="0" cellspacing="0">
<colgroup width="194"></colgroup>
<colgroup width="231"></colgroup>
<colgroup width="199"></colgroup>
<colgroup width="200"></colgroup>
<tbody>
<tr>
<td align="left" bgcolor="#b2b2b2" height="36" style="border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; border-top: 1px solid #000000;"><span style="font-family: MS ゴシック;"><br /></span></td>
<td align="left" bgcolor="#b2b2b2" style="border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; border-top: 1px solid #000000;"><span style="font-family: MS ゴシック;">Solver Handler<br />Tracked Target Type </span></td>
<td align="left" bgcolor="#b2b2b2" style="border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; border-top: 1px solid #000000;"><span style="font-family: MS ゴシック;">手を表示した時の<br />イベント</span></td>
<td align="left" bgcolor="#b2b2b2" style="border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; border-top: 1px solid #000000;"><span style="font-family: MS ゴシック;">手のひらを<br />表示したときのイベント</span></td>
</tr>
<tr>
<td align="left" height="21" style="border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; border-top: 1px solid #000000;"><b><span style="color: black; font-family: MS ゴシック;">HandConstraint</span></b></td>
<td align="left" style="border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; border-top: 1px solid #000000;"><b><span style="color: black; font-family: MS ゴシック;">Head</span></b></td>
<td align="left" style="border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; border-top: 1px solid #000000;"><b><span style="color: black; font-family: MS ゴシック;">OnFirstHandDetected</span></b></td>
<td align="left" style="border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; border-top: 1px solid #000000;"><b><span style="color: black; font-family: MS ゴシック;">-</span></b></td>
</tr>
<tr>
<td align="left" height="35" style="border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; border-top: 1px solid #000000;"><b><span style="color: black; font-family: MS ゴシック;"><br /></span></b></td>
<td align="left" style="border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; border-top: 1px solid #000000;"><b><span style="color: black; font-family: MS ゴシック;">Hand Joint</span></b></td>
<td align="left" style="border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; border-top: 1px solid #000000;"><b><span style="color: black; font-family: MS ゴシック;">OnFirstHandDetected<br />OnHandActivate</span></b></td>
<td align="left" style="border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; border-top: 1px solid #000000;"><b><span style="color: black; font-family: MS ゴシック;">-</span></b></td>
</tr>
<tr>
<td align="left" height="21" style="border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; border-top: 1px solid #000000;"><b><span style="color: black; font-family: MS ゴシック;">HandConstraintPalmUp</span></b></td>
<td align="left" style="border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; border-top: 1px solid #000000;"><b><span style="color: black; font-family: MS ゴシック;">Head</span></b></td>
<td align="left" style="border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; border-top: 1px solid #000000;"><b><span style="color: black; font-family: MS ゴシック;">OnFirstHandDetected</span></b></td>
<td align="left" style="border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; border-top: 1px solid #000000;"><b><span style="color: black; font-family: MS ゴシック;">-</span></b></td>
</tr>
<tr>
<td align="left" height="21" style="border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; border-top: 1px solid #000000;"><b><span style="color: black; font-family: MS ゴシック;"><br /></span></b></td>
<td align="left" style="border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; border-top: 1px solid #000000;"><b><span style="color: black; font-family: MS ゴシック;">Hand Joint</span></b></td>
<td align="left" style="border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; border-top: 1px solid #000000;"><b><span style="color: black; font-family: MS ゴシック;">OnFirstHandDetected</span></b></td>
<td align="left" style="border-bottom: 1px solid #000000; border-left: 1px solid #000000; border-right: 1px solid #000000; border-top: 1px solid #000000;"><b><span style="color: black; font-family: MS ゴシック;">OnHandActivate</span></b></td>
</tr>
</tbody></table>
<b></b><i></i><u></u><sub></sub><sup></sup><strike></strike>
<br />
ちょっと自信が無いので、間違いがあったらご指摘ください。。<br />
よろしくお願いいたします。ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-11884011958817431392019-12-15T10:40:00.000+09:002019-12-15T10:40:12.098+09:00[HoloLens Advent Calendar 2019] 15日目 Mixed Realty Tookit Unity v2 Hand Trackingで、柔らかい仮想オブジェクトに触ってみるお疲れ様です。ZuQ9->Nnです。<br />
この記事は、HoloLens Advent Calendar 2019、15日目<br />
2019/12/15 の内容です。<br />
<br />
今回は、ネタ記事です。技術的にもアセットを使っているので<br />
あまりたいした内容ではありません。そして少しセンシティブな内容が含まれるので<br />
不愉快に思われる方は、記事を閉じてください。<br />
<br />
個人的にHoloLens 2の新しい機能で、一番気になるのがハンドトラッキングです。<br />
ハンドトラッキングで、今回は柔らかい仮想オブジェクトに触ってみましょう。。<br />
<br />
今回の環境は、Unity 2019.2.12f1 <br />
Microsoft Mixed Reality Toolkit v2.1.0(<a href="https://github.com/microsoft/MixedRealityToolkit-Unity/releases/tag/v2.1.0">Microsoft.MixedReality.Toolkit.Unity.Foundation.2.1.0.unitypackage</a>) を利用しました。<br />
<br />
まずは、適当な名前でUnityでプロジェクトを作成(僕はTestとしました。)<br />
Microsoft.MixedReality.Toolkit.Unity.Foundation.2.1.0.unitypackageをUnityにインポートします。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiveMmBUT7Xj1xyeIcvkKG43zaGVvzN88_utnRbS6KuFfsozja2XSN6fxaTUJ4vhyGGpuq4hXcdFF57aoRvdHspEseRvX99lj13U5_p2OHdoit2kGE3DPPazKLytwTcLcZe4f2lwiXnfGNC/s1600/import.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="726" data-original-width="437" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiveMmBUT7Xj1xyeIcvkKG43zaGVvzN88_utnRbS6KuFfsozja2XSN6fxaTUJ4vhyGGpuq4hXcdFF57aoRvdHspEseRvX99lj13U5_p2OHdoit2kGE3DPPazKLytwTcLcZe4f2lwiXnfGNC/s640/import.png" width="384" /></a></div>
<br />
Apply Mixed Reality Toolkit Default Settings?<br />
のダイアログが表示されますので、Applyを押します。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMOig3Xj2oBpSjtUc7G47nZ7AWrYtj-uy6o4Q86klwccLhybWO5LZVuU-MCKP5dLQ_firYvdUukxcmP-7N6IcE2_JL4FCD94lpNdmJ1JTChOr_8UUvRxvPhnm6TNq6mKQqVXYacehuhIIE/s1600/Apply2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="241" data-original-width="461" height="167" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMOig3Xj2oBpSjtUc7G47nZ7AWrYtj-uy6o4Q86klwccLhybWO5LZVuU-MCKP5dLQ_firYvdUukxcmP-7N6IcE2_JL4FCD94lpNdmJ1JTChOr_8UUvRxvPhnm6TNq6mKQqVXYacehuhIIE/s320/Apply2.png" width="320" /></a></div>
<br />
Unityのメニューに、Mixed Relaity Toolkitが表示されますので、<br />
そこから。Add to Scene and Configureを選びます。<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihlEuiJK7qy2Ok01f906DpikHCp410VGq5T7kUY9bnQjftezBvp_Gdtv8CENQaKU5I0skK7TODDfv_YoqaUduQISEZ1VBWh_Rw-rzv0iCs4HempZGus6V6f8ZujhTpMuUkFlTntZap_YLO/s1600/Toolkit.png" imageanchor="1"><img border="0" data-original-height="139" data-original-width="645" height="138" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEihlEuiJK7qy2Ok01f906DpikHCp410VGq5T7kUY9bnQjftezBvp_Gdtv8CENQaKU5I0skK7TODDfv_YoqaUduQISEZ1VBWh_Rw-rzv0iCs4HempZGus6V6f8ZujhTpMuUkFlTntZap_YLO/s640/Toolkit.png" width="640" /></a><br />
<br />
Select MixedRealityToolkitConfigurationProfileのダイアログが表示されます。<br />
こちらは、開発環境に合わせて選択しますが、今回は、とりあえず、<br />
DefaultMixedRealityToolkitConfigurationProfileを選択します<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0dySh2NoHSts1k_m0P49-VWnpj7wb02B90V6L0uw7Cx0FbSz5aHrGZdoB06ReC54tEmYXyR-Cqok4UUh6QSPUGc75FsmjOwZ7pc8jFw8cUj0s_r1X3SaWQcJFRkvuhzwnpGfx44siHWmG/s1600/Select.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="503" data-original-width="719" height="446" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0dySh2NoHSts1k_m0P49-VWnpj7wb02B90V6L0uw7Cx0FbSz5aHrGZdoB06ReC54tEmYXyR-Cqok4UUh6QSPUGc75FsmjOwZ7pc8jFw8cUj0s_r1X3SaWQcJFRkvuhzwnpGfx44siHWmG/s640/Select.png" width="640" /></a></div>
<br />
Hierarchyに、MixedRealityTookitとMixedRealityPlayspaceが自動追加されます<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikkzeXuWYok0TySy-xclJ3CP84mv-f_iQRcaNmtDin5dyOQqeSXJvpwzqx6CTaMmmBgbptv3d33u5hDx9M0WAgsa610dBUXGXxM-0y_1xdBeYPLAISB8x6874HEEa9GIyk7CEOjX0ZVvth/s1600/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-11-29+092158.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="573" data-original-width="897" height="408" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikkzeXuWYok0TySy-xclJ3CP84mv-f_iQRcaNmtDin5dyOQqeSXJvpwzqx6CTaMmmBgbptv3d33u5hDx9M0WAgsa610dBUXGXxM-0y_1xdBeYPLAISB8x6874HEEa9GIyk7CEOjX0ZVvth/s640/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-11-29+092158.png" width="640" /></a></div>
<br />
今回は、こちらの<a href="https://catlikecoding.com/unity/tutorials/mesh-deformation/">サイト</a>に公開されているアセットを利用します。
<br />
<blockquote class="embedly-card">
<h4>
<a href="https://catlikecoding.com/unity/tutorials/mesh-deformation/">Mesh Deformation, a Unity C# Tutorial</a></h4>
Making a Stress Ball Cast rays at objects and draw a debug lines. Convert forces to velocities for vertices. Maintain shape with springs and dampening. Compensate for object transformation. We start with a scene that has a single cube sphere object at its center.</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
サイトの一番下に、unitypackageのリンクがありますので、そちらをクリックしてダウンロード<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk00u1-4cLmMk4mtcrjPL8u91mDjGMsJDX8PD1cv6lVdydE9LVnvPAdDRpM6T2T386Tja4CuUVbpGHH7lSbqd5tAX4p_Yr0C0-wOBMV595w4vqQDnYHx24OFfUFQ_LwUa415G9YMosig9-/s1600/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-02+092402.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="671" data-original-width="1029" height="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhk00u1-4cLmMk4mtcrjPL8u91mDjGMsJDX8PD1cv6lVdydE9LVnvPAdDRpM6T2T386Tja4CuUVbpGHH7lSbqd5tAX4p_Yr0C0-wOBMV595w4vqQDnYHx24OFfUFQ_LwUa415G9YMosig9-/s640/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-02+092402.png" width="640" /></a></div>
<br />
dealing-with-transformations.unitypackageがダウンロードされますのでUnityにインポートを行います。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLufTf8FcJmfsNtmntJ0x4e0sH5njliyGZdspUyl6th-lZveXzc2IaVzIl1pJZsyAETZ92eHZqg3uxFndAsfTQV2LR8Yt8KvvWGrngwwnk9m4xDlO0MQ0B9OLg7XHltyqgQnhb9FkAI201/s1600/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-02+093347.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="723" data-original-width="433" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLufTf8FcJmfsNtmntJ0x4e0sH5njliyGZdspUyl6th-lZveXzc2IaVzIl1pJZsyAETZ92eHZqg3uxFndAsfTQV2LR8Yt8KvvWGrngwwnk9m4xDlO0MQ0B9OLg7XHltyqgQnhb9FkAI201/s640/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-02+093347.png" width="382" /></a></div>
<br />
HierarchyからCreate > 3DObject > Sphereを選択<br />
Sphereを見える位置に配置します。(僕は x : 0, y : 0, z:2に配置しました)<br />
<br />
HierarchyのSphereを選択、Inspectorを表示し、<br />
Add ComponentからMesh Defomerを選択アタッチします。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2xPJgxiwc0zFSQcGp3Wf1RB9aG2TKElGqJ6tFN0qWc7P6MQPZjNTuqZpZCyhPeknXhhhDtWOprSqoECdCT0NJTuZYCoZ0sNlUX8Nnbi51iN5oTj4zNnW1fNKGGDW4eToqMdIEtYqvlnHT/s1600/AddComponent.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="787" data-original-width="883" height="570" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2xPJgxiwc0zFSQcGp3Wf1RB9aG2TKElGqJ6tFN0qWc7P6MQPZjNTuqZpZCyhPeknXhhhDtWOprSqoECdCT0NJTuZYCoZ0sNlUX8Nnbi51iN5oTj4zNnW1fNKGGDW4eToqMdIEtYqvlnHT/s640/AddComponent.png" width="640" /></a>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYFLAlbkxH_WtTDmBKnRP_QZG3DqhyguL1V08gS7KpfOHo6rILHn-gHYP84tdxn2MXwTJ4DJo1ixENFmJDLhhLTYgb0WTLb8k3LYExhzK65fBYvTKGEEP1ptLjR0dvWVOCpEQ98W9XWgmx/s1600/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-02+100358.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="831" data-original-width="885" height="600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYFLAlbkxH_WtTDmBKnRP_QZG3DqhyguL1V08gS7KpfOHo6rILHn-gHYP84tdxn2MXwTJ4DJo1ixENFmJDLhhLTYgb0WTLb8k3LYExhzK65fBYvTKGEEP1ptLjR0dvWVOCpEQ98W9XWgmx/s640/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-02+100358.png" width="640" /></a></div>
続いて、SphereのInspectorをから、
Add ComponentでPointer Handlerを選択アタッチします。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi10DVqMccb1mow5Rbl7t8oaPJ7VnRt_Z3Ob05WkmNasbZzLMxX0ZuOmLgTGAkfNJeg8EA2ZmJJLsVYhZurPmf2ns6vUzaToHN4_ZPZYZzBfQIu6JYPRrB4E5bq6_O2QMkHLvF6zk02DJY2/s1600/pointer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="594" data-original-width="976" height="388" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi10DVqMccb1mow5Rbl7t8oaPJ7VnRt_Z3Ob05WkmNasbZzLMxX0ZuOmLgTGAkfNJeg8EA2ZmJJLsVYhZurPmf2ns6vUzaToHN4_ZPZYZzBfQIu6JYPRrB4E5bq6_O2QMkHLvF6zk02DJY2/s640/pointer.png" width="640" /></a></div>
<br />
続いて、SphereのInspectorをから、
Add ComponentでNew Scriptを選択スクリプトを追加。<br />
スクリプト名は、特に何でもいいのですが、今回はSphereBounceとしました。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF6bSwY8AG2zRWiHj0iiIoj4tPmLi_UxjSNaIWrCO42MXeD_TPi_ojuc30Gah_ABf72fKCmE9E_HrJF9KzbiY0twsGOOSvzFU7prAYybDOMwiiX2l67TKCAnQX0cfRKX3drNjBIIesNa3t/s1600/NewScprit.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="869" data-original-width="959" height="578" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgF6bSwY8AG2zRWiHj0iiIoj4tPmLi_UxjSNaIWrCO42MXeD_TPi_ojuc30Gah_ABf72fKCmE9E_HrJF9KzbiY0twsGOOSvzFU7prAYybDOMwiiX2l67TKCAnQX0cfRKX3drNjBIIesNa3t/s640/NewScprit.png" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh0o96tP6BjQW0ppa3ZYwb0uuOt2TK2k35XzIHhWP45wJS6AMzp9IdE3rxw_JzhN58jWVyAM2V-fvdw67ffvOjbrmKWa0KYVFh5uemGOxoomC34TboRLM0zNmVZEAVcgJMopkx7Qs5SKhv/s1600/Scriptpng.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="788" data-original-width="969" height="520" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh0o96tP6BjQW0ppa3ZYwb0uuOt2TK2k35XzIHhWP45wJS6AMzp9IdE3rxw_JzhN58jWVyAM2V-fvdw67ffvOjbrmKWa0KYVFh5uemGOxoomC34TboRLM0zNmVZEAVcgJMopkx7Qs5SKhv/s640/Scriptpng.png" width="640" /></a></div>
<br />
SphereBounceのコードはこんな感じになります。<br />
<script src="https://gist.github.com/ZuQ9Nn/0a8366ad6c4fc7727be8893d8e670281.js"></script>
SphereのInspectorをからPointer Handlerの<br />
On Pointer Draggedの + ボタンを押し<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9sxytPNgsOqFbnWOTmCWadXxuvV01MQyE7IwXRGTG4F4FjlF8CVcaTEaNquhKPeKj109chu7lY7mpLtsvwa2rJg_YSAmdy3YlR6k8cKx_9Fyilbxvpvwy0A7a0WUzzDVUvfYcknp4Xd7U/s1600/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-03+161315.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="816" data-original-width="962" height="542" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh9sxytPNgsOqFbnWOTmCWadXxuvV01MQyE7IwXRGTG4F4FjlF8CVcaTEaNquhKPeKj109chu7lY7mpLtsvwa2rJg_YSAmdy3YlR6k8cKx_9Fyilbxvpvwy0A7a0WUzzDVUvfYcknp4Xd7U/s640/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-03+161315.png" width="640" /></a></div>
<br />
HierarchyからShpereをInspectorのPointer Handler、<br />
On Pointer Draggedにドラッグしてアタッチします。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbEoVnQ8vzNxVkE_WDEciiJ-f642suIf3sWVTliZHCQ9SVMzfj4tkAFdKCKITXlvYdxvSafIK4pEC7rBmn0DQh1wPypYo-WBatLv3SWb8Gf1g4pxZa_LcdteVkS1MG4iyyDeFpKnNF2zNd/s1600/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-03+161156.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="823" data-original-width="946" height="556" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbEoVnQ8vzNxVkE_WDEciiJ-f642suIf3sWVTliZHCQ9SVMzfj4tkAFdKCKITXlvYdxvSafIK4pEC7rBmn0DQh1wPypYo-WBatLv3SWb8Gf1g4pxZa_LcdteVkS1MG4iyyDeFpKnNF2zNd/s640/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-03+161156.png" width="640" /></a></div>
<br />
SphereのInspector、Pointer Handler、 On Pointer Draggedから<br />
No Founctionのドロップダウンを開いて。<br />
SphereBounse > Boundを選択します。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiniC1j3Vp0aMa1jJpmjaMOfzd9MlcXMZW_pypi4VCXj2B9sD73Qsf6eOILjDwNCzQGirgZm1x5O1f9M253VyunOGM5AzGK4hU6mRnCuhk3JU08S8xcH2TrvC3C_QR3yYrbCQVEQnHjlIkK/s1600/bound.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="714" data-original-width="762" height="598" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiniC1j3Vp0aMa1jJpmjaMOfzd9MlcXMZW_pypi4VCXj2B9sD73Qsf6eOILjDwNCzQGirgZm1x5O1f9M253VyunOGM5AzGK4hU6mRnCuhk3JU08S8xcH2TrvC3C_QR3yYrbCQVEQnHjlIkK/s640/bound.png" width="640" /></a></div>
Unity Editorを実行し、Shiftボタンを押しながら指を表示<br />
クリックしながら動かすとこんな感じで動きます。<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dyMTCw-Jf7xahCcmPU31O7mZRhc-povUOViU2QmVcLfXOmQboV_s4_TGJBX5N9AlcxaUwHAX5ElPI69AsP_NQ' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div>
<br />
ちょっと、パラメータを調整してみたんですが<br />
残念ながら、あんまり思った感じのプルプル感は得られませんでした。。 orz..<br />
<br />
この辺りは、別のアセットを検討したほうがいいかもしれませんね。<br />
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー<br />
HoloLens 2のタッチに対応させてみる。<br />
上記は現状のHoloLensの実機のAir Tapでも動くように<br />
Pointer Handlerを利用しました。<br />
<br />
HoloLens 2ではハンドトラッキングのタッチも検出できます。<br />
一応、そちらでも動くように対応させてみたいと思います。<br />
なので、その対応が不要な人は読み飛ばしてください。<br />
<br />
SphereのInspectorのAdd Componentで<br />
Near Interaction Touchable Volumeをアタッチします。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3ymAQNB8VPUEseqPEjk_ku0t4v8_VECOcFmk5peerNVf0VU7X4jlthZcz8Sjok8Wg4yc-8D2Bp_BAJB0fppXPJH7O5VAJXDMfj8yaao2kiCCt38dKLZY7RKeNrWMES-66cz_fS_SGNAaP/s1600/Near.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="789" data-original-width="817" height="618" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg3ymAQNB8VPUEseqPEjk_ku0t4v8_VECOcFmk5peerNVf0VU7X4jlthZcz8Sjok8Wg4yc-8D2Bp_BAJB0fppXPJH7O5VAJXDMfj8yaao2kiCCt38dKLZY7RKeNrWMES-66cz_fS_SGNAaP/s640/Near.png" width="640" /></a></div>
つづいて、SphereのInspectorのAdd Componentで<br />
Touch Handlerをアタッチします。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvwVhdVTCLK6sMYiWfX_qZvY44DLHJpMrF8uL7y_ZUDhu4fPDZrzO0tAMSrCkYCNYjZtq2coOhLVIjjVrg_oy6Xk_vX1qDFox6MtBRu8Aso3Nm3SeRQL6N3BAlPZQp3wuwBXm9CHoLdBlN/s1600/touch.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="698" data-original-width="813" height="548" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjvwVhdVTCLK6sMYiWfX_qZvY44DLHJpMrF8uL7y_ZUDhu4fPDZrzO0tAMSrCkYCNYjZtq2coOhLVIjjVrg_oy6Xk_vX1qDFox6MtBRu8Aso3Nm3SeRQL6N3BAlPZQp3wuwBXm9CHoLdBlN/s640/touch.png" width="640" /></a></div>
<br />
SphereのInspector、Touch HandlerのOn Touch Updatedの + ボタンをクリック<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm2gVtUkXP1PS-CXiBnVsXXxg9BshJOa4zOWkogTrFLfJ68fh1r6ojbXPiqg460Gy03qs14LEtNq9cVWKd3GoQ1GSXPL934H-wHL9gqfHZwZ8_AwD19hkvHcnpZkpzCIHVn9WtxxSm2FKB/s1600/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-03+174315.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="828" data-original-width="792" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhm2gVtUkXP1PS-CXiBnVsXXxg9BshJOa4zOWkogTrFLfJ68fh1r6ojbXPiqg460Gy03qs14LEtNq9cVWKd3GoQ1GSXPL934H-wHL9gqfHZwZ8_AwD19hkvHcnpZkpzCIHVn9WtxxSm2FKB/s640/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-03+174315.png" width="612" /></a></div>
<br />
HierarchyからShpereを Inspector、<br />
Touch HandlerのOn Touch Updatedにドラッグしてアタッチします。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKeLYKgpPTsbIm643r8OSEz5DjFA9lIGxLdzhdj3m67AthzrMtuuiyRxC2knQrgH58kD9s1hIBTCWDu3iQo3XbDLafopsiWH3DTt2d_mAvw8HWp3SmW56R0K15Cik2PEDxF_El2-m6vevc/s1600/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-03+174713.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="819" data-original-width="786" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKeLYKgpPTsbIm643r8OSEz5DjFA9lIGxLdzhdj3m67AthzrMtuuiyRxC2knQrgH58kD9s1hIBTCWDu3iQo3XbDLafopsiWH3DTt2d_mAvw8HWp3SmW56R0K15Cik2PEDxF_El2-m6vevc/s640/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-12-03+174713.png" width="614" /></a></div>
<br />
SphereBounceのコードに、タッチで反応したときの動作のメソッドBoundTouchを追記します。<br />
SphereBounceのコードは、こんな感じになります。<br />
<script src="https://gist.github.com/ZuQ9Nn/fe4a84b23a3e1b408738d400cc6ad98d.js"></script>
SphereのInspector、<br />
Touch HandlerのOn Touch Updatedから
No Founctionのドロップダウンを開いて。
SphereBounse > BoundTouchを選択します。
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPkpg4TKXPvK5GRPn071F6rPs1FKsi4AVZR7SkIS1zO87GFaDxfkLCN65_MeUJJF4NG2aAA6pjN_DKYJHDTZXCGmYCdonQgkBvf1VNZ09xHxu45X1S306lhDmPvy-ty8P9vrwe_lUqaEKx/s1600/%25E7%2584%25A1%25E9%25A1%258C.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="789" data-original-width="1137" height="444" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPkpg4TKXPvK5GRPn071F6rPs1FKsi4AVZR7SkIS1zO87GFaDxfkLCN65_MeUJJF4NG2aAA6pjN_DKYJHDTZXCGmYCdonQgkBvf1VNZ09xHxu45X1S306lhDmPvy-ty8P9vrwe_lUqaEKx/s640/%25E7%2584%25A1%25E9%25A1%258C.png" width="640" /></a></div>
設定は以上でおわりです。Unity Editorを実行<br />
Shiftボタンを押しながら指を表示、今度は、クリックせずそのまま、Shpereに近づけます。<br />
こんな感じで動きます。<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dz1dHFUrPPkzwlRqJjzuAONN-8GPRTjzByT_xgUf0MaLZGGIEc2lAXi91dtXUbVsjEUr78EZn0Xz_rqsHxQxg' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div>
<span style="background-color: white; color: black; display: inline; float: none; font-family: "times new roman"; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー</span><br />
流石に、これだけだと、あまりにネタすぎるのでソースコードの解説を行います。<br />
<br />
1) Shpereを揺らしているMeshDeformer.csについて。<br />
Unity C# Tutorialsのサイト<a href="https://catlikecoding.com/unity/tutorials/mesh-deformation/">Mesh Deformation</a> にも実装が記述されていますが、<br />
MeshFilterを取得して、ポリゴンそのものを変形させることによって、凹んだ表現をおこなっています。<br />
<br />
2) クリック動作を扱うPointerHandler.csについて。<br />
こちらは、MixedRealityToolkit-Unityで提供されています。<br />
MonoBehaviourを継承しているため、Inspectorからセットできるようになっています。<br />
IMixedRealityPointerHandlerがイベントを扱います。<br />
OnPointerDown(MixedRealityPointerEventData eventData); // クリックポインターを下げたとき<br />
OnPointerDragged(MixedRealityPointerEventData eventData); // ドラッグされたとき<br />
OnPointerUp(MixedRealityPointerEventData eventData); // クリックポインターを挙げたとき<br />
OnPointerClicked(MixedRealityPointerEventData eventData); // クリックが押されたとき
このイベントがUnityのInspectorからセットできるようになっています。<br />
<br />
3) タッチ可能にする NearInteractionTouchableVolume.cs<br />
こちらも、MixedRealityToolkit-Unityで提供されています。<br />
実は、よく似た名前の NearInteractionTouchable.csと言うスクリプトも存在します。<br />
NearInteractionTouchable.csでは、Shpere Colliderには反応しませんでした。(SetTouchableColliderメソッドの引数がBoxColliderになっているから??)<br />
間違えないようにNearInteractionTouchableVolume.csをアタッチしてください。
<br />
4) タッチ動作を扱う TouchHandler.cs<br />
こちらも、MixedRealityToolkit-Unityで提供されています。<br />
こちらもMonoBehaviourを継承しているため、Inspectorからセットできるようになっています。<br />
IMixedRealityTouchHandlerがイベントを扱い<br />
OnTouchStarted(HandTrackingInputEventData eventData); // タッチ開始<br />
OnTouchUpdated(HandTrackingInputEventData eventData); // タッチで移動中<br />
OnTouchCompleted(HandTrackingInputEventData eventData); // タッチ終了<br />
こちらのイベントもUnityのInspectorからセットできるようになっています。<br />
上記の NearInteractionTouchableVolume.csをアタッチしていないと、検出されませんでした。<br />
5) 自作した SphereBounse.cs <br />
Bound(MixedRealityPointerEventData eventData)<br />
クリックで反応するメソッド、今回は、クリックされている間はずっと反応させたかったので<br />
OnPointerDraggedの時に呼び出しました。<br />
ポイントは引数のMixedRealityPointerEventData で、<br />
IMixedRealityPointerHandlerのOnPointerDragged(MixedRealityPointerEventData eventData);の
引数をそのまま渡すことができます。<br />
eventData.Pointer.BaseCursor.Positionでカーソルの場所がVector3で取得できます。<br />
BoundTouch(HandTrackingInputEventData eventData)<br />
タッチで反応するメソッド、今回は、タッチされている間はずっと反応させたかったので<br />
OnTouchUpdatedの時に呼び出しました。<br />
IMixedRealityTouchHandlerのOnTouchUpdated(HandTrackingInputEventData eventData);の
引数をそのまま渡すことができます。<br />
<br />
もちろん、自作のメソッドでIMixedRealityPointerHandler、IMixedRealityTouchHandlerをそれぞれ実装することも可能なのですが<br />
実装したいイベントの後に、どのような処理をしたいか?に集中したほうがコードは短くなりますので、今回はこの実装をおこないました。<br />
<br />
これ系のネタは、ほかの人もやっているんじゃないかと捜したところ<br />
QiitaではUnityで3記事みつかりました。
。。。<br />
ってか。もろ、<a href="https://qiita.com/tags/おっぱい">タグ</a>が切られていてたww。<br />
<br />
Clothで実装しているのが2記事<br />
<blockquote class="embedly-card">
<h4>
<a href="https://qiita.com/AzuQiita/items/664f103f0dbd4adbcaca">UnityのClothを使っておっぱいを作る - Qiita</a></h4>
Unityでゲームの制作をしているのですがキャラクターモデルのおっぱいを揺らしたいという話になりました。 胸にボーンがなく諸事情により増やすことも難しかったのでどうしたもんかなと思っていたところ UnityのCloth(布のシミュレーション)を使えば擬似的におっぱいを作れそうだなと思ったのでやって見ることにしました。 最終的にはこんな感じになりました まず今回使用する 被害者モデルがこちら ...</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
<br />
<blockquote class="embedly-card">
<h4>
<a href="https://qiita.com/yunagi_nagi/items/8139e9f41ae55af37d54">【Unity】おっぱいを揺らして触る技術【VR】 - Qiita</a></h4>
どうも、趣味でVRゲームを作ってるおっぱい大好きエンジニアです。 その製作中におっぱいの動きで悩んだところがありました。 他のおっぱい大好きなゲームエンジニアのためにも、 どのようにおっぱいの実装をしたのか残そうというコンセプトです。 「おっぱい」ってタグあるのね 結果として次のような動きができるようになりました。 揺れるおっぱい上げときますね ...</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
Rigitody、Spring Jointで実装しているのが1記事<br />
<blockquote class="embdly-card">
<h4>
<a href="https://qiita.com/tashima_toru/items/9ea96a8fd7e5793329a4">Unityでおっぱいを揺らす - Qiita</a></h4>
これはマイネットエンターテイメント Advent Calendar 7日目の記事です。 ふと揺れるおっぱいが見たい気持ちになったのですが、MayaやLive2Dを買うお金がないので気合いで作りました。 Unity (4.x or 5.x 無料版でおk) おっぱい素材 Rigitbodyコンポーネントだけのオブジェクト。 停止してほしいので、RigitodyのUse Gravityはオフ、Constraintsは全部チェックつける。 Spring Jointコンポーネントを追加し、Connected Bodyに「1つめ」のオブジェクトを指定。それ以外の値は適当です。 RigitbodyのMassを小さめにしています。 基本的に2つめのSpring Jointと同じです。 Connected Bodyに「2つめ」のオブジェクトを指定。 RigitbodyのMassを調整していい感じにばいんばいんするようにする(*´Д`) コツとしては、 Springを大きめにすると激しくなって楽しい Damperを0にしないと停止してしまう Max Distanceは小さすぎず、大きすぎず・・・ Mathでばいんばいん具合を調整 こんな感じになれば、ほら、楽しそうな予感が( ˆωˆ) Mesh Rendererは確認用なので、あってもなくてもおkです。 犠牲者 インポート設定は特に不要です。 空気を読んでそれっぽいものを作成 インポート設定でTexture Type「Normal map」 Create from Grayscaleにチェックをつけるといい感じにノーマルマップを作成できます。 マスクはアルファチャンネルを使用するので、Photoshopで↓こんな感じになっていないとダメです。(RGBチャンネルは使用しないので無しでおk) インポート設定は特に不要です。 マスクのアルファチャンネルを使ってテクスチャーを動かします。 ノーマルマップは設定しなくても大丈夫ですが設定したほうが影ができて興奮できます。 Shader "pai" { Properties { _Color ( "Main Color" , Color ) = ( 1 , 1 , 1 , 1 ) _Parallax ( "Height" , Range ( 0 .</blockquote>
<br />
<br />
<div style="text-align: center;">
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script><b><span style="font-size: x-large;">
あんたも好きねぇ。。</span></b>
</div>
<br />
<br />
本当はHoloLens 2の実機が届いてたら実機で動かしたかったんですが。<br />
残念ながら実機確認はできていません。ビルドして、 HoloLens 2のエミュレータでは動くのを確認しました。
<br />
<br />
<div style="text-align: center;">
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script><b><span style="font-size: x-large;">
多分 HoloLens 2実機でも動くと思うよ。。</span></b>
</div>
ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-48192492990124391682019-12-08T10:45:00.000+09:002019-12-08T15:39:18.636+09:00[HoloLens Advent Calendar 2019] 8日目 Mixed Realty Tookit Unity v2 Spatial AwarenessのMeshをUnity Editor上で出す方法お疲れ様です。ZuQ9->Nnです。<br />
この記事は、HoloLens Advent Calendar 2019、8日目<br />
2019/12/08 の内容です。<br />
<br />
Mixed Realty Tookit Unity v2(以下MRTKv2)が正式にリリースされて結構時間が経ってしまいました。<br />
MRTKv2は、以前のHoloToolkitと比べて、かなり変更がされていて、非常に内容も多く、<br />
今まで、出来ていたことも、ん?どこいった?という迷いが多くなりました。<br />
<br />
Spatial Awarenessもその一つです。以前のToolkitではSpatial Mappingとよばれていました。<br />
特にUnity Editor上でメッシュが表示できていたのですが、MRTKv2ではどうやるんだ?と、ずっと疑問に思っていました。<br />
しかし、なんと実は、Microsoftの公式のドキュメントに、キッチンと書いてありました。。orz..<br />
その記事がこちら。。
<br />
<blockquote class="embedly-card">
<h4>
<a href="https://microsoft.github.io/MixedRealityToolkit-Unity/Documentation/SpatialAwareness/SpatialObjectMeshObserver.html">Configuring Mesh Observers for Editor</a></h4>
A convenient way to provide environment mesh data in the Unity editor is to use the SpatialObjectMeshObserver class. The Spatial Object Mesh Observer is an editor-only data provider for the Spatial Awareness system that enables importing 3D model data to represent a spatial mesh.</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script><br />
単純に、記事が日本語になっておらず、読み飛ばしてしまっていただけですね。。<br />
現在、日本語化も進められているようですが、同じように、読み飛ばしている人もいそう<br />
<br />
なので、改めて、僕のほうで、手順をまとめてみました。<br />
今回の僕のためした環境は、Unity 2019.2.12f1 <br />
Microsoft Mixed Reality Toolkit v2.1.0(<a href="https://github.com/microsoft/MixedRealityToolkit-Unity/releases/tag/v2.1.0">Microsoft.MixedReality.Toolkit.Unity.Foundation.2.1.0.unitypackage</a>) を利用しました。<br />
まずは、適当な名前でUnityでプロジェクトを作成(僕はTestとしました。)<br />
Microsoft.MixedReality.Toolkit.Unity.Foundation.2.1.0.unitypackageをUnityにインポートします。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdruZn23xGh-Cu_apcrAvhC72KRL09xY1NyR2byfcGohj75xy6EY9QMZ5LdvxSHyHyEtx1iR85oKBcHuC6jGonNmBF33Ps-lteEX5uF4LE4snUTRGwoZOyZwqgu8jJ2G1fm_cNBVAPoGHd/s1600/MRTKv2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="738" data-original-width="467" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdruZn23xGh-Cu_apcrAvhC72KRL09xY1NyR2byfcGohj75xy6EY9QMZ5LdvxSHyHyEtx1iR85oKBcHuC6jGonNmBF33Ps-lteEX5uF4LE4snUTRGwoZOyZwqgu8jJ2G1fm_cNBVAPoGHd/s640/MRTKv2.png" width="403" /></a></div>
Apply Mixed Reality Toolkit Default Settings?<br />
のダイアログが表示されますので、Applyを押します。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHxCzBX6K9b6eVdNw8C_pkYHpy0XxU6b6-ELe0_umaF4fRF60DfBqcJVFT6zUILG4Z99khyphenhyphenzkLN8WpmlS8WkOSL5ZvDe-1I80Xka_jZaKftWl-ARyyh58V5XzMOZ8pdiR0YPwpi37z45qW/s1600/SettingDialog.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="280" data-original-width="482" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHxCzBX6K9b6eVdNw8C_pkYHpy0XxU6b6-ELe0_umaF4fRF60DfBqcJVFT6zUILG4Z99khyphenhyphenzkLN8WpmlS8WkOSL5ZvDe-1I80Xka_jZaKftWl-ARyyh58V5XzMOZ8pdiR0YPwpi37z45qW/s320/SettingDialog.png" width="320" /></a></div>
<br />
Unityのメニューに、Mixed Relaity Toolkitが表示されますので、<br />
そこから。Add to Scene and Configureを選びます。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTeoswGkqCK7nUOtaeqGzc5v15WMDU74xtZ_Szx4QUQqScl9cGdddJ-payfN6GkTbU0FqLv7kTNwJ_Mpr2T6JoiytvL1jdCndQjv0mgF74yomtlj8ZYdO0brfGyjHEPqqPXFgBWli0WwVE/s1600/menu.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="262" data-original-width="668" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTeoswGkqCK7nUOtaeqGzc5v15WMDU74xtZ_Szx4QUQqScl9cGdddJ-payfN6GkTbU0FqLv7kTNwJ_Mpr2T6JoiytvL1jdCndQjv0mgF74yomtlj8ZYdO0brfGyjHEPqqPXFgBWli0WwVE/s640/menu.png" width="640" /></a></div>
Select MixedRealityToolkitConfigurationProfileのダイアログが表示されます。<br />
こちらは、開発環境に合わせて選択しますが、今回は、<br />
DefaultMixedRealityToolkitConfigurationProfileを選択します<br />
<span style="color: red;">* ちなみに、DefaultHololens1ConfigurationProfile、</span><br />
<span style="color: red;">DefaultHololens2ConfigurationProfileでも行いましたが、</span><br />
<span style="color: red;">残念ながら、同じ作業を行ってもUnity Editor上では表示されませんでした。</span><br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmIrXdTqFmrFe6ndDzwAUky_Ig4b4p9a6ZyQMNLoMvsPZbEtlB267nSMIXEemkOFOhQ4zATkWUYClA4HlN9jAjjyW9XJIMk7w6heGGON8VbOybxa3n1bvJz570GdQvgOFzCSImxGV3LDom/s1600/SelectConfig.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="528" data-original-width="716" height="470" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmIrXdTqFmrFe6ndDzwAUky_Ig4b4p9a6ZyQMNLoMvsPZbEtlB267nSMIXEemkOFOhQ4zATkWUYClA4HlN9jAjjyW9XJIMk7w6heGGON8VbOybxa3n1bvJz570GdQvgOFzCSImxGV3LDom/s640/SelectConfig.png" width="640" /></a></div>
<br />
Hierarchyに、MixedRealityTookitとMixedRealityPlayspaceが自動追加されますので、<br />
MixedRealityTookitを選択、InspectorのCopy & Customizeボタンを押します。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVfMoi3L70xHpqAyTC64oDOMjjP_4zoNYhIdsZrxT9PtlYpAxggyMLeGaaQ542737wtPr9laLLJR1L0a3JLYcm6OyvrC38AZfPdDSkTtDEwAAB1K0LS-yEEc-rgFSoiFveoov7T_R_j8iX/s1600/ToolkitProfile.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="617" data-original-width="946" height="416" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVfMoi3L70xHpqAyTC64oDOMjjP_4zoNYhIdsZrxT9PtlYpAxggyMLeGaaQ542737wtPr9laLLJR1L0a3JLYcm6OyvrC38AZfPdDSkTtDEwAAB1K0LS-yEEc-rgFSoiFveoov7T_R_j8iX/s640/ToolkitProfile.png" width="640" /></a>
</div>
Cone Profileのダイアログが表示されます。Profile Nameを指定して<br />
Cloneボタンを押します。Profile Nameは内容に合わせて決めてください。<br />
今回は、TestMixedRealityToolkitConfigurationProfileとしました。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPxM5ukIFxJ89k9vaOUDfkwe78NhnU4Y9AgqJhnlACL3qJZyca1gZeeKN-BtCfFMljZ6nvmb49GTsweQzzwOH9q0C3dVaXWwvE6bSopbi27qOXNswTMCoWAxKXfL0vpOpXkxccliCVZ5OS/s1600/CustomToolkitProfile.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="266" data-original-width="623" height="272" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPxM5ukIFxJ89k9vaOUDfkwe78NhnU4Y9AgqJhnlACL3qJZyca1gZeeKN-BtCfFMljZ6nvmb49GTsweQzzwOH9q0C3dVaXWwvE6bSopbi27qOXNswTMCoWAxKXfL0vpOpXkxccliCVZ5OS/s640/CustomToolkitProfile.png" width="640" /></a></div>
<br />
Active ProfileがTestMixedRealityToolkitConfigurationProfileに切り替わっているのを確認し<br />
Spatial Awarenessを選択、DefaltMixedSpatialAwarenessSytemProfilの横のCloneボタンを押します。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWV-Jq3__PjUmEOB5Kb1-gORz85ZBbxI988-L5DoNAihoy08fh3k6WUu1sVnxvQ08t1TzYZdL9KytN6q_13D3QqSGrGegiti3vzEn4f1Vj2oQ-mGIKkW9tX-RHfhKg8qIkcupSniABhiLh/s1600/ActiveProfile.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="814" data-original-width="924" height="562" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWV-Jq3__PjUmEOB5Kb1-gORz85ZBbxI988-L5DoNAihoy08fh3k6WUu1sVnxvQ08t1TzYZdL9KytN6q_13D3QqSGrGegiti3vzEn4f1Vj2oQ-mGIKkW9tX-RHfhKg8qIkcupSniABhiLh/s640/ActiveProfile.png" width="640" /></a></div>
<br />
Spatial Awareness用のCone Profilダイアログが表示されます。Cloneボタンを押します。<br />
Profile Nameは内容に合わせて決めてください。<br />
今回は、TestSpatialAwarenessSystemProfileとしました。
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQKZof-JSKS6kZ9zVLx8AAoBvVcuJ-Hi3x2TzRSVBo4ZpyXnvjZuSCKM3CEJK7DBtJoL8SseWa3oWigo_dhQrhIWTbS4ZaWPsnevQnZUketnsMBzZZJtMZPW7OaBAtaeHCsQYK0fORWviK/s1600/CustomSpatialToolkitProfile.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="260" data-original-width="621" height="266" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQKZof-JSKS6kZ9zVLx8AAoBvVcuJ-Hi3x2TzRSVBo4ZpyXnvjZuSCKM3CEJK7DBtJoL8SseWa3oWigo_dhQrhIWTbS4ZaWPsnevQnZUketnsMBzZZJtMZPW7OaBAtaeHCsQYK0fORWviK/s640/CustomSpatialToolkitProfile.png" width="640" /></a></div>
TestMixedRealitySpatialAwarenessSystemProfileに切り替わっているのを確認し<br />
Mixed Reality Spatial Mesh Observerの三角マークをクリックして展開します。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT05Thd-w48rvvp4NyoZY9NSkEqueOAV4zNnQBp0qyC2sfDHb5trIHMIS1ZkWxKBQVuXFXrg1sSi2bDS-31dwI2TLBuvwvBPIJNNfr99fjkz11ZPAt_RAw38ukNlJsBSZKCncLYVvdoqKa/s1600/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-11-26+103234.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="753" data-original-width="1137" height="422" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT05Thd-w48rvvp4NyoZY9NSkEqueOAV4zNnQBp0qyC2sfDHb5trIHMIS1ZkWxKBQVuXFXrg1sSi2bDS-31dwI2TLBuvwvBPIJNNfr99fjkz11ZPAt_RAw38ukNlJsBSZKCncLYVvdoqKa/s640/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-11-26+103234.png" width="640" /></a></div>
<br />
展開した、Windows Mixed Reality Spatial Mesh Observerの<br />
TypeのドロップダウンからWindows.MixedReality.Toolkit.SpatialObjectMeshObserver > SpatialMeshObserverを選択してセットします。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjECaifr_SO-3v7TUKbf9gLToPmBOPq3T_RAcjO9TLcDBRF2XgOt9FGFmf3c_Z79Ax79dO9vDQVz-lcAsIr0JuY2RhD_g1XT5k1fFWcZMreTbensW8Kt_ilyAFskTjv4vqouDSZwVNSJBGi/s1600/selectspatialobjectmesh.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="786" data-original-width="1112" height="452" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjECaifr_SO-3v7TUKbf9gLToPmBOPq3T_RAcjO9TLcDBRF2XgOt9FGFmf3c_Z79Ax79dO9vDQVz-lcAsIr0JuY2RhD_g1XT5k1fFWcZMreTbensW8Kt_ilyAFskTjv4vqouDSZwVNSJBGi/s640/selectspatialobjectmesh.png" width="640" /></a></div>
設定は以上で、Unityの実行ボタンを押すとUnity Editorでメッシュが表示確認を行うことができます。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjt9pF35Q1vhJReHR0XOWSURfVBk4VCM7rAjAcYKqXYns3T-8ls-N62Me0bGK3xxdQYy47lxWCKX40ai7a_OSQQLYm7FxHZdQN7boG7GpQNv8uaginD1FUb-g3Ewrxfegn1NRZCnn_Y2pfy/s1600/Test.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="816" data-original-width="1276" height="408" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjt9pF35Q1vhJReHR0XOWSURfVBk4VCM7rAjAcYKqXYns3T-8ls-N62Me0bGK3xxdQYy47lxWCKX40ai7a_OSQQLYm7FxHZdQN7boG7GpQNv8uaginD1FUb-g3Ewrxfegn1NRZCnn_Y2pfy/s640/Test.png" width="640" /></a></div>
確認した範囲内では特にUnityのSwitch PratformでUnivaersal Windows Platformに<br />
切り替える必要もありませんでした。<br />
<br />
MRTKv2では、Prefabを置くのではなく、各設定のProfileを<br />
Cloneしてカスタマイズしていくオペレーションに大きく変わりました。<br />
かなり慣れが必要になるかと思いますが、何度か繰り返して覚えなおすしかないと思います。<br />
<br />
-----------------------------------------------------------------------------------------------------------------------<br />
ここからの内容は表示されているメッシュをさらにカスタマイズしたい場合で<br />
表示して確認したいだけの人は読み飛ばしてください。<br />
<br />
メッシュの表示をカスタマイズする場合は、<br />
DefultObjectMeshObserverProfileの横のCloneボタンをクリック<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE1cxSV8hUcmBPHpQZkolZ8xUnvj05DbKBnpmZF7IPYxQGabEjTsUvOnzdqLaaJxlAMlKxJU58SCBReRzePG6dvKwIu93ZdKajPVZe1eC3H-YS8URP5Ew8rSVfavA2-8fHeG34dBEOhOvK/s1600/MeshOberverProfile.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="791" data-original-width="688" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjE1cxSV8hUcmBPHpQZkolZ8xUnvj05DbKBnpmZF7IPYxQGabEjTsUvOnzdqLaaJxlAMlKxJU58SCBReRzePG6dvKwIu93ZdKajPVZe1eC3H-YS8URP5Ew8rSVfavA2-8fHeG34dBEOhOvK/s640/MeshOberverProfile.png" width="556" /></a></div>
<br />
Clone Profileのダイアログが表示されるので、
DefultObjectMeshObserverProfileの横のCloneボタンをクリック、Profile Nameを指定してCloneボタンを押します。<br />
Profile Nameは内容に合わせて決めてください。<br />
今回は、TestSpatialObjectMeshObserverProfileとしました。
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0iZaU5KzwgmEcAKqbpOM0b-Q-d2j53fNW0NDYxzinCT2uqnJxlQFN_dkP64SIQSq1aB4lqwnR80cbpD5rNVoX9WKCc_2F3PcHYsOXThyphenhypheng5PMa9700apOlprqVGPVOa9Bp17-AJSehY90y/s1600/CloneProfile.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="263" data-original-width="623" height="270" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0iZaU5KzwgmEcAKqbpOM0b-Q-d2j53fNW0NDYxzinCT2uqnJxlQFN_dkP64SIQSq1aB4lqwnR80cbpD5rNVoX9WKCc_2F3PcHYsOXThyphenhypheng5PMa9700apOlprqVGPVOa9Bp17-AJSehY90y/s640/CloneProfile.png" width="640" /></a></div>
<br />
TestSpatialObjectMeshObserverProfileに切り替わっているのを確認し<br />
Visual Materialの横のボタンをクリックします。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoAUV2AYeRmphXzvVa1swDoiKb00tVnngFRekBbLmTydmA591i870MVUrDDIsKSkAdERNHH634r1oj73IHJwswgkjZpIlSlVJx_ax93Ri8Z5CBCwzgLx57T-g0UXBjCOa_NW6j3MzL0qsw/s1600/Display.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="797" data-original-width="981" height="518" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoAUV2AYeRmphXzvVa1swDoiKb00tVnngFRekBbLmTydmA591i870MVUrDDIsKSkAdERNHH634r1oj73IHJwswgkjZpIlSlVJx_ax93Ri8Z5CBCwzgLx57T-g0UXBjCOa_NW6j3MzL0qsw/s640/Display.png" width="640" /></a></div>
<br />
Select Materialのダイアログが表示されますので<br />
ワイヤーフレーム用のMaterialを選択します。<br />
今回は、用意されていたMRTK_WireframeBlueを選択しました。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaUJqcFU5XxDxEg86JyZzpRdmBWIisqBGQwQILLzeos9c2yQ1323Ap1Jf3RV3sgYMZLnxaD2AxvWU5bTM-pWLxiZytf1ID9tfQo_XUnHO_bZMIEKHy8t6jTNzvyqzHXJr5_i_diN_f5H-B/s1600/Material.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="585" data-original-width="1162" height="322" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhaUJqcFU5XxDxEg86JyZzpRdmBWIisqBGQwQILLzeos9c2yQ1323Ap1Jf3RV3sgYMZLnxaD2AxvWU5bTM-pWLxiZytf1ID9tfQo_XUnHO_bZMIEKHy8t6jTNzvyqzHXJr5_i_diN_f5H-B/s640/Material.png" width="640" /></a></div>
<br />
設定は以上で、Unityを実行するとワイヤーフレームの色が変更されているのが確認できます。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH_kmJT7djRPtpYpySVEJK3gn2nYh5XSmzUDYtlhV7s1SdhTF2pWr5FxPvO8MYt1gdrH7_SfEeF83yMNqmbFcsFR8SwG5VyH6sCLx6_ImfdRCPsU7-fZR_9CBH7BSXkaeh9uLTvat3wD7V/s1600/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-11-26+120103.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="756" data-original-width="918" height="526" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiH_kmJT7djRPtpYpySVEJK3gn2nYh5XSmzUDYtlhV7s1SdhTF2pWr5FxPvO8MYt1gdrH7_SfEeF83yMNqmbFcsFR8SwG5VyH6sCLx6_ImfdRCPsU7-fZR_9CBH7BSXkaeh9uLTvat3wD7V/s640/%25E3%2582%25B3%25E3%2583%25A1%25E3%2583%25B3%25E3%2583%2588+2019-11-26+120103.png" width="640" /></a></div>
<br />
<span style="background-color: white; color: black; display: inline; float: none; font-family: "times new roman"; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">SpatialObjectMeshObserverProfileのDisplay SettingsのDisplay Optionのドロップダウンを</span><br />
Noneにするとワイヤーフレームを非表示にできたり、<br />
Spatial Mesh Objectに指定されているPrefabを変更することで<br />
表示される部屋自体を変更する事もできます。<br />
<br />
ProfileをCopyしてカスタマイズ。やはりそれが基本ですね<br />
このオペレーションを何度も繰り返してMRTKv2に慣れ<br />
Profileのどの項目を、どう変更すれば何が起こるのか?<br />
<br />
こちらを把握していくことから初めて行くのが攻略の近道かなと感じました。<br />
と。。ここまで書いたんですが。この記事を書き終えた後。<br />
<br />
もう一度、よくよくググッてみたら。日本語の情報も普通に出てました。。 Orz..<br />
チュートリアルは、一度目を通していた方が良さそうですね。<br />
<blockquote class="embedly-card">
<h4>
<a href="https://docs.microsoft.com/ja-jp/windows/mixed-reality/mrlearning-base-ch2">入門チュートリアル-3. ユーザーインターフェイスを作成し、Mixed Reality Toolkit を構成する - Mixed Reality</a></h4>
前のレッスンでは、HoloLens 2 の最初のアプリケーションを開始することで、Mixed Reality Toolkit (MRTK) が提供する必要のある機能について説明しました。 In the previous lesson, you learned about some of the capabilities the Mixed Reality Toolkit (MRTK) has to offer by starting your first application for the HoloLens 2.</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-1526274540389423382019-06-22T18:15:00.002+09:002019-06-22T18:25:02.514+09:00[Oculus Quest 開発] Oculus Integration に含まれるLaserPointerについて。お疲れ様です。ZuQ9->Nnです。<br />
<br />
2019年6月のはじめくらいに<br />
Oculus Quest を購入しました。<br />
折角、購入したので、開発しないと勿体ないとおもったため<br />
<span style="background-color: white;">ゆるゆると開発を始めていました。</span><br />
<span style="background-color: white;"><br /></span>
<span style="background-color: white;">どうしても、さぼるだろうなと感じていたために</span><br />
<span style="background-color: white;">2019年6月1日(土)に開催された</span><br />
<span style="background-color: white;">【しなもく会特別版】Quest開発もくもく会 等にも参加してしていました。</span><br />
<blockquote class="embedly-card">
<h4>
<a href="https://synamon.connpass.com/event/131948/">【しなもく会特別版】Quest開発もくもく会 (2019/06/01 14:00〜)</a></h4>
VR開発に詳しいSynamonのUnityエンジニアと、一緒にQuest開発をもくもくできる会 「開発とか作業をしたいけど、自分の部屋だとやる気がでなくて...」 「Questが届いたのでさっそくみんなでワイワイやりながら開発したい!」 「AndroidベースのVR開発に関する新しい知見が欲しい...」 「VR転職に興味ある!けど知り合い全然いない...知り合い欲しい...」 ...</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
実は、以前に少しだけ、業務でOculus Goのアプリを開発したときに<br />
UIを操作するときにLaserPointerを表示しているサンプルがあったなぁと<br />
かすかな記憶に残っていました。<br />
<br />
ググってみると。いくつかLaserPointerを表示する技術記事が見つかりました。<br />
<ul>
<li><a href="https://qiita.com/noitak/items/f442a45c2d772d9d8269">Oculus Goでレーザーポインターを表示する - Qiita</a></li>
<li><a href="https://qiita.com/JunSuzukiJapan/items/fe17a91c62b4021cdea7">Oculus Go 開発メモ - レーザーポインタとuGUI編 - Qiita</a></li>
<li><a href="https://scrapbox.io/oculusgogo/Oculus_GoのコントローラからレーザーポインタによりUIを操作するまで">Oculus GoのコントローラからレーザーポインタによりUIを操作するまで ...</a></li>
</ul>
これらの技術記事の中では、<span style="background-color: white; color: black; display: inline; float: none; font-family: "times new roman"; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">LaserPointerのSriptを自作しています。</span><br />
しかし、2019年6月のOculus Integrationの中 Assets > Oculus > SampleFramework > Core > Scriptsに
LaserPointer.csというScriptが含まれていました。なので、わざわざ自作必要は無いのでは?
というモヤモヤが自分の中に生まれてきました。<br />
<br />
すでに、こちらのQiita記事 に記述されているんですが。<br />
<blockquote class="embedly-card">
<h4>
<a href="https://qiita.com/nkjzm/items/8a62cfab348eacff9167">Oculus QuestでuGUIを操作する - Qiita</a></h4>
はじめに 基本的にはOculusGoなどと同じですが、少し情報が古くなっているので、2019.06時点での情報を記して置きます。 Oculus Go 開発メモ - uGUI編 - Qiita https://qiita.com...</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
Oculus Integration に含まれるLaserPointerは、<br />
Assets > Oculus > SampleFramework > Core > Prefabsの中の<br />
UIHelpersのPrafabにまとめられています。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAVCJXqYMXJQRZu-xRKZY5EqS-4mDtOZVbqDT4Au3pdR-Jszor27uoqvN_8HRoJhyphenhyphenVizQj7eS8Qy38ZZZv5iZs1K8ZGPZaHsJVoxEITUYebi76Mi87ZUf4B01FyG-Mg5HWT3fZxRcLkm6m/s1600/UIHelper.png" imageanchor="1"><img border="0" data-original-height="417" data-original-width="440" height="379" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiAVCJXqYMXJQRZu-xRKZY5EqS-4mDtOZVbqDT4Au3pdR-Jszor27uoqvN_8HRoJhyphenhyphenVizQj7eS8Qy38ZZZv5iZs1K8ZGPZaHsJVoxEITUYebi76Mi87ZUf4B01FyG-Mg5HWT3fZxRcLkm6m/s400/UIHelper.png" width="400" /></a><br />
<br />
UIHelpersのPrafabは<br />
<ul>
<li>LaserPointer</li>
<li>Shpere</li>
<li>EventSyste</li>
</ul>
の3つのGameObjectで構成されています。<br />
それぞれ、細かく内容を見てみましょう<br />
LaserPointerのGameObjectは、LaserPointer.csのScriptと<br />
Line Renderがアタッチされています。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoTGeeOGNsE4RwpuQXy_UkLg7SjGB7Dexoo44cFF52MO-tY8qa-tPp_Uv95_mhiajeeAqcvKwPIK3ztkvyOH_B_wJ6S6Ydc7bzxZtXuZ5MKeHpVS6k908aw3ls0lxK5WrL1OVuC96fy4Gc/s1600/LaserPointer.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="647" data-original-width="833" height="310" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoTGeeOGNsE4RwpuQXy_UkLg7SjGB7Dexoo44cFF52MO-tY8qa-tPp_Uv95_mhiajeeAqcvKwPIK3ztkvyOH_B_wJ6S6Ydc7bzxZtXuZ5MKeHpVS6k908aw3ls0lxK5WrL1OVuC96fy4Gc/s400/LaserPointer.png" width="400" /></a>
<br />
ShpereのGameObjectは3DオブジェクトのShpereが<br />
Scale x 0.01 y 0.01 z 0.01となっています<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyj3dfpG2B7x64mVzsrPmFyG6wV3yAmh0jPwtv2Gr5XhJ9XgBL97AFftuNI9Ye1f6aqxFx-Xu6S-e68yX2bzuH4YcaXArI24YbIZ8iiyJOhRowAzCJXxpu6dolmXpN-337xMxaPwQk_OUB/s1600/Shpere.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="627" data-original-width="887" height="282" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhyj3dfpG2B7x64mVzsrPmFyG6wV3yAmh0jPwtv2Gr5XhJ9XgBL97AFftuNI9Ye1f6aqxFx-Xu6S-e68yX2bzuH4YcaXArI24YbIZ8iiyJOhRowAzCJXxpu6dolmXpN-337xMxaPwQk_OUB/s400/Shpere.png" width="400" /></a>
<br />
EventSystemのGameObjectはUnityのEventSystemと<br />
OVRInputModule.csのスクリプトがアタッチされており、<br />
CursorのプロパティにLaserPointerがアタッチされています。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSc8Sz0pLmHk8Zgj0gshncjWMpx5yJ0vdG_c8lpBzUB3cNdFSgM5eFutL-SeemCC48RLhicSjfln6AQ2oETAFnc_ld28B0ZYShBYJu7gU68zpCGZxTQsTbPQ87AkBmb_Og_YYdYKr4UflH/s1600/EventSystem.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="763" data-original-width="870" height="350" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSc8Sz0pLmHk8Zgj0gshncjWMpx5yJ0vdG_c8lpBzUB3cNdFSgM5eFutL-SeemCC48RLhicSjfln6AQ2oETAFnc_ld28B0ZYShBYJu7gU68zpCGZxTQsTbPQ87AkBmb_Og_YYdYKr4UflH/s400/EventSystem.png" width="400" /></a>
<br />
また、UIHelpersそのものには、HandedInputSelector.csのScriptがアタッチされています。 <br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyPP4lpxyJ1VKwRDhqEYFYIi_ZxtZSlo3R14SXgri97_UE_O4sonmaqPafRqb8CO3UStHmaRiQcAv4g7gXOAaPDSasdZfqfq1eFtFlYqYMckzqfvRFCJJSp2F0jNQsDTL79zBsWLkGW-3f/s1600/UIHelpers.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="305" data-original-width="882" height="137" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyPP4lpxyJ1VKwRDhqEYFYIi_ZxtZSlo3R14SXgri97_UE_O4sonmaqPafRqb8CO3UStHmaRiQcAv4g7gXOAaPDSasdZfqfq1eFtFlYqYMckzqfvRFCJJSp2F0jNQsDTL79zBsWLkGW-3f/s400/UIHelpers.png" width="400" /></a><br />
HandedInputSelector.csの中身は、OVRInput.GetActiveController()で<br />
アクティブなコントローラーを取得し、OVRInputModuleのrayTransformを右か左のHandAnchorにセットしています。<br />
<br />
実際にLaserPointerを利用しているサンプルは、<br />
Assets > Oculus > SampleFramework > Usage > DebugUI.unityのSceneが参考になります。<br />
<br />
DebugUIのHierarchy、CanvasWithDebugにDebuUIBuilder.csの<br />
UI Helper To InstantiateのプロパティにUIHelpersのPrefabがアタッチされています。<br />
また、Laser Beam BehaviorをONに変更することで<br />
常に<span style="background-color: white; color: black; display: inline; float: none; font-family: "times new roman"; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">LaserPointerを表示し続けることが可能です。</span><br />
<b></b><i></i><u></u><sub></sub><sup></sup><strike></strike><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxYW0AYp0eltJxhuyH6RfK0DontiEsZ9ZD_xHylI-iGOGguavB7vXBH0qOxYGYElw-cZVGBqRilbjac160_j4KWLEAYRbKcqkuxfP7KBIDLYeyTG2OPYFl8vo7zDd3haGIvTVJPSs_KGLi/s1600/DebugUI.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="672" data-original-width="1001" height="267" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxYW0AYp0eltJxhuyH6RfK0DontiEsZ9ZD_xHylI-iGOGguavB7vXBH0qOxYGYElw-cZVGBqRilbjac160_j4KWLEAYRbKcqkuxfP7KBIDLYeyTG2OPYFl8vo7zDd3haGIvTVJPSs_KGLi/s400/DebugUI.png" width="400" /></a><br />
本当は、VRChatのアプリのように両方のコントローラーから<br />
LaserPointerを表示してUI操作をおこないたったのですが、<br />
色々、自分で独自Scriptを記述したり試してはみたのですがうまくいきませんでした。orz..<br />
<br />
まぁ、今後も、こんな感じでゆるりと Oculus Quest 開発は続けていきたい。<br />
<br />ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-48580855262541635992018-12-09T10:03:00.002+09:002018-12-09T11:23:13.969+09:00[HoloLens Advent Calendar 2018] 9日目 Mixed Realty Tookit Unity vNext2018を利用し、Air TapでCubeを落とすHoloLensアプリを作ってみたお疲れ様です。ZuQ9->Nnです。<br />
この記事は、HoloLens Advent Calendar 2018、9日目<br />
2018/12/09 の内容です。<br />
<br />
Mixed Realty Tookit Unity vNext2018<br />
日本語でも何人か記事をだされていますが、<br />
2018/12/09現在では、ようやくAlphaを出てBataになったばかり<br />
まだまだ、開発真っ最中といった印象です。<br />
<br />
今回は、Mixed Reality Toolkit 2018.9.0 (vNext Beta) を利用し、<br />
HoloLensアプリの最初の第一歩ともいえる、CubeをAir Tapで落とすアプリを作成していきます。<br />
<br />
なお、Mixed Reality Toolkit 2018.9.0 (vNext Beta) を利用するには<br />
Unity 2018.1以降、.NET 4.xが必須となります。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD82gsFG0iL3HD0MU_P0Vd0S5XGYGeR9oOC6i2iqHJ24msIogFab2-Jr-sgzcc1rSJCV8i60MD7pZeJ8R5lvhWYA6r0Do6ERCGYqhdnppyYGUT8bFUd9N8ppWusrALSz507_XsOuYrKF4Q/s1600/.Net4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="174" data-original-width="439" height="126" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD82gsFG0iL3HD0MU_P0Vd0S5XGYGeR9oOC6i2iqHJ24msIogFab2-Jr-sgzcc1rSJCV8i60MD7pZeJ8R5lvhWYA6r0Do6ERCGYqhdnppyYGUT8bFUd9N8ppWusrALSz507_XsOuYrKF4Q/s320/.Net4.png" width="320" /></a>
<br />
今回、僕はUnity 2018.2.10f1 (64-bit)を利用して作成しました。<br />
<br />
まずは、GitHubの<a href="https://github.com/Microsoft/MixedRealityToolkit-Unity/releases">release</a>ページより<br />
MixedRealityToolkit-Unity-2018.9.0-Beta.unitypackageをダウンロードします。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQhKgmV1R2yG3hgh5NOD2MmRUzKVNektKD5ZACYaZIlufL3G4T7J9VdvUIc9vkSwL1YyTXv5LM51AcPs-V5AWWVsTZdhf0CCdef0ZdT4ZrE8BX32s3fIMnXr78_PrkGcIqIDgA8vizoJj-/s1600/github.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="557" data-original-width="1090" height="163" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQhKgmV1R2yG3hgh5NOD2MmRUzKVNektKD5ZACYaZIlufL3G4T7J9VdvUIc9vkSwL1YyTXv5LM51AcPs-V5AWWVsTZdhf0CCdef0ZdT4ZrE8BX32s3fIMnXr78_PrkGcIqIDgA8vizoJj-/s320/github.png" width="320" /></a><br />
Unityで新規でプロジェクトを作成し、<br />
MixedRealityToolkit-Unity-2018.9.0-Beta.unitypackageをインポートします。<br />
ちなみに.NET 4.xの設定は、unitypackageをインポートすると自動で設定されます。<br />
インポートができたら、
UnityのメニューにMixedRealityToolkitのメニューが表示されます。<br />
<br />
MixedRealityToolkitのメニューからConfguerをクリックすると<br />
Hieraichyに、MixedRealityToolkit、MixedRealityPlayspaceが自動追加されます。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPI_Pp7iL9kdCg09zJzG0vRTa7XVcdIQ45OeIeIjAZCkllS_WxkUqGYCzNdah8aTDaV9g1IAYZSDZTAXs7tHZzeRqFpYIt44PxYExssNtd1Pb7OjonuzkXNJEnzsrQnwcRckE9o_5OasyJ/s1600/config.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="364" data-original-width="888" height="131" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiPI_Pp7iL9kdCg09zJzG0vRTa7XVcdIQ45OeIeIjAZCkllS_WxkUqGYCzNdah8aTDaV9g1IAYZSDZTAXs7tHZzeRqFpYIt44PxYExssNtd1Pb7OjonuzkXNJEnzsrQnwcRckE9o_5OasyJ/s320/config.png" width="320" /></a>
<br />
MixedRealityPlayspaceを展開しMainCameraを選択すると、<br />
InspectorにGaze ProviderのScriptが既にアタッチされています。<br />
これは、Gazeつまり視線を扱うためのスクリプトです。<br />
<br />
Main Camera、Gaze ProviderのCusor Prefabのプロパティに<br />
MixedRealityToolkit-SDK > Features > UX > Prefabs > Cursorsの<br />
DefaultCursorをアタッチメント<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD9RmFvkA-vVtwmfh1XDaJMmd924yWnowZksq43EugrqD9pr5E1J64RkGfeHgx3PayMueVySb_21q9W37X_d6pQGOvpdK7stOB9idjvV9HWRW1pzSJU3yQT2Ah1sGftxtOTxbANkhCR-tP/s1600/cursor.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="883" data-original-width="961" height="294" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD9RmFvkA-vVtwmfh1XDaJMmd924yWnowZksq43EugrqD9pr5E1J64RkGfeHgx3PayMueVySb_21q9W37X_d6pQGOvpdK7stOB9idjvV9HWRW1pzSJU3yQT2Ah1sGftxtOTxbANkhCR-tP/s320/cursor.png" width="320" /></a>
<br />
さらにGaze ProviderのGaze TransformプロパティにMainCameraをアタッチメント<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRP4ynKrAkm3fV5I7k6t2WjLO9I9d0TkPqGh3Xo193Dtrz3v4I-8RR6scTsDzQ_CIWXNmCm8ZsMLbHtzpP3NegUgt7ODtZf_6YdRo7aGUf5svF5gilVP3k-ExSGnecvLEV0ABiGZK5xzfO/s1600/camera.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="835" data-original-width="949" height="281" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRP4ynKrAkm3fV5I7k6t2WjLO9I9d0TkPqGh3Xo193Dtrz3v4I-8RR6scTsDzQ_CIWXNmCm8ZsMLbHtzpP3NegUgt7ODtZf_6YdRo7aGUf5svF5gilVP3k-ExSGnecvLEV0ABiGZK5xzfO/s320/camera.png" width="320" /></a>
<br />
<br />
HieraichyのCreate > 3D Object > Cubeを選択しCubeを作成<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHWmxCnku1SO4dqBKsSJLsN9SjExbkQVg7BXUoK-h07c7mMpE2Dv2inwwiiNfmgRn09Sphe6S0GYVBGGnp4puAQntO22yOtmLb2p8mCV8baSwL3dfRNA4xXBy8QKwaCcgb0atZnuoZI_md/s1600/cube.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="418" data-original-width="506" height="264" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgHWmxCnku1SO4dqBKsSJLsN9SjExbkQVg7BXUoK-h07c7mMpE2Dv2inwwiiNfmgRn09Sphe6S0GYVBGGnp4puAQntO22yOtmLb2p8mCV8baSwL3dfRNA4xXBy8QKwaCcgb0atZnuoZI_md/s320/cube.png" width="320" /></a>
<br />
Cubeを見えやすい位置に配置してください。(僕は、x : 0, y : 0, z : 3)に配置<br />
DefaultCursorの色が白だったので、白いCubeに白いGazeが当たっても認識しずらかったので<br />
僕は、適当な色(R : 0, G : 201, B 255)のMaterialを作ってCubeにアタッチしましたが、<br />
この作業は、必須ではありません。<br />
<br />
CubeのInspectorからAdd ComponetでRigdbodyを追加します。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMmjYAMqJcO4UGWBkV9xWuWAxJkAg5rE34K8C97hAcOsCirCkeX8Vsrylo8nvRqLhOhRFTLGdAI8TV5drwF9gZ4hSyFgsA7AynV3ko7sg5V5uBboK4EM-X5K_r3TP3fBGkBjZ3dqSEJNtS/s1600/rigidbody.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="590" data-original-width="935" height="201" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMmjYAMqJcO4UGWBkV9xWuWAxJkAg5rE34K8C97hAcOsCirCkeX8Vsrylo8nvRqLhOhRFTLGdAI8TV5drwF9gZ4hSyFgsA7AynV3ko7sg5V5uBboK4EM-X5K_r3TP3fBGkBjZ3dqSEJNtS/s320/rigidbody.png" width="320" /></a>
<br />
RigdbodyのIs KinematicのチェックをONにします。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmFEhmfC9xlSxK-bZez1clIIB9RpYVV7LAetSPNs4Gw5z-VU6fHSAqrRlXlJ0phXZtnl5hMS6sJpYONywA4JLaTfxnwlYFEjgnSOuleS6UMetBkbvpwniFufdN4n0ceZ9ySubtVtxkVdWo/s1600/iskenematic.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="663" data-original-width="949" height="223" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmFEhmfC9xlSxK-bZez1clIIB9RpYVV7LAetSPNs4Gw5z-VU6fHSAqrRlXlJ0phXZtnl5hMS6sJpYONywA4JLaTfxnwlYFEjgnSOuleS6UMetBkbvpwniFufdN4n0ceZ9ySubtVtxkVdWo/s320/iskenematic.png" width="320" /></a>
<br />
CubeにMixedRealityToolkit-SDK > Features > Input > Handlersの<br />
PointerClickHandlerのScriptをアタッチメントします<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpsZPWK0Pz4o_xI8gB4cjrkfFTVEgNO4eGCm2itOrA3EENT8q5THlXc442yL8CHV2ubgO5jLq4E4qv6feEcgFdGvUGtDq1ENmXqlMG6cQYx2bAjyKac9mTevOBkRZ3BJ9B-7NBN9m88uDZ/s1600/pointerclickhandler.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="793" data-original-width="967" height="262" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpsZPWK0Pz4o_xI8gB4cjrkfFTVEgNO4eGCm2itOrA3EENT8q5THlXc442yL8CHV2ubgO5jLq4E4qv6feEcgFdGvUGtDq1ENmXqlMG6cQYx2bAjyKac9mTevOBkRZ3BJ9B-7NBN9m88uDZ/s320/pointerclickhandler.png" width="320" /></a>
<br />
次にProject ViewのCreateからC# Scriptを選択し、新規のScriptを作成します。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWPSHWNogpEWNw5OOLknE63mdHDfO5tHX6Z-0T5-HQqMymxANGD6KQhEbd4qGG6F0UBadnoE4UbjHuFuxlG-6dJgxHdTjj8Efq1LabBFoGjUwdcRMC0Hj0dopzMOOaNuZuNOoKF_Ux5F81/s1600/createscript.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="292" data-original-width="314" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWPSHWNogpEWNw5OOLknE63mdHDfO5tHX6Z-0T5-HQqMymxANGD6KQhEbd4qGG6F0UBadnoE4UbjHuFuxlG-6dJgxHdTjj8Efq1LabBFoGjUwdcRMC0Hj0dopzMOOaNuZuNOoKF_Ux5F81/s1600/createscript.png" /></a>
<br />
名前は何でもよいですが、ここではAirTapEventとしました。 <br />
<br />
AirTapEventの内容は下記です。
<script src="https://gist.github.com/ZuQ9Nn/abf884d66f2de9746e8e337d6421eec1.js"></script>
<br />
AirTapEventをCubeのInspectorにアタッチメントします。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiy_73nL7qseaCJcd0dMzNko9SgOxwyPdKHIM0dKDwjYSY6mot13p61UVJzDyNyZ-RbCuAMZETg-YFsu8Wp-lcEHuZEDtebe3vRP-WhGtkqiIIAgpmA2ptMqI3YFYNuHEaR-5KfVwQdDTB-/s1600/AriTapEvent.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="815" data-original-width="947" height="275" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiy_73nL7qseaCJcd0dMzNko9SgOxwyPdKHIM0dKDwjYSY6mot13p61UVJzDyNyZ-RbCuAMZETg-YFsu8Wp-lcEHuZEDtebe3vRP-WhGtkqiIIAgpmA2ptMqI3YFYNuHEaR-5KfVwQdDTB-/s320/AriTapEvent.png" width="320" /></a>
<br />
CubeのInspectorから、<span style="background-color: transparent; color: black; display: inline; float: none; font-family: "times new roman"; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">PointerClickHandlerスクリプトの</span><br />
On Pointer Clicked Action Eventを展開し<br />
Action InputをSelectにします。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmRYeuG9WjE-LrITUoxT8JzvfXxR5SxpGTfJDVNEj3R8AmXD_ueYEChEv0IMOEPOiH6wGU1Hdt548PzP4_yvGDffhFbJE1ikjNrQ458Grhj6VUIZmMOAVb9JdRViKe-aH6JC-zMLyARjg6/s1600/clickpng.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="783" data-original-width="935" height="267" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmRYeuG9WjE-LrITUoxT8JzvfXxR5SxpGTfJDVNEj3R8AmXD_ueYEChEv0IMOEPOiH6wGU1Hdt548PzP4_yvGDffhFbJE1ikjNrQ458Grhj6VUIZmMOAVb9JdRViKe-aH6JC-zMLyARjg6/s320/clickpng.png" width="320" /></a>
<br />
さらに、+ボタンを押して、Unity Eventを表示ます。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq921R7uF3cgHCm2vvI2DbuMZOe_O4No6oMJRof-xId7m79zJ8IBsodzsMrb1t8M93qVR-vK8gQrkByNP0ZC-qRjaB0Pqge6ynb2TPibm2hW2-ZZfT5_pq71S-jRfllzI141JzpFOash4k/s1600/unityevent.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="783" data-original-width="949" height="264" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhq921R7uF3cgHCm2vvI2DbuMZOe_O4No6oMJRof-xId7m79zJ8IBsodzsMrb1t8M93qVR-vK8gQrkByNP0ZC-qRjaB0Pqge6ynb2TPibm2hW2-ZZfT5_pq71S-jRfllzI141JzpFOash4k/s320/unityevent.png" width="320" /></a><br />
Unity EvenにHieraichyのCubeをドラッグ&ドロップでアタッチメント<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbaxo3ei4HNcVY1TavysnCWRjSx421wvUrinEmAJp5N3a9PQRXbS9N1J-4HLMscNXm4muV-6ZphUty92Q4_zgJucN582TBqK6Wm-fyjARNQQIbm_5XhBwpUIp2rwwaU5UyRCUhdjSomGR0/s1600/unityevent%253Dcube.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="777" data-original-width="945" height="263" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbaxo3ei4HNcVY1TavysnCWRjSx421wvUrinEmAJp5N3a9PQRXbS9N1J-4HLMscNXm4muV-6ZphUty92Q4_zgJucN582TBqK6Wm-fyjARNQQIbm_5XhBwpUIp2rwwaU5UyRCUhdjSomGR0/s320/unityevent%253Dcube.png" width="320" /></a>
<br />
Unity EventのNo founctionのドロップダウンを開いて<br />
AirTapEventのFallDown()メソッドを選択します。<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfsu1pPmdGML6dB2aB-4PxM1-3X7NbUrUO6zw8aqQN-eqt9RWUHF_pS5UBqMuKIEsdfv38toirT7fBvJh_HLhxE9HEEnZoi4PhyphenhyphenvrXbAV6ooZnF6q8rO8VhyasIZLeEztV0uj6zBodBM0-/s1600/falldown.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="795" data-original-width="923" height="275" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfsu1pPmdGML6dB2aB-4PxM1-3X7NbUrUO6zw8aqQN-eqt9RWUHF_pS5UBqMuKIEsdfv38toirT7fBvJh_HLhxE9HEEnZoi4PhyphenhyphenvrXbAV6ooZnF6q8rO8VhyasIZLeEztV0uj6zBodBM0-/s320/falldown.png" width="320" /></a><br />
操作は以上で、これでBuildしHoloLensにアプリをDeployすれば<br />
今までのToolkit同様にAir TapでCube を落とすことができます。<br />
<br />
残念ながら、いままでのToolkitで出来ていた<br />
Unity Editor上でShiftボタンを押しながらクリックすると<br />
Air Tapが確認できる機能は、現在のところvNextでは提供されておらず、<br />
実機での確認が必須となっています。<br />
<br />
実機で動かすとこんな感じになります。<br />
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dwqY4oLhLfpZhKQfNGAqDivVOOAtK1cO604Rn46fkc5LM_BU-Oi0j1lqy5sJt6Dg1QPJu1UjnHgr-ZSdaBPGQ' class='b-hbp-video b-uploaded' frameborder='0'></iframe><br />
現在見ている限りでは、Mixed Reality Toolkit Unity vNext 2018.8.0.0 Alpha 2の時点で存在していた<br />
Spatial Mapping、Spatial UnderstandingやSpatial SoundのためのSpatialフォルダ、<br />
そしてsharingのためのsharingフォルダが削除されたのが気にかかったのですが、<br />
元々vNext 2018.8.0.0 Alpha 2でも、それらのフォルダにはREADMEしか存在しませんでした。<br />
また、HoloLens用のExampleもほとんど存在せず、使い方を模索しなくてはなりません。<br />
おそらく、これらの機能は、今後追加で提供されると思います。<br />
<br />
一応、.unitypackageだけではなくsorce code版もダウンロードして確認しましたがやはり、ありませんでした。
<br />
vNext2018は、かなり以前のToolkitからの変更も大きく
対応は大変になるかと思います。<br />
どうせやるなら早いうちにと思ったのですが、やっぱり早すぎたのかもしれません。<br />
<br />
最後に、今後のHoloLens開発をやるうえで、かならず、<br />
Toolkitのバージョン情報を確認して検索しないと、<br />
情報が古くて役に立たなくなることが多くなるかとおもいます。<br />
どうぞ、HololLens Developerの皆さんは、お気を付けください。<br />
<br />
<br />ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-10221508654694346222018-07-23T20:12:00.001+09:002018-07-23T20:12:53.060+09:00札幌HoloLensミートアップ vol.2 ~夏編~ に参加お疲れ様です。ZuQ9->Nnです。<br />
2018/07/21(土)<a href="https://hololens.connpass.com/event/90368/">札幌HoloLensミートアップ vol.2 ~夏編~<span style="color: #007600;"> </span></a>に参加してきました。<br />
<blockquote class="embedly-card">
<h4>
<a href="https://hololens.connpass.com/event/90368/"><span style="color: #b00000;"></span>札幌HoloLens ミートアップ vol.2 ~夏編~ (2018/07/21 14:00〜)</a></h4>
開催概要 ## HoloLens・VRアプリ開発秘話 自分がその場にいながらバーチャルな空間と融合した世界を体験できるMicrosoftのホログラフィックコンピューティング「HoloLens」のSapporo HoloLensミートアップ第2回目を実施することになりました!xR(VR,AR,MR)の開発を未経験でも、熱い興味がある方など誰でも参加いただけます。ビジ ...</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
確か4月に開催された<a href="https://hololens.connpass.com/event/82054/"> Tokyo HoloLensミートアップ Vol.8</a>の時に<br />
札幌の主催者 <a href="https://twitter.com/jojomonvr">@jojomonvr </a>さんにお会いして、<br />
お声がけいただいたのがきっかで今回の参加にいたりました。<br />
<br />
折角、わざわざ札幌にまで行くので、単に参加するのではもったいない<br />
なのでLTも。。とか、勝手に参加のハードルを高くしてしまった。(;^_^A<br />
<br />
かなり、前から準備し、飛行機の予約も完了。あとは当日に行くだけ。<br />
しかも当日は、きちんと6時起きなど、スムーズに進んでいました。<br />
<br />
<span style="background-color: transparent; color: black; display: inline; float: none; font-family: "consolas"; font-style: normal; font-variant: normal; letter-spacing: normal; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; white-space: pre; word-spacing: 0px;"><b><span style="font-size: x-large;">_人人人人人人人人人人人人_<br />> しかし事件は起こった <<br /> ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄</span></b>
</span><i></i><u></u><sub></sub><sup></sup><strike></strike><b></b><span style="font-size: x-large;"></span><br />
事前に家から成田まで1時間半と記憶しており、10時25分発の飛行機なら<br />
8時に家を出れば間に合うはずと、吞気に家を出てしまったのが失敗の始まり。。<br />
<br />
9時ごろに北千住に到着し、改めて時刻表を確認すると。。<br />
なんと、到着予定が10時28分。。この時点で間に合わないことが決定!!<br />
<br />
なんてこった。何が起きた?!!一瞬時空が歪んだのかとさえ錯覚してしまった。。<br />
成田駅までの乗り換えアクセスが休日ではかなり悪いらしい。<br />
途中駅で10分以上待たされる羽目に。。<br />
<br />
なんとか11時前に搭乗予定のバニラエアのロビーに到着。<br />
そこから一番早くつけそうな12時20発、14時10分到着の便を予約できた。<br />
ここで一安心。。なんとか行けると思っていた。。<br />
<div style="-webkit-text-stroke-width: 0px; background-color: transparent; color: black; font-family: Times New Roman; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">
<br /></div>
<div style="-webkit-text-stroke-width: 0px; background-color: transparent; color: black; font-family: Times New Roman; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; orphans: 2; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">
<span style="background-color: transparent; color: black; display: inline; float: none; font-family: "consolas"; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; white-space: pre; word-spacing: 0px;"><b><span style="font-size: x-large;">_人人人人人人人人人人人人_<br />> またも事件は起こった <<br /> ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄</span></b></span></div>
<b></b><i></i><u></u><sub></sub><sup></sup><strike></strike><br />
なんと、空港の交通事情で大幅に出発が遅れてしまい。<br />
13時20分発となった。なんとか東京をはなれ15時くらいに新千歳空港に到着。<br />
よし。なんとかなるかも。。と思っていた日が僕にもありました。。<br />
<br />
<span style="background-color: transparent; color: black; display: inline; float: none; font-family: "consolas"; font-variant: normal; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: pre; word-spacing: 0px;"><span style="background-color: transparent; color: black; display: inline; float: none; font-family: "consolas"; font-style: normal; font-variant: normal; letter-spacing: normal; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; white-space: pre; word-spacing: 0px;"><b><span style="font-size: x-large;">_人人人人人人人人人人_<br />> ここで痛恨のミス <<br /> ̄Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄</span></b></span></span><br />
<b></b><i></i><u></u><sub></sub><sup></sup><strike></strike><b></b><i></i><u></u><sub></sub><sup></sup><strike></strike><b></b><span style="font-size: large;"></span><span style="font-size: x-large;"></span><br />
本来はJRを使えば40分ほどで札幌に到着予定が。<br />
間違えてバスに乗ってしまい。結局、現地に到着したのが<br />
17時ごろと、LTの時間ギリギリになってしまいました。<br />
ここでもかなり時間が溶けましたね。ほんとに時空が歪みを感じましたw<br />
<br />
そんなこんなで、なんとかLTだけを行う形になってしまいました。<br />
LTの内容は前々から作ってみたかった<a href="http://vird.co.jp/product/hologiraffe/">HoloGiraffe</a>のアプリを真似てみました。<br />
<br />
発表に関しては。。あまりにも、5分間の時間を気にしすぎて<br />
早口になりすぎ、しかも、まとめ部分の最初で時間終了となりました。<br />
またもや、なにやってんだよ。。って感じでした。<br />
<br />
参考のために動画を2本いれたのが焦りの原因なんでしょうかね。<br />
ただ、言葉では伝えきれないと思ったので<br />
欲張らずに自分のアプリの動画のみを最初に流せばと反省しきりです。<br />
<br />
発表内容のスライドはこちらです。<br />
<script async="" class="speakerdeck-embed" data-id="ea17da66325a4d46b8a2e0e7027fa814" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>
作成したサンプルアプリはこんな感じです。<br />
<iframe allow="autoplay; encrypted-media" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/z3VwWzM3cro" width="560"></iframe>
<br />
一番メイン内容は、最新のMixedRealityToolkit-Unityに入っている<br />
MixedRealityToolkit/Standardシェーダーと<span style="background-color: transparent; color: black; display: inline; float: none; font-family: "times new roman"; font-size: 16px; font-style: normal; font-variant: normal; font-weight: 400; letter-spacing: normal; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">ClipPlane.cs</span>の使い方ですね。<br />
<br />
HoloToolkit-Examples > StandardShader の中に<br />
MaterialGallery.unity というサンプルのシーンも参考になりました。<br />
<br />
やはり、こういった期限がないと形にしておわらさないですよねw。<br />
なんとか見せれる形に終えられて本当に良かったです。<br />
<br />
懇親会も、なんか一人でポツンとしていたシチュエーションも多かったかな。<br />
なんとか、自分から話に行けた、福岡から参加の <a href="https://www.blogger.com/goog_818297082"><span id="goog_818297083"></span>@KzoNag(ながみね) </a> さんに<br />
じゃあ、今度は福岡の勉強会に参加しますねぇ。。なんて<br />
かなりノリで宣言してしまいましたw、まぁ勢いって大事ですよねぇ。<br />
<br />
なんだかXR業界の人のフットワークの軽さを見ていると<br />
僕もじっとしているのってもったいないかなと<br />
今回の件も含めて、決めてしまって進んだほうが断然に楽しかった。<br />
その体感だけでも自分にはプラスにできるんじゃないかなぁとか。。<br />
そんな感じで、次もチャレンジしていきたいです。。<br />
<br />
北海道、札幌が堪能できたか?はイマイチな部分も残りましたが<br />
次は、心からおもいきり楽しんで参加したいです。<br />
<br />
最後に、札幌行に背中を押してくださった@jojomonvrさん<br />
どうもありがとうございました。<br />
<br />
<br />
<br />ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-24809115389849074802018-03-10T13:02:00.000+09:002018-03-10T13:02:09.720+09:00第五回 HoloLens参考書 読書会で発表しました。お疲れ様です。ZuQ9->Nnです。<br />
2018/03/09(金) <a href="https://hololens.connpass.com/event/78708/">第五回 HoloLens 参考書 読書会 </a>で発表を担当させてもらいました。<br />
<br />
<blockquote class="embedly-card">
<h4>
<a href="https://hololens.connpass.com/event/78708/">第5回 HoloLens参考書読書会@アカツキ (2018/03/09 18:30〜)</a></h4>
HoloLensアプリってどうやって作ればいいの? HoloLensアプリケーションってどうやって作ればいいんだろう。Microsoftが提供するチュートリアル「Academy」を一通りやってみたけど、次はど うすればいいんだろう。 そんなお悩みを持っている方たちに向けて参考書の読み会を開催します! 現在出版されている参考書は洋書だけなので少しハードルが高いですが、みんなで挑めば怖くない! 本イベントで取り扱う書籍の内容は以下の通りです。 ch.1 OverView & 環境構築 ch.2 はじめてのHoloアプリ(豆腐みたいなもん) ch.3 Holoの入力(Gaz...</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
HoloLensに関連する何かに携わっていないと、絶対に触らずにダメになっていく
<br />
そんな不安や焦りの気持ちからこちらの読書会にスタッフとして参加させてもらっていました。<br />
<br />
こちらの「<a href="https://www.packtpub.com/hardware-and-creative/hololens-beginner’s-guide">HoloLens Beginner's Guide</a>」<br />
<iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://rcm-fe.amazon-adsystem.com/e/cm?ref=tf_til&t=zuq9nn-22&m=amazon&o=9&p=8&l=as1&IS1=1&detail=1&asins=B01N63OKA0&linkId=9df125d66869f294355699803b09c443&bc1=FFFFFF&lt1=_top&fc1=333333&lc1=0066C0&bg1=FFFFFF&f=ifr" style="height: 240px; width: 120px;">
</iframe>
<br />
の書籍に添いながら各Chapterごとにスタッフが発表を受け持っています
<br />
そして、いよいよ、僕の担当の番となったわけです<br />
内容は、Chapter6 のSpatial Mappingについて、発表資料はこちらです。
<br />
<br />
<script async="" class="speakerdeck-embed" data-id="5789f46c96b54bcfbd8accabdce48837" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script>
こちらの資料の中のコードApplicationManagerについはて、こちらです。<br />
<br />
<script src="https://gist.github.com/ZuQ9Nn/c5a217ceb9a237e81b164a5555aa0009.js"></script>
完成したアプリを実機で動かしたときは、こんな感じになります。
<iframe allow="autoplay; encrypted-media" allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/ZZ_Kfpzzqg0" width="560"></iframe>
<br />
<br />
発表は、自分でも、早口になっているなと思いながらも
ついつい焦りからか、<br />
止められない感じになってしまいました。<br />
<br />
今まで5分くらいのLTはやっていたのですが、<br />
1時間以上の枠をもらったのは、<br />
今回初めてで時間配分、どっからどこまでをダラダラせず、<br />
わかりやすくまとめるか、とても課題が残りました。<br />
<br />
発表後は、参加者にお声もかけていただき。<br />
具体的な質問等もいただき、まだまだ、きっちりと<br />
理解していない部分がほとんどだと痛感しました。<br />
<br />
Spatial Mappingの一番のポイントは、HoloLensがセンサーをつかって<br />
周りの空間の情報をスキャンし貯めている部分です。<br />
<br />
質問者さんから言われて、僕も勘違いしていた部分があります。<br />
SpatialMappingObserver.csにStartObserving があるので<br />
てっきり、アプリを起動したときに<br />
周囲をスキャンを開始するのかと思っていたのですが<br />
<span style="color: red; font-size: large;"><b>アプリを起動しなくてもHoloLensそのものを起動</b></span>したときに<br />
既に自動的にセンサーを使って周りの空間をスキャンし<br />
空間情報を貯めて更新していますね。<br />
アプリ内では、あらかじめスキャンした空間の情報も利用しているようです。<br />
<br />
途中でヘルプいただいた <a href="https://twitter.com/dy_karous">@dy_karous </a>はじめ、スタッフの皆さんありがとうございました。<br />
発表そのものは終わりましたが、読書会自体はつづきますので<br />
最後まで、できる範囲内でお手伝いさせてもらいます。<br />
<br />ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-55051214008635212602017-10-14T05:12:00.005+09:002017-10-14T19:22:38.989+09:00xRLT vol.1に参加お疲れ様です。ZuQ9->Nnです。<br />
201710/13(金) <a href="https://techplay.jp/event/634704">xRLT vol.1</a> に参加しました。<br />
場所は渋谷の<a href="https://techplay.jp/space">TECH PLAY</a>さん
<br />
<blockquote class="embedly-card">
<h4>
<a href="https://techplay.jp/event/634704">xRLT vol.01|IT勉強会・セミナーなどのイベント情報検索サービス - TECH PLAY[テックプレイ]</a></h4>
本年1月に日本発売されたHoloLens、そしてまもなく一般発売を迎えるWindows Mixed Reality Immersiveデバイス! まだかまだかと待ち構えるみなさんの熱気が今回のLT大会の源となりました! もちろんMRだけでなく、VR/ARも集めてどーんとLT21連発! 10/2 Update: U22割(先着10名無料)やります! 10/3 Update: ...</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
今回もLT発表枠で申し込みました。内容は<a href="http://zuq9nn.blogspot.jp/2017/09/tokyo-hololens-vol5.html">Tokyo HoloLens meetup vol.5</a> の<br />
LTで発表した椅子の検知の続きのような形<br />
どうしても歩かせてから椅子に座らせてみたかったのでチャレンジしてみました。<br />
<br />
<script async="" class="speakerdeck-embed" data-id="1b099d31ee944457b56fdf7d6b429c21" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>
結果的には、残念ながらうまくいきませんでした。orz..
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/Izy6WxGAwIs" width="560"></iframe>
<br />
<br />
発表そのものも、またしても5分で終わらず、強制終了。。orz..<br />
もう、緊張のためか発表中は足がガタガタ震えてきたのがわかったんですが<br />
全然とめられなかったですね。内容も頭の中が真っ白に<br />
パーンっていっちゃいましたね。自分でも何言っているのかわからない感じ<br />
とにかく、ふわふわ浮いたように感じてました。<br />
はじめっててわけじゃないのに意識しすぎたんだろうか??<br />
<br />
前回のリベンジならずで、ものすごく自分的に<br />
反省点ばかりが目立つ結果になってしまいました。<br />
<br />
発表したおかげか、色々な人から声をかけてもらいとてもうれしかったです。<br />
今後も積極的に発表前提で勉強会に臨みます。<br />
<br />
ともあれ、時間が許す限り、力を尽くしたので<br />
ある意味ではやり遂げた感も、いったんこちらの内容は一休みして<br />
ずっと気になっていた<span id="goog_695931122"></span><a href="https://github.com/Microsoft/MRDesignLabs_Unity">MRDesignLabs_Unity</a>で、<br />
いろいろ脳内の妄想が実装できそうなのでチャレンジしてみます。<br />
<br />
あぁ次こそはキッチリとかっこよく5分ぴったりでおわらせるぞ。。<br />
課題も増えましたが、やりたいことも増えてなんだかとても楽しくなってきています。<br />
これを続けられるように精進かな。。<br />
<br />
<br />ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-59066276405444892792017-10-08T12:13:00.000+09:002017-10-08T12:13:46.239+09:00はじめよう!Mixed Reality を開催しました。お疲れ様です。ZuQ9->Nnです。 <br />
2017/10/07(金) <span id="goog_701954285"></span><a href="https://connpass.com/event/67148/">はじめよう!Mixed Reality</a> を開催しました。<br />
場所は渋谷の<a href="https://geechs-magazine.com/21cafe/index">21Cafe</a>さん<br />
<br />
<blockquote class="embedly-card">
<h4>
<a href="https://connpass.com/event/67148/">はじめよう!Mixed Reality (2017/10/06 19:00〜)</a></h4>
理念・目的 最近MRやHoloLensといった分野が盛り上がっていて、ドキュメントなどの整理もされ始めているので、一度初心を思い出すとともにこれからMRを始めたい! という方が情報を仕入れられる機会を作りたいなと思い開催されます。 ## こんな方を対象にしたお話し会です * HoloLensやMR技術に興味がある * でも実機は高いし * unity? C#? ちょっとよくわからないな... * そもそもMRって何よ? VRとは違うの? ## 当日のスケジュール 18:30 開場 18:50 開始 ~19:00 geechs.inc による会場説明 ~19...</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
これまで、何度も勉強会に参加者としては行っていましたが、<br />
今回は、なんと主催側??。。といっても発表資料を作り<br />
発表しただけで、ほとんど、<a href="https://twitter.com/asagi_00a3af">浅葱 (あさぎ)</a>さんにお任せでした。<br />
<br />
本当に色々、準備してくださってありがとうございました。<br />
もう少し、自主的に動けるように、今後の反省点も多いです<br />
<br />
当日は、ものすごい雨となりましたが、<br />
ほとんど想定した人数の方が参加してくださったようなので<br />
こちらも本当に、ありがとうございました。<br />
<br />
僕の発表内容は、「HoloLensのはじめかた」という技術的な内容より<br />
操作方法やHoloLensに関する説明がメインでした。<br />
<br />
<br />
<script async="" class="speakerdeck-embed" data-id="9ab7c206bd9b4f6085624b85e90094ff" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>
いざ まとめ始めると、こんなので大丈夫なのか?<br />
また、発表した後も、こんなのでよかったの??という迷いばかり。。<br />
<br />
めちゃくちゃ、つたない発表となりましたが、<br />
無事、最低限の義務は果たせてよかったかなと思っています。<br />
<br />
アウトプットはとても、重要だと感じてますが、<br />
僕は、量も少ないうえ、スピード感も無く、<br />
それがとてもコンプレックスな感覚はもっています。<br />
<br />
ただ、そんな思いをするたびに、マイペースで良い<br />
自分のできる範囲内で最大で良いのだと自分を言い聞かせています。<br />
<br />
他の勉強会の主催者、発表者さんたちは、自分の業務も持ちながら<br />
おしみなく、自分のノウハウを積極的に共有していて<br />
改めて、そのすごさや重要さを再認識しました。<br />
<br />
なにはともあれ、勉強会開催という参加者か<br />
次のステップを歩むことができ、自分的には大進歩だと感じています。<br />
<br />
今後も続けられるのか?。不安も多いですが<br />
今まで同様に、できる範囲を最大限を尽くして行く感じで取り組みます。<br />
<br />
今回は、本当に良い体験になったと感じています<br />
最後に、ほかの登壇者の方も含めてお連れ様でした。<br />
<br />ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-50887358298602235412017-09-18T09:11:00.001+09:002017-09-18T09:11:35.361+09:00Tokyo HoloLens ミートアップ vol.5 に参加お疲れ様です。ZuQ9->Nnです。 <br />
2017/09/18(日) <a href="https://hololens.connpass.com/event/63723/">Tokyo HoloLens Meetup vol.5</a> が開催されたので参加しました。<br />
場所は、<a href="https://www.microsoft.com/ja-jp/mscorp/branch/sgt.aspx">日本マイクロソフト株式会社セミナールーム</a><br />
<br />
<blockquote class="embedly-card">
<h4>
<a href="https://hololens.connpass.com/event/63723/">Tokyo HoloLens ミートアップ vol.5 (2017/09/17 13:00〜)</a></h4>
開催概要 ## HoloLensアプリ開発秘話 HoloLensアプリ開発で著名な方々に登壇いただき、HoloLensに向いたアプリ、VR/MRに向いたアプリの特長や、HoloLensアプリ開発の裏話をお 話しいただきます。 HoloLensを持っていない方も参加可能です!ご興味のある方は是非ともご参加頂き、HoloLensを含めたWindows ...</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
イベントの詳細内容は、おそらくほかの方が詳しく、<br />
わかりやすくまとめてくれると期待して。
<br />
今回は自分のLTについてのみです。<br />
前から気になっていた椅子の検知にチャレンジ です。<br />
<br />
<script async="" class="speakerdeck-embed" data-id="42988f4258f4472d958046de6c6fbafd" data-ratio="1.77777777777778" src="//speakerdeck.com/assets/embed.js"></script>
<br />
なんとかサンプルが実機でも動きました。<br />
<iframe allowfullscreen="" frameborder="0" height="270" src="https://www.youtube.com/embed/fgS0WH-C1zg" width="480"></iframe>
<br />
今回はプロジェクトもGitHubに公開しましたので、参考にしてください。<br />
<a href="https://github.com/ZuQ9Nn/ChairDetection">ZuQ9Nn/ChairDetection</a>
<br />
<blockquote class="embedly-card">
<h4>
<a href="https://github.com/ZuQ9Nn/ChairDetection">ZuQ9Nn/ChairDetection</a></h4>
This is HoloLens Sample App ChairDetection minimum cod</blockquote>
<script async="" charset="UTF-8" src="//cdn.embedly.com/widgets/platform.js"></script>
LTは残念ながら5分をオーバーしてしまいました。。orz..
<br />
プレゼンや動画の操作に戸惑いましたね。。事前に準備はしてたつもりでしたが<br />
まだまだ努力も必要だったようです。<br />
<br />
LTではいきなりコードを出してしまい詳細な説明しきれなかった、<br />
椅子の定義について。ポイントは下記の部分です。<br />
<br />
<div style="border: 1px solid #333333; margin-bottom: 10px; padding: 10px;">
SpatialUnderstandingDllShapes.ShapeComponentConstraint.Create_SurfaceHeight_Between(<span class="pl-c1">0.25f</span>, <span class="pl-c1">0.6f</span>),<br />
...<br />
<table class="highlight tab-size js-file-line-container" data-tab-size="8"><tbody>
<tr><td class="blob-code blob-code-inner js-file-line" id="LC35"><div>
SpatialUnderstandingDllShapes.ShapeComponentConstraint.Create_RectangleLength_Between(<span class="pl-c1">0.1f</span>, <span class="pl-c1">0.5f</span>),<br />
SpatialUnderstandingDllShapes.ShapeComponentConstraint.Create_RectangleWidth_Between(<span class="pl-c1">0.1f</span>, <span class="pl-c1">0.4f</span>),<b></b></div>
</td></tr>
</tbody></table>
<b></b></div>
こんな感じで図解すると多少はわかりやすいでしょうか?
?(;^_^A アセアセ・・・<br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYowd7lfKHrEuPZQCUXQLDMYCQTFgidyLVve6R0uHI_LlspShFTcouFeygSseQjtZHMoSjmoi9Y5xbWP3DUBhNkmlTcd392l-YebuzhdnrZcph7AmFHBTlB89zjpauc4TWYgHKc8IOzbpB/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="362" data-original-width="652" height="221" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYowd7lfKHrEuPZQCUXQLDMYCQTFgidyLVve6R0uHI_LlspShFTcouFeygSseQjtZHMoSjmoi9Y5xbWP3DUBhNkmlTcd392l-YebuzhdnrZcph7AmFHBTlB89zjpauc4TWYgHKc8IOzbpB/s400/1.png" width="400" /></a><br />
UnityでのScaleの1は、HoloLensで見て現実世界の1m<br />
つまり幅が0.1m~0.4m、長さが0.1m~0.5m、床からの高さが0.25m~0.6mの<br />
条件に当てはまった矩形を椅子として扱う感じです。<br />
<br />
GitHubでのサンプルプロジェクトはUnityだけでも動くように作っています。<br />
こんな感じで実行した後、ゲームシーンでマウスをぐりぐりと動かして<br />
空間情報を読み込んでみてください。ある程度読み込むとユニティちゃんがでてきます。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dx0UVqZ_n7gmqSymdjoA7m1E0ZrvAyKKl9ittYlAZi_5YD1Ikt1oFSWZWzGX93CZf4sG3d-BJ9y4z4kfk9oSA' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div>
<br />
結構時間がかかりますので、面倒な方は、<br />
ChairDetection.csのpublicのプロパティ<br />
Min Area For Complete、Min Horiz Area For Complete、Min Wall Area For Completeの値を<br />
小さくしてみてください。実機ではある程度空間情報が必要ですが<br />
Unity上ではそれぞれの値を半分くらいにしても大丈夫だと思います。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMkOSvd68-5V0HpuvrGsxfiVET5LZ1PZr7OsKvsoZf16a4aEeZoLhewBdaIfyqNmiqMP_FGf0BDBb-lNNUfBgOvz5jBTM3f1FJEV3nQt1bWYTRug5Gar2v384uf3lThOMIpiXctqudDLXT/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="487" data-original-width="755" height="206" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjMkOSvd68-5V0HpuvrGsxfiVET5LZ1PZr7OsKvsoZf16a4aEeZoLhewBdaIfyqNmiqMP_FGf0BDBb-lNNUfBgOvz5jBTM3f1FJEV3nQt1bWYTRug5Gar2v384uf3lThOMIpiXctqudDLXT/s320/2.png" width="320" /></a></div>
SpatialUnderstandingのサンプルは、全部の機能がてんこ盛りにされているため<br />
逆に、やりたいことだけを抜き出すのにかなり苦労します。<br />
今回、かなりコードが短くできたので<br />
他の開発者さんの理解の助けになれば幸いです。<br />
<br />ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-12362671245814295332017-09-14T09:52:00.000+09:002017-09-14T09:52:27.304+09:00HoloLensの開発 SpatialUnderstandingDllTopologyで壁にオブジェクト配置してみるお疲れ様です。ZuQ9->Nnです。<br />
今回も、前回に引き続きSpatialUnderstandingの話題です。<br />
<br />
SpatialUnderstandingには検知した壁、天井、床にオブジェクト配置する機能があります。<br />
今回はSpatialUnderstandingDllTopologyというクラスを用いて<br />
壁にオブジェクト配置に挑戦してみます。<br />
<br />
<a href="https://unity3d.com/unity/whats-new/unity-5.6.2">Unity 5.6.2f1</a>と<b><u><span style="color: #0066cc;">HoloToolkit-Unity-v1.5.8.0.unitypackage</span></u></b><br />
<span style="color: #0066cc;"><u><b>HoloToolkit-Unity-Tests-v1.5.8.0.unitypackage</b> </u></span>を利用します。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQAp9yn4T1KU323oS0fXp77Yk6_V5x4pTXEZTXhmL5QbSPf9mkzS92sDERuHOuma_LymU62LntzDI0Ncdx3me9TyYBdwcTlH8dKNFjq9MsrEpnDxshqnzV_b6JgPn7JVOE4MH3ALo9Xnnq/s1600/%25E7%2584%25A1%25E9%25A1%258C2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="462" data-original-width="1173" height="126" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQAp9yn4T1KU323oS0fXp77Yk6_V5x4pTXEZTXhmL5QbSPf9mkzS92sDERuHOuma_LymU62LntzDI0Ncdx3me9TyYBdwcTlH8dKNFjq9MsrEpnDxshqnzV_b6JgPn7JVOE4MH3ALo9Xnnq/s320/%25E7%2584%25A1%25E9%25A1%258C2.png" width="320" /></a></div>
まずは、HoloToolkit-Unity-v1.5.8.0.unitypackageをすべてインポート<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyxGJO-1QRbuYguzFVNSxv_elr8TJg6-WqrYoEoGybxIbCL-A_ONJaFB_Ci_Mqn3thkLbVcZjHn-L2H0bwmuL6M5hM3y597oKIzHiDKdUZZ6Dj2_I3JyRzJfJuKY1x1OPikmGilTpeWUmI/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="525" data-original-width="525" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyxGJO-1QRbuYguzFVNSxv_elr8TJg6-WqrYoEoGybxIbCL-A_ONJaFB_Ci_Mqn3thkLbVcZjHn-L2H0bwmuL6M5hM3y597oKIzHiDKdUZZ6Dj2_I3JyRzJfJuKY1x1OPikmGilTpeWUmI/s320/3.png" width="320" /></a></div>
<br />
次にHoloToolkit-Unity-Tests-v1.5.8.0.unitypackageの<br />
MediumRoomWithHomeFurniture.fbxのみ<br />
チェックしてインポートします。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRUYtBWFGX7DEMaDhez39F9Qaf-Bg5qDpaqlptIbvu-IlB-x48QiXprblnBVLJizTpJtVMae_sn1LQNdfUW0dM-SkkRSgpxT72pLftOAMOACEHxLe4MLKMfEH9i9udQi19fcgBpVVX4c2s/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="525" data-original-width="525" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgRUYtBWFGX7DEMaDhez39F9Qaf-Bg5qDpaqlptIbvu-IlB-x48QiXprblnBVLJizTpJtVMae_sn1LQNdfUW0dM-SkkRSgpxT72pLftOAMOACEHxLe4MLKMfEH9i9udQi19fcgBpVVX4c2s/s320/4.png" width="320" /></a></div>
次にプロジェクトの設定を行います。UnityのHoloToolkitメニューから<br />
Configure > Apply Hololens Projectを選択、<br />
表示されたポップアップメニューのApplyをおします。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZW_9qiE5RSMj_WslygVCqAKui1oiv7IEKtfXdbls6VNXpC-HSW_WI3xxFEC2eiO5HW4wasL-DmPNVtYrMwjBVjMfxnakbtRGx3p6OGT6y-_Rnw7DQkVSDAnlUWAK-Z73R6w4P0iVMF6Zy/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="705" data-original-width="996" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZW_9qiE5RSMj_WslygVCqAKui1oiv7IEKtfXdbls6VNXpC-HSW_WI3xxFEC2eiO5HW4wasL-DmPNVtYrMwjBVjMfxnakbtRGx3p6OGT6y-_Rnw7DQkVSDAnlUWAK-Z73R6w4P0iVMF6Zy/s320/6.png" width="320" /></a></div>
続いてUnityのHoloToolkitメニューから<br />
Configure > Apply Hololens Capablity Settingを選択、<br />
Spatial PerceptionをチェックしてApplyをおします。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6FsK_J15k0p1XkbdFCxw0TI0j5b2TndeQ9ToNHBE575rTM7Wo2u-ZRtmT-6ACU8NrrR3LfoEcnfWKehB_JoiEdEh-WsHDd2zGpMtFD1ga0lX7f5qBR9GA5nTS90C9BNgpvafjDIpnhTTB/s1600/8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="702" data-original-width="808" height="278" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj6FsK_J15k0p1XkbdFCxw0TI0j5b2TndeQ9ToNHBE575rTM7Wo2u-ZRtmT-6ACU8NrrR3LfoEcnfWKehB_JoiEdEh-WsHDd2zGpMtFD1ga0lX7f5qBR9GA5nTS90C9BNgpvafjDIpnhTTB/s320/8.png" width="320" /></a></div>
<span id="goog_1263149691"></span><span id="goog_1263149692">HierarchyのMain Cameraを右クリックで選択</span><br />
表示されたメニューからDeleteで削除します。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDPHpFtZ-_nJKSVDXr04dWEYLLilSH6-kNbwTq-u6OseNp_5mi7nqYZzRe4znDcW-TNzQQvTOiRAA4XWQgZLgiqpIXFP0Z_-tZ1F-bpClUIZ8aRj3lvM9Br7Zs9d8iu7YUKTUDqDfWfusy/s1600/9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="653" data-original-width="446" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDPHpFtZ-_nJKSVDXr04dWEYLLilSH6-kNbwTq-u6OseNp_5mi7nqYZzRe4znDcW-TNzQQvTOiRAA4XWQgZLgiqpIXFP0Z_-tZ1F-bpClUIZ8aRj3lvM9Br7Zs9d8iu7YUKTUDqDfWfusy/s320/9.png" width="218" /></a></div>
HoloLensCamera、InputManager、Cusor、SpatialMapping、SpatialUnderstandingの<br />
PrefabをHierarchyに置きます。<br />
(HoloLensCamera、InputManagerはProjectのHoloToolkit > Input > Prefabs<br />
CusorはHoloToolkit > Input > Prefabs > Cursor<br />
SpatialMappingはHoloToolkit > SpatialMapping > Prefabs<br />
SpatialUnderstandingはHoloToolkit > SpatialUnderstanding > Prefabsの中です)<br />
<br />
HierarchyのSpatialMappingを選択Room Modelのプロパティに<br />
MediumRoomWithHomeFurniture.fbxを選択しアタッチします。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPrhhyphenhyphenu8sfqmlO3yyfuiJ7AMGIja7dGRnW-XIFhy1GSryeIR6lzJbeZA5k-HG8hCXw0vPDFrcg5DWEqMovW2_d6cs-Wo42Q39jEIjz_By9wB6lXME6Owtu8Eawk_gBP8symIh66CyMJBI3/s1600/%25E7%2584%25A1%25E9%25A1%258C.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="725" data-original-width="807" height="287" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPrhhyphenhyphenu8sfqmlO3yyfuiJ7AMGIja7dGRnW-XIFhy1GSryeIR6lzJbeZA5k-HG8hCXw0vPDFrcg5DWEqMovW2_d6cs-Wo42Q39jEIjz_By9wB6lXME6Owtu8Eawk_gBP8symIh66CyMJBI3/s320/%25E7%2584%25A1%25E9%25A1%258C.png" width="320" /></a></div>
HierarchyのSpatialMappingを選択Spatial Mapping Managerの<br />
Draw Visual MesheのチェックをOFFにします。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-q5WNI-V-usP1lVMf5khkeUQhMuE8lQzYLEgL6pJrgLmLcfx6dVpQL2MlyZns1mf-ovAtLBO30aC93Sep46AgPkziL_I_oxtda3xlPb2QzyzRcESjBjXUjWrA82Ur76W8XgH9Ss45yFM2/s1600/11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="723" data-original-width="839" height="275" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-q5WNI-V-usP1lVMf5khkeUQhMuE8lQzYLEgL6pJrgLmLcfx6dVpQL2MlyZns1mf-ovAtLBO30aC93Sep46AgPkziL_I_oxtda3xlPb2QzyzRcESjBjXUjWrA82Ur76W8XgH9Ss45yFM2/s320/11.png" width="320" /></a></div>
UnityのProjectに適当な画像ファイルを追加します。<br />
(今回はskey.pngという空の画像を追加しました。)<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRg8P_6gC5olvbGTPPC2G3HsgIfojA647Lwcyj4FON_ZrzFGgujXgPEU7q4eTV87QLDQ2jz4sP4PmxojGo8n1UiJ54XzJfQVAxLW-UebfzRPnmJMcTu7qkXCFvHC3aZ7HdcfeLilX8jAYW/s1600/12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="694" data-original-width="359" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRg8P_6gC5olvbGTPPC2G3HsgIfojA647Lwcyj4FON_ZrzFGgujXgPEU7q4eTV87QLDQ2jz4sP4PmxojGo8n1UiJ54XzJfQVAxLW-UebfzRPnmJMcTu7qkXCFvHC3aZ7HdcfeLilX8jAYW/s320/12.png" width="165" /></a></div>
HierarchyのCreate > 3D Object Planeを選択し、Planeを作成<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgP8kaw-MSQBcHfTo9Cs7s3umdRIPy2mCYvasFqY1u0HTEJ1TA2i61ST5Y1_5cZgB8YdXEG4OKag2L9ZDNsHRTn4pzyjvGPCZ810ykAox-Zzrg4-lsK0TT3nI3X_-ZdnNBVbVOISml6RALe/s1600/13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="651" data-original-width="594" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgP8kaw-MSQBcHfTo9Cs7s3umdRIPy2mCYvasFqY1u0HTEJ1TA2i61ST5Y1_5cZgB8YdXEG4OKag2L9ZDNsHRTn4pzyjvGPCZ810ykAox-Zzrg4-lsK0TT3nI3X_-ZdnNBVbVOISml6RALe/s320/13.png" width="291" /></a></div>
作成されたPlaneの名前をposterに変更、大きさを適当に変更し(サンプルでは x0.1 y0.1 z0.1)<br />
rotationのxを90に変更、Unityに追加した画像ファイルをposterのMaterialにします。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTQhyphenhyphenYP7eUqCVt_UqIgiZyZPuL8jNyZfBvQoWY1fl9_U4TjDNbQFZ13dx1iuI1nrugJx5VdVAvqGmsThrdabUCo8K7QJt2oZMj-IyacsTm9QVKdpxogNm_V4X4pUkUZ6c-SSMcnO3o0CYB/s1600/14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="684" data-original-width="763" height="286" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgTQhyphenhyphenYP7eUqCVt_UqIgiZyZPuL8jNyZfBvQoWY1fl9_U4TjDNbQFZ13dx1iuI1nrugJx5VdVAvqGmsThrdabUCo8K7QJt2oZMj-IyacsTm9QVKdpxogNm_V4X4pUkUZ6c-SSMcnO3o0CYB/s320/14.png" width="320" /></a></div>
HierarchyのposterをProjectにドラグアンドドロップでPrefab化した後<br />
Hierarchyのposterは削除します。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ3Df4muYQwHdX5C7MkLeTCmPzhp0O_H0gCG11tO-QxqxpJfh3EyFGOXL-RzgMOiA-S5Te0oMHZnrnGYceuaGJmY3437LBip9GM_PActipzJpy2TzQQ0eMv-9Bx6KN0uXSVRbIRB5P7RIp/s1600/16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="660" data-original-width="356" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ3Df4muYQwHdX5C7MkLeTCmPzhp0O_H0gCG11tO-QxqxpJfh3EyFGOXL-RzgMOiA-S5Te0oMHZnrnGYceuaGJmY3437LBip9GM_PActipzJpy2TzQQ0eMv-9Bx6KN0uXSVRbIRB5P7RIp/s320/16.png" width="172" /></a></div>
<br />
ProjectのCreateからC# Scriptを選択、Scriptの名前をTopologySampleとします。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpnPP3nrz974VD13FTRKogPofGnSyxZJXQhcSLE9xkXTh5fv0G5q4iHKa-TZoccJaHcyvjaIU3i21x93PueW8VFEO0MMvf51oiEvfs1eY8rGJflIn4zZNw8R0asB89t1A9zkaLGY4RdxY3/s1600/18.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="731" data-original-width="702" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpnPP3nrz974VD13FTRKogPofGnSyxZJXQhcSLE9xkXTh5fv0G5q4iHKa-TZoccJaHcyvjaIU3i21x93PueW8VFEO0MMvf51oiEvfs1eY8rGJflIn4zZNw8R0asB89t1A9zkaLGY4RdxY3/s320/18.png" width="307" /></a></div>
<br />
TopologySampleの中身はこんな感じです。<br />
<br />
<script src="https://gist.github.com/ZuQ9Nn/cf354028c89ae1f7806da4d5f2dbd421.js"></script>
HierarchyのCreate Emptyで空のGame Objectを追加し<br />
GameObjectにTopologySampleのScriptをアタッチ、<br />
TopologySampleのWall Prefabプロパティにposterのprefabをアタッチして完成。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyNu_1bgy6zrNrn1UgL8l_mdOTt1V5jLLpSFCvxc3jrs-FtojtWD5K_-ujrhGpd75OmYK21CzYRdFhtm7FZLZC32VLVLop7m4ydaqexen5mnsFhuDmpx7EXtY-YIlj73NpcPUJVTRQ-XAh/s1600/20.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="713" data-original-width="1111" height="205" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyNu_1bgy6zrNrn1UgL8l_mdOTt1V5jLLpSFCvxc3jrs-FtojtWD5K_-ujrhGpd75OmYK21CzYRdFhtm7FZLZC32VLVLop7m4ydaqexen5mnsFhuDmpx7EXtY-YIlj73NpcPUJVTRQ-XAh/s320/20.png" width="320" /></a></div>
Unityを実行するとこんな感じで壁に、空のポスターが表示されます。<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dwpy2A_O3EryBcIiwi60uIkW-bdGsa9tSE5OMdUKkYKek7XunXHluStgxvdOWXKALn8HxlSsngBFCLECle1jQ' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div>
もちろん、SpatialUnderstandingDllTopologyを使わなくても<br />
同じように壁にオブジェクト配置することは可能です。<br />
<br />
Microsoftの<a href="https://developer.microsoft.com/en-us/windows/mixed-reality/holograms_230">Holograms 230</a> のサンプルはSpatialMappingとSurfaceMeshesToPlanes.csで<br />
壁の検知と壁にポスターを張っています。<br />
<br />
SpatialUnderstandingDllTopology.QueryTopology_FindPositionsOnWallsの<br />
メソッドの引数を調整することで細かく壁の位置が指定できるのが特徴ですね。<br />
<br />
より細かく制御する場合はSpatialUnderstandingDllTopologyを<br />
用いるといったすみわけかな。<br />
<br />
GitHubで見つけた<a href="https://github.com/sGambolati/SpatialDemo">SpatialDemo</a>では壁だけではなく<br />
SpatialUnderstandingDllTopology.QueryTopology_FindPositionsOnFloor<br />
SpatialUnderstandingDllTopology.QueryTopology_FindPositionsSittable<br />
なんかも利用していますので、併せて参考にしてください。<br />
<br />ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-77540215471689826912017-08-23T09:09:00.000+09:002017-08-23T09:09:36.138+09:00fastlane勉強会 vol4 に参加お疲れ様です。 ZuQ9->Nnです<br />
2017/08/22(日) <a href="https://fastlane.connpass.com/event/63231/">fastlane勉強会 vol4 が</a>開催されたので参加しました。<br />
場所は<a href="https://origami.com/">株式会社Origami</a> さん<br />
実はこの勉強会は何度お参加しているのですが<br />
今回の目的は勉強会の参加ってよりも、自分の発表です。<br />
<br />
発表内容はFabricでfastlaneを使ってみるというもの<br />
<br />
<script async="" class="speakerdeck-embed" data-id="dfc29be5a2e1488d9d17cdb99b3c49d6" data-ratio="1.33333333333333" src="//speakerdeck.com/assets/embed.js"></script>
前から気になっていたので今回、自分の勉強もかねて<br />
どこまでこのツールが使えるかを検証したかったのでこのテーマを選びました。<br />
<br />
発表が久しぶりすぎて緊張しすぎてしまい。かなりグダグダになってしまいましたね。<br />
発表中もFabricとfastlaneの話がまじってしまい。<br />
自分の中で混乱してしまう感じでした。<br />
あと、自分の発表に集中しすぎて、他の方の発表を集中して聞けなかった。orz..<br />
<br />
特にmatchあたりは、現状きちんと使えて無いので<br />
もう一度資料だけでも読み直しておきます。<br />
<br />
あーなんだか悔しぃ。。リベンジしてぇって感じ。<br />
あと、もう少し余裕も欲しいですね。<br />
懇親会も料理の写真撮っておけばよかった。ここに載せられたのに。。<br />
<br />
また、宣言して自分を追い込むかなぁ。<br />
最近こんな感じでしか行動できてないけど。。<br />
また、その時の気分、ノリで決めたいと思います。<br />
<br />
最後に、今回の発表の機会をいただけて大変ありがとうございました。<br />
これを糧に次のステップに進めるように精進します。<br />
<br />ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-47270033601924440342017-06-04T10:04:00.001+09:002017-06-05T05:30:43.488+09:00HoloLens開発 SpatialUnderstanding事始め 空間検知と空間内の情報(天井、床、壁)の判定までお疲れ様です。ZuQ9->Nnです。<br />
久しぶりのHoloLens開発の進捗。<br />
今回はSpatialUnderstandingです。<br />
<br />
SpatialUnderstandingはクラス名、メソッド名が長くまた公式のサンプル<br />
HoloToolkit-Examples > SpatialUnderstanding > SpatialUnderstanding-FeatureOverviewの<br />
中のコードもかなり多めで解析が困難です。<br />
ですから、まず空間検知と空間内の情報(天井、床、壁)の判定までを行っていきます。<br />
<br />
今回は、Unity 5.6.1f1 (64-bit)<br />
HoloToolKit-UnityはGitHubの最新を取得して行いました。<br />
<br />
Unityのプロジェクトを作成し、<br />
HoloToolKit-UnityとHoloToolkit-Testsのフォルダーを追加してください。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinyvEVgBAKQAVWbJnKmLNx1_ayfGj9umnLdjg_3IklKLOD9OOlREsHm1Fe3dY9x56t9G1Y2qTwCC7EUbchkNu3q7yBiE5z3kK69RNu8mzfKR4k3dTi4LU8s9oSlQIbDjo1uMzfFsK9ELTg/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="438" data-original-width="1389" height="100" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinyvEVgBAKQAVWbJnKmLNx1_ayfGj9umnLdjg_3IklKLOD9OOlREsHm1Fe3dY9x56t9G1Y2qTwCC7EUbchkNu3q7yBiE5z3kK69RNu8mzfKR4k3dTi4LU8s9oSlQIbDjo1uMzfFsK9ELTg/s320/1.png" width="320" /></a></div>
<br />
UnityにHoloToolKitのメニューが表示されますので<br />
Configure > Apply HoloLens Project Settingsを選択<br />
表示されたメニューをそのままApply > YES<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjimdZygLOknc0e7EKtFauGux_7_8sg2lI8bRy3A930QHdCkaKWR9GtVWcto43GZd0Q34djsbknbm5W2xWeVZjMlBZJhuDXBgy77TaNucm7S_I5KZbDMF2OK2uPSt_pL2Q5h3oPwnC6wYME/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="495" data-original-width="1258" height="125" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjimdZygLOknc0e7EKtFauGux_7_8sg2lI8bRy3A930QHdCkaKWR9GtVWcto43GZd0Q34djsbknbm5W2xWeVZjMlBZJhuDXBgy77TaNucm7S_I5KZbDMF2OK2uPSt_pL2Q5h3oPwnC6wYME/s320/2.png" width="320" /></a></div>
<br />
プロジェクトの設定が終わったら再びUnityにHoloToolKitのメニューから<br />
Configure > Apply HoloLens Capability Settingsを選択<br />
Spatial PerceptionをチェックしApply<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAbl-IJXxbKtHdEo48lzWfZNvCFyoPJAhgBlXRfH6rilurif5PUmCBTcNJncXNj3QMv70iIZlugXSKOcgA2KJTGun9JOn6B8RH7_HiUZmlsaK9_UgK5S29GOsihBVx84Vz-ivYtw6zX5Gi/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="480" data-original-width="1279" height="120" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAbl-IJXxbKtHdEo48lzWfZNvCFyoPJAhgBlXRfH6rilurif5PUmCBTcNJncXNj3QMv70iIZlugXSKOcgA2KJTGun9JOn6B8RH7_HiUZmlsaK9_UgK5S29GOsihBVx84Vz-ivYtw6zX5Gi/s320/3.png" width="320" /></a></div>
<br />
次に、 HierarchyのMain cameraを右クリック<br />
メニューからDelelteで削除します<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjelqQfrP_x7A5rU_X05L1hohS-sq2P-pcSUcFe4AtYqJz0IBYV6XK2AXTn6j5SxSzqeWQmMbn_DWZDlFd1APtUTG8XvXOSnQcOkauEOnra_ZVjWBl3SeuUuLhxmB8k5nxUu9VrLK_noySe/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="597" data-original-width="427" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjelqQfrP_x7A5rU_X05L1hohS-sq2P-pcSUcFe4AtYqJz0IBYV6XK2AXTn6j5SxSzqeWQmMbn_DWZDlFd1APtUTG8XvXOSnQcOkauEOnra_ZVjWBl3SeuUuLhxmB8k5nxUu9VrLK_noySe/s320/4.png" width="228" /></a></div>
<br />
Project内のHoloToolkit > Input > PrefabのHoloLensCamera<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFOJzPRvfY1b5wgqZI7ikVve-ZJctHltAvFfgSvQb2YOeX00e8dNVqk6HdxD1sHZF78tPD79hCFWIO8zk0EoLdjqV6sbZ8QEa3Cf_oktKQhlKVZVb3jSXgNMoa5KR2Su6J9FRb0rjurcHT/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="738" data-original-width="400" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFOJzPRvfY1b5wgqZI7ikVve-ZJctHltAvFfgSvQb2YOeX00e8dNVqk6HdxD1sHZF78tPD79hCFWIO8zk0EoLdjqV6sbZ8QEa3Cf_oktKQhlKVZVb3jSXgNMoa5KR2Su6J9FRb0rjurcHT/s320/5.png" width="173" /></a></div>
<br />
続いてInputManager、<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRAbPmQ7_6TE7g-GQqACQlbjHtV2FV8QhLFsvRfouBBFXcMQV66SuaqVw29KtOMfbtWu4zZcE1jD2kKINNx0nLZgst6sPX-lJhFASDGmHTRA-kQYXuUXlJtV3eXEXOU5aR86Lk6GQpuFWK/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="724" data-original-width="429" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRAbPmQ7_6TE7g-GQqACQlbjHtV2FV8QhLFsvRfouBBFXcMQV66SuaqVw29KtOMfbtWu4zZcE1jD2kKINNx0nLZgst6sPX-lJhFASDGmHTRA-kQYXuUXlJtV3eXEXOU5aR86Lk6GQpuFWK/s320/6.png" width="189" /></a></div>
<br />
HoloToolkit > Input > Prefab > Cursorの中のCursor<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyxczxnYm_hOypXI29XSo-jDO4B2BWiGsIMHTedHoyMVHYOII8W3oVMMGPYnKYXPpEF5ZIuSdgSiLNZeXJLNMosHP8MFvZ16X2gkSYPo8fUFoNoubZuVfJ-GXs6aW7fzf9UaymEQVOD3Mh/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="732" data-original-width="384" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyxczxnYm_hOypXI29XSo-jDO4B2BWiGsIMHTedHoyMVHYOII8W3oVMMGPYnKYXPpEF5ZIuSdgSiLNZeXJLNMosHP8MFvZ16X2gkSYPo8fUFoNoubZuVfJ-GXs6aW7fzf9UaymEQVOD3Mh/s320/6.png" width="167" /></a></div>
<br />
HoloToolkit > SpatialMapping > Preabsの中のSpatialMapping<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_Q48s147H-UO29yx1SjJ5aHSxT05CCNRuJBOkddl7UJhcS1cn3OWrC89TbOJTAlmGTeRmY8_vJp-4-antmC-lQVhyjAqKd88UIFlHkzhQIOhDVs2bwltyKbkRP3xKzEuJKoev0l1wMJT1/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="718" data-original-width="361" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_Q48s147H-UO29yx1SjJ5aHSxT05CCNRuJBOkddl7UJhcS1cn3OWrC89TbOJTAlmGTeRmY8_vJp-4-antmC-lQVhyjAqKd88UIFlHkzhQIOhDVs2bwltyKbkRP3xKzEuJKoev0l1wMJT1/s320/7.png" width="160" /></a></div>
<br />
HoloToolkit > SpatialUnderstanding > Preabsの中のSpatialUnderstandingを<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpMF9uDTWzSP3i-fvg7qSRvCnNCguRG6VZzXoANmyn2k5kI86arGNxeaHr7SDx4ciXtvdRFrsSZgiR0m1DxBx-QSsSLrqBzg8wZrIo-ITVt3BaP3YMq9e83FQIo0jNaEYo8Rzc_krg2zDb/s1600/8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="750" data-original-width="368" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpMF9uDTWzSP3i-fvg7qSRvCnNCguRG6VZzXoANmyn2k5kI86arGNxeaHr7SDx4ciXtvdRFrsSZgiR0m1DxBx-QSsSLrqBzg8wZrIo-ITVt3BaP3YMq9e83FQIo0jNaEYo8Rzc_krg2zDb/s320/8.png" width="157" /></a></div>
<br />
それぞれHierarchyに追加<br />
<br />
HierarchyのSpatialMappingを選択し、Inspectorの<br />
Object Surface Obsever Room Modelのプロパティをクリック<br />
MediumRoomWithHomeFurnitureを選択しセット<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmXnDxJ9IUFOkUbjTfN5LEGO7uzZW58LKVVuDGNpSImOXjNx4lVQiCPaEDo2P_bHST3bVTQQQDUpcQRasb5wnlilOtLO5BQp7QY6ezRfd1LDH_9uwikZeVDqrwD1KwFPfhDak6iyw3-uFK/s1600/9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="739" data-original-width="749" height="315" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmXnDxJ9IUFOkUbjTfN5LEGO7uzZW58LKVVuDGNpSImOXjNx4lVQiCPaEDo2P_bHST3bVTQQQDUpcQRasb5wnlilOtLO5BQp7QY6ezRfd1LDH_9uwikZeVDqrwD1KwFPfhDak6iyw3-uFK/s320/9.png" width="320" /></a></div>
<br />
Spatial Mapping ManagerのDraw Visual Meshesのチェックを外します。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyFJ-McSWAZD5AJOoU3FmQc0ZAU2gshgbQQxF64O_u_x4JHdc2LV4AH4uKWR0spnTYz5gB7A2FzWyBG_8Qz26V66pAO78osEbv4m0PL9e6PB4g0yLvVY9tUlndQG1A50SGFuPLqnVU5IPr/s1600/10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="345" data-original-width="371" height="297" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyFJ-McSWAZD5AJOoU3FmQc0ZAU2gshgbQQxF64O_u_x4JHdc2LV4AH4uKWR0spnTYz5gB7A2FzWyBG_8Qz26V66pAO78osEbv4m0PL9e6PB4g0yLvVY9tUlndQG1A50SGFuPLqnVU5IPr/s320/10.png" width="320" /></a></div>
<br />
この段階でいったんUnityを実行してみると。<br />
こんな感じて空間検知が実行されメッシュが表示されます。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCSx8TjOmF0u0A8Twg0M87ehZiLHOR4ftfv0sdUDdIjgHVdIZGyVejAZWpRsk0EOoU_dyqMlZMdE_iICIo9kKNTYthtVyjbz0Qv3AyKo8mGx3iFqMoCgqp4C7cDWxJSh9zNx-d_kAVQPHp/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+%252814%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="900" data-original-width="1600" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCSx8TjOmF0u0A8Twg0M87ehZiLHOR4ftfv0sdUDdIjgHVdIZGyVejAZWpRsk0EOoU_dyqMlZMdE_iICIo9kKNTYthtVyjbz0Qv3AyKo8mGx3iFqMoCgqp4C7cDWxJSh9zNx-d_kAVQPHp/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+%252814%2529.png" width="320" /></a></div>
<br />
SpatialMapping同様、空間検知だけならノーコーディングでできてしまいます。<br />
<br />
次にHierarchyのCreateから 3DObject > 3D Textを選択し追加<br />
3D TextのInspectorで見やすい位置、設定にしてください。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNRhDQWSnL1h4dBOlpWWDlGZmgfmgT1Q8msZg1xkVvsI_oNNkvfyjiG5zseFEGD6gWvHc2KmTxAUoYOtgrGEhPAkK6M76-K-Kkz4zHzQvTk78wMr-X_mZDmD1X37t61kDam2jFi1qj-M2c/s1600/11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="625" data-original-width="642" height="311" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNRhDQWSnL1h4dBOlpWWDlGZmgfmgT1Q8msZg1xkVvsI_oNNkvfyjiG5zseFEGD6gWvHc2KmTxAUoYOtgrGEhPAkK6M76-K-Kkz4zHzQvTk78wMr-X_mZDmD1X37t61kDam2jFi1qj-M2c/s320/11.png" width="320" /></a></div>
<br />
今回はTransformのpositionをx:0 y:0 z;40 <br />
Text MehのAnchorをMiddle Cneter AlignmentをCenter<br />
Font Sizeを30に設定しました。(ここはご自由にお好きな設定にしてください)<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8ICjPuYO4wRxOFGDnq5EMtG6c5C3x3kWz-ckJTRgNFiTM_sW2L9lKr2xuO7uQYtJ86mu7olOxxybgO4bHGyFC7KxGWL4Hog60tVjqFcjpxYxcnh5VfdXhyphenhyphenjzp9fxBGW5eNYJCAtEvIJxy/s1600/12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="800" data-original-width="816" height="313" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8ICjPuYO4wRxOFGDnq5EMtG6c5C3x3kWz-ckJTRgNFiTM_sW2L9lKr2xuO7uQYtJ86mu7olOxxybgO4bHGyFC7KxGWL4Hog60tVjqFcjpxYxcnh5VfdXhyphenhyphenjzp9fxBGW5eNYJCAtEvIJxy/s320/12.png" width="320" /></a></div>
<br />
<br />
つづいて3D TextのInspector Add ComponentでTaglongと<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZggvVU3iDIwjuvw_VUBaoqpWCiEtULiXRQvjtqqfw3HEeeWQjIhzaubxfypCmEtVP7e0lGRVRI8bRJLkY3CgFnlc_nVGK-kisir6mvUYEjjWzPTfsDj1iMRhT_lmmCIVCD76m5ksh1Sj3/s1600/13.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="611" data-original-width="879" height="222" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgZggvVU3iDIwjuvw_VUBaoqpWCiEtULiXRQvjtqqfw3HEeeWQjIhzaubxfypCmEtVP7e0lGRVRI8bRJLkY3CgFnlc_nVGK-kisir6mvUYEjjWzPTfsDj1iMRhT_lmmCIVCD76m5ksh1Sj3/s320/13.png" width="320" /></a></div>
<br />
BillboardのScriptを追加します<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJLycfUYtSwjb1xaxL1GMX0epJh94uAOIshNT657szVycG0_wkCwGdhiP7cNqjA5vTC0momJhtNR0XdrRu6CzxpfehaTeiP2QtV2mP9eAmmEqv9qucIYFwBzN_a8Mp1wCTFTOZv7rk51Ns/s1600/14.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="740" data-original-width="729" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJLycfUYtSwjb1xaxL1GMX0epJh94uAOIshNT657szVycG0_wkCwGdhiP7cNqjA5vTC0momJhtNR0XdrRu6CzxpfehaTeiP2QtV2mP9eAmmEqv9qucIYFwBzN_a8Mp1wCTFTOZv7rk51Ns/s320/14.png" width="315" /></a></div>
<br />
ProjectのCreateからC# Script、スクリプトの名前を<br />
SpatialUnserstandingTestとします。<br />
<br />
SpatialUnserstandingTestの中身はこんな感じ<br />
<br />
<div style="border: 1px solid #333333; margin-bottom: 10px; padding: 10px;">
using UnityEngine;<br />
using HoloToolkit.Unity;<br />
using System;<br />
<br />
public class SpatialUnserstandingTest : MonoBehaviour {<br />
<br />
public TextMesh textMesh = null;<br />
public float kMinAreaForComplete = 50.0f;<br />
public float kMinHorizAreaForComplete = 25.0f;<br />
public float kMinWallAreaForComplete = 10.0f;<br />
<br />
private void LateUpdate()<br />
{<br />
if (DoesScanMeetMinBarForCompletion)<br />
{<br />
SpatialUnderstanding.Instance.RequestFinishScan();<br />
}<br />
<br />
Vector3 rayPos = Camera.main.transform.position;<br />
Vector3 rayVec = Camera.main.transform.forward * 10.0f;<br />
<br />
IntPtr raycastResultPtr = SpatialUnderstanding.Instance.UnderstandingDLL.GetStaticRaycastResultPtr();<br />
SpatialUnderstandingDll.Imports.PlayspaceRaycast(<br />
rayPos.x,<br />
rayPos.y,<br />
rayPos.z,<br />
rayVec.x,<br />
rayVec.y,<br />
rayVec.z,<br />
raycastResultPtr);<br />
<br />
SpatialUnderstandingDll.Imports.RaycastResult rayCastResult = SpatialUnderstanding.Instance.UnderstandingDLL.GetStaticRaycastResult();<br />
textMesh.text = rayCastResult.SurfaceType.ToString();<br />
}<br />
private bool DoesScanMeetMinBarForCompletion<br />
{<br />
get<br />
{<br />
if ((SpatialUnderstanding.Instance.ScanState != SpatialUnderstanding.ScanStates.Scanning) ||<br />
(!SpatialUnderstanding.Instance.AllowSpatialUnderstanding))<br />
{<br />
return false;<br />
}<br />
<br />
IntPtr statsPtr = SpatialUnderstanding.Instance.UnderstandingDLL.GetStaticPlayspaceStatsPtr();<br />
if (SpatialUnderstandingDll.Imports.QueryPlayspaceStats(statsPtr) == 0)<br />
{<br />
return false;<br />
}<br />
<br />
SpatialUnderstandingDll.Imports.PlayspaceStats stats = SpatialUnderstanding.Instance.UnderstandingDLL.GetStaticPlayspaceStats();<br />
if ((stats.TotalSurfaceArea > kMinAreaForComplete) ||<br />
(stats.HorizSurfaceArea > kMinHorizAreaForComplete) ||<br />
(stats.WallSurfaceArea > kMinWallAreaForComplete))<br />
{<br />
return true;<br />
}<br />
return false;<br />
}<br />
}<br />
}<br />
<br /></div>
最後に、HierarchyのCreateからCreate EmptyでからのGameObjectを作成<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWDLiM-2ONOlhWO1C_VJ782wzbWopdyDyohslV_ayF5Y09Ui3mkTokC-jB4obak-aTRNkYT2KZiD1yc7XxGm8kJcbTBZAsKjbqYLiERjj7GmBQxgacwb-4cav_ajBL8DVSc9HMr3v6Kd6j/s1600/15.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="599" data-original-width="409" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgWDLiM-2ONOlhWO1C_VJ782wzbWopdyDyohslV_ayF5Y09Ui3mkTokC-jB4obak-aTRNkYT2KZiD1yc7XxGm8kJcbTBZAsKjbqYLiERjj7GmBQxgacwb-4cav_ajBL8DVSc9HMr3v6Kd6j/s320/15.png" width="218" /></a></div>
<br />
作成したGameObjectのAdd Componentで先ほど作成した<br />
SpatialUnserstandingTestとのスクリプトをアタッチ<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgl_XmQ74a_iwrLvYtlqR1pd-3bNVNn3P3BVdfqur__m-8c41pQhyphenhyphen-l75Qr5pPgZ-LMeDSqasmtjIWaz6-QYA6wlrWYUQMKeMIE9JkqadhUaSCjMY48ElKFmREFufVEafiVZsWJzT8KOEit/s1600/16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="680" data-original-width="746" height="291" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgl_XmQ74a_iwrLvYtlqR1pd-3bNVNn3P3BVdfqur__m-8c41pQhyphenhyphen-l75Qr5pPgZ-LMeDSqasmtjIWaz6-QYA6wlrWYUQMKeMIE9JkqadhUaSCjMY48ElKFmREFufVEafiVZsWJzT8KOEit/s320/16.png" width="320" /></a></div>
<br />
SpatialUnserstandingTestのText MeshにNew Textを設定<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggMq-237leTXlngwwDbe6HWKc0gHV1slK9QAGP5z9OgMINXi3FFLb2jgWmKQyr2z3aAgvwWaCWkHinvwd5PObnO5ht87QIB6QuhBWzFdkcNbyJWg_KKDNxIzRO_uuLocTBkCDevtV9Okgz/s1600/17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="520" data-original-width="838" height="198" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggMq-237leTXlngwwDbe6HWKc0gHV1slK9QAGP5z9OgMINXi3FFLb2jgWmKQyr2z3aAgvwWaCWkHinvwd5PObnO5ht87QIB6QuhBWzFdkcNbyJWg_KKDNxIzRO_uuLocTBkCDevtV9Okgz/s320/17.png" width="320" /></a></div>
<br />
これでUnityを実行、マウスでぐりぐり視線を動かすとこんな感じで<br />
Testに空間の情報が表示されます。<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dxTKrmUdu36Aor4GVoU7HmW9_o1AkmszFpKHYocsrnGECLvO3YggR83CU1i3iDABEBG-ewJn8ndeYpE-1kL2Q' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div>
<br />
それでは、SpatialMappingとSpatialUnserstandingとの相違点は何かといことですが<br />
僕の理解では下記の点かとおもいます。(間違っていた場合はご指摘ください。)<br />
<br />
*メッシュの形状が異なる<br />
これは一目瞭然なのですが、SpatialMappingは、かなり、<br />
ガタガタなメッシュが表示されるのに対し<br />
SpatialUnserstandingは場所によっては、<br />
とても綺麗なグリッド状のメッシュが表示されます。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj64Vk5wB1RXGYyeKN0UtnJ7tMhetnOHSZCe01MpEAW4KwOzqJFJ7BzxX01YOCfcK3IPFxc2LNi-VMUWhG8XHYvVNfbKT9qohEOGOHXuLezNsOhgLO5mQdi0nt9JWoBr4ANNeMBPp9WwaK5/s1600/18.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="423" data-original-width="1600" height="84" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj64Vk5wB1RXGYyeKN0UtnJ7tMhetnOHSZCe01MpEAW4KwOzqJFJ7BzxX01YOCfcK3IPFxc2LNi-VMUWhG8XHYvVNfbKT9qohEOGOHXuLezNsOhgLO5mQdi0nt9JWoBr4ANNeMBPp9WwaK5/s320/18.png" width="320" /></a></div>
<br />
*メッシュの構築プロセスが異なる<br />
これは文章で説明するとわかりにくいのですが、SpatialMappingは実行して<br />
時間がたてば行動しなくてもメッシュの情報が構築されていきます。<br />
SpatialUnserstandingは動画で示した通り、実行しただけでは、<br />
少ししかメッシュが表示されず<br />
積極的に視線を動かしていくことでメッシュの情報が構築されていきます。<br />
<br />
*SpatialUnserstandingは直接、空間内の情報(天井、壁、床)を判別できる。<br />
SpatialMappingはSurfaceMeshesToPlanes.csのMakePlanesメソッドを実行し<br />
SurfacePlaneオブジェクトを生成しないと空間内の天井、壁、床を判別できませんが<br />
SpatialUnserstandingは視線の先の情報を直接判別することができます。<br />
<br />
*空間内で判別できる情報がSpatialUnserstandingの方が多い<br />
SpatialMappingは、SurfacePlane.csにPlaneTypesのenumで定義されている<br />
Wall、Floor、Ceiling、Table、Unknownの5種類しか判別できないのに対し<br />
SpatialUnserstandingは、SpatialUnderstandingDll.csの<br />
内部クラスRaycastResultのSurfaceTypesのenumで定義されている<br />
Invalid、Other、Floor、FloorLike、Platform、Ceiling、WallExternal、WallLikeの8種類です<br />
<br />
*SpatialUnserstandingでは定義以外の空間内情報を独自定義することができる<br />
MicrosoftのSpatialUnserstanding公式のサンプルでは<br />
ChairやCouch(ソファーのような長椅子)を独自定義し利用しています。<br />
<br />
*SpatialUnserstandingでは空間内にオブジェクトを生成する便利関数が存在する<br />
HoloToolkit > SpatialMapping > Script内に<br />
SpatialUnderstandingDllObjectPlacement.csのスクリプトが用意されていて<br />
Create_OnFloor、Create_OnWall、Create_OnCeilingという、<br />
いかにもオブジェクトの生成を助けるような便利関数が存在しています。<br />
<br />
これらを見ていくと、今回おこなった空間検知、空間内の情報の判別を行った後<br />
最後のお便利関数を利用してオブジェクトを配置してくといった<br />
処理の流れになるかと思います。<br />
<br />
SpatialUnderstandingは、やはりコードも長く複雑な印象が強く<br />
苦手意識が強くなりますが、今回くらいの内容であれば<br />
意外と怖くないかも?っておもってくれる開発者が多くなるといいなぁと考えています。<br />
<br />
SpatialUnderstandingは情報も少なかったので<br />
個人的に参考にした記事のリンクも張っておきます<br />
<br />
<div>
Indubitable Development <br />
HoloLens Tutorial – Spatial Understanding<b></b></div>
<div>
<a href="http://www.cameronvetter.com/2016/12/21/hololens-tutorial-spatial-understanding/"><b>http://www.cameronvetter.com/2016/12/21/hololens-tutorial-spatial-understanding/</b></a></div>
<div>
<b><br /></b></div>
<div>
El Bruno<br />
#Hololens – Spatial Understanding vs Spatial Mapping, and a step-by-step on how to use it</div>
<div>
<a href="https://elbruno.com/2017/04/21/hololens-spatial-understanding-vs-spatial-mapping-and-a-step-by-step-on-how-to-use-it/"><b>https://elbruno.com/2017/04/21/hololens-spatial-understanding-vs-spatial-mapping-and-a-step-by-step-on-how-to-use-it/</b></a></div>
<div>
<b><br /></b></div>
<div>
Mike Taulty<br />
Hitchhiking the HoloToolkit-Unity, Leg 14–More with Spatial Understanding<b><br /><a href="https://mtaulty.com/2017/05/03/hitchhiking-the-holotoolkit-unity-leg-14-more-with-spatial-understanding/">https://mtaulty.com/2017/05/03/hitchhiking-the-holotoolkit-unity-leg-14-more-with-spatial-understanding/</a></b></div>
<b><br /></b>
ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com1tag:blogger.com,1999:blog-5081170311756045545.post-64788877685651720412017-05-01T22:26:00.001+09:002017-05-01T22:26:29.244+09:00とりあえずつかってみた、次世代ゲームエンジン Xenko プロジェクトの作成からRigdbodyでSphereを落とすまでお疲れ様です。ZuQ9->Nnです。<br />
<br />
最近UnityやHoloLensに関してまったく進捗があがらないまま<br />
時間のみ過ぎていき、焦りと無力さばかりがつのる悶々とした日々<br />
<br />
ゴールデンウイークはエンジニアの新技術研究期間?みたいなノリがあるので<br />
今回、気晴らしもかねて次世代ゲームエンジンとされるXenkoをつかってみました。<br />
<br />
Xenkoは2017/04/25にリリースされたばかりの新しいゲームエンジンで<br />
<a href="https://www.siliconstudio.co.jp/">シリコンスタジオ</a>という会社が開発、リリースを行っています。<br />
<br />
特徴は、なっといっても、<a href="https://git.xenko.com/xenko/Xenko-Runtime">XenkoそのものがGitLabでオープンソース</a>で開発されている事<br />
そして、エンジン部分がC#で実装されてることかと思います。<br />
ここら辺が「次世代」と言われているのかなって個人的には思います。<br />
<br />
さっそく使ってみたので、プロジェクトの作成から、<br />
RigdbodyでSphereを落とすまでをみていきたいと思います。<br />
<br />
本来なら、インストールとかもやるべきかなぁと思ったりしたのですが、<br />
それは、ほかの誰かが必ずやるだろうと思うので省略します。(*^^*)<br />
<br />
<b><span style="color: red; font-size: large;">勘違いしていたのですが、Xenkoそのものは、</span></b><br />
<b><span style="color: red; font-size: large;">setup.exeでWindows用しか</span></b><b><span style="color: red; font-size: large;">公式には提供されていません。</span></b><br />
<b><span style="color: red; font-size: large;">現状はMacでは動かせないようです。</span></b><br />
<b><br /></b>
ちなみに、僕が普段使っているWindowsマシーンは<br />
第四世代Intel Core i5、メモリ8G<br />
Windowsは、64bitのWindows 10 Proです。<br />
そちらでは、とくにインストールにはまることもありませんでした。<br />
<br />
Xenkoをインストールするとlauncherが出てきますのでそちらをクリック<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUy7XZSEdu6943Bxa1HjxyEWykCV3Ds5yov9Si-MkSVcgMGr-F_YcTewxOdhQJGhiP8QLfVQxse28CIjP7Ix0gTQmQ_PfPGHCxFqldlBWMyPByifWibxugzTfqunf4UmkfzqetF5lZ1yvi/s1600/X01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUy7XZSEdu6943Bxa1HjxyEWykCV3Ds5yov9Si-MkSVcgMGr-F_YcTewxOdhQJGhiP8QLfVQxse28CIjP7Ix0gTQmQ_PfPGHCxFqldlBWMyPByifWibxugzTfqunf4UmkfzqetF5lZ1yvi/s1600/X01.png" /></a></div>
launcherが起動したらStartをクリック<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNC-yxZK-ZwbmFQsYDBC9r97CD8AcwfQxs-cSWzDBQIw9yZGN6OOwvo63kY8p1dhBYtwJgBUI-ZYB24OjgTTNgDu_s0t1YxoUYv4_gAZkW8rxyZwJST_CcHObR5rktc5bjMsTb3SR8Ezyw/s1600/X02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="153" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNC-yxZK-ZwbmFQsYDBC9r97CD8AcwfQxs-cSWzDBQIw9yZGN6OOwvo63kY8p1dhBYtwJgBUI-ZYB24OjgTTNgDu_s0t1YxoUYv4_gAZkW8rxyZwJST_CcHObR5rktc5bjMsTb3SR8Ezyw/s320/X02.png" width="320" /></a></div>
Project Selectionの画面でNew ProjectのNew Gameを選択<br />
(今回は保存場所とプロジェクト名はデフォルトのままですが<br />
こちらは自由に変更しても問題ありません。)<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsqg48hlElZ4GRxJkloECr0mi3vS1GBMgX908qeE3XITMWQXbCHT5n9J7v2mPjNKDGKzqibtkfBzn2gU_oIqZXK3NgBcdH1Sav_kV8YSkVLAdP9R3gQqbMjhgWvyHFsqtxEIZViD6mCGSq/s1600/X3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="210" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsqg48hlElZ4GRxJkloECr0mi3vS1GBMgX908qeE3XITMWQXbCHT5n9J7v2mPjNKDGKzqibtkfBzn2gU_oIqZXK3NgBcdH1Sav_kV8YSkVLAdP9R3gQqbMjhgWvyHFsqtxEIZViD6mCGSq/s320/X3.png" width="320" /></a></div>
<div>
プロジェクトのターゲットはWindows、Linx、UWP、Android、iOSとなっています。</div>
<div>
Unityと違って、Web PlayerとかWebGLのサポートは現在のところ全くありません。</div>
<div>
<br /></div>
<div>
今回はとりあえずWindowsのみを選択しOKをおしました。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6gkxGE414Rs2eqzUd9HBKFFnegmvzfONMizSulR1AaTGB-EkP61xG6YGvCc2WxX9Sly74z9P-8xpgnC2mGZEhBqQ_agAbskrK357xa2W1-sZJL_nqwxczaITie9pVma-tdzVufpGi-3M3/s1600/X04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6gkxGE414Rs2eqzUd9HBKFFnegmvzfONMizSulR1AaTGB-EkP61xG6YGvCc2WxX9Sly74z9P-8xpgnC2mGZEhBqQ_agAbskrK357xa2W1-sZJL_nqwxczaITie9pVma-tdzVufpGi-3M3/s320/X04.png" width="253" /></a></div>
<div>
起動すると、こんな感じの画面で、メニュー等は</div>
<div>
日本語化されていてなんだか安心感がありますw</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_3w7sD1rEVuBk3X_3m50pHmJDLsWZ4oRpzS6kiwYnBinp9Wwhr14ykHRf94x7cXyUjfM9QjL-r1RmrW5-RPniZF96qWVtfzdcyMtkezf0ZlowqMmGArckh5O2BElnVHQ0MWk-mIoQO16n/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+%252893%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_3w7sD1rEVuBk3X_3m50pHmJDLsWZ4oRpzS6kiwYnBinp9Wwhr14ykHRf94x7cXyUjfM9QjL-r1RmrW5-RPniZF96qWVtfzdcyMtkezf0ZlowqMmGArckh5O2BElnVHQ0MWk-mIoQO16n/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+%252893%2529.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div>
<br /></div>
すでにGroundのPlaneとSphereがデフォルト表示されています。<br />
Xenkoのページに<a href="http://doc.xenko.com/latest/manual/xenko-for-unity-developers/index.html">Xenko for Unity</a>という<br />
Unityとの比較がのっていて、各種のビューの名前がのっていますので<br />
今回は、説明を割愛します。(;^_^A<br />
<br />
Asset EditorのSphereを選択すると、Grid Propertyが<br />
Sphereのプロパティに切り替わります。<br />
Add Componentボタンありますのでそちらをクリック<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgH6vVQwFnsZR5MMvzXlPsNL_x4E1JKjJh7N9pbFlGieiXvpHQV0K0dEIheX_3g9a6ghs-lhjv5EK61az6vJm7vK1OH3Jz5UYIgFwb17FQoWdv3493HynawmeKC64O6e0OH-6vJMwQ_Kpq/s1600/X05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgH6vVQwFnsZR5MMvzXlPsNL_x4E1JKjJh7N9pbFlGieiXvpHQV0K0dEIheX_3g9a6ghs-lhjv5EK61az6vJm7vK1OH3Jz5UYIgFwb17FQoWdv3493HynawmeKC64O6e0OH-6vJMwQ_Kpq/s320/X05.png" width="320" /></a></div>
つづいてRigdbodyを選択<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYO_gsiEM60RiqnKXUo9f2gP-uPs-a0bvnvWYLw8rN6ZUMB6AJGSUrJclxVrSS_k5ZAiqdZoiugENsJLS_9QPxVxjuHPkHa8bp2jHWq5I4qyXhBh68aEfA1bBHLMT6Ip_MzCUNuX5baiBO/s1600/X06.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYO_gsiEM60RiqnKXUo9f2gP-uPs-a0bvnvWYLw8rN6ZUMB6AJGSUrJclxVrSS_k5ZAiqdZoiugENsJLS_9QPxVxjuHPkHa8bp2jHWq5I4qyXhBh68aEfA1bBHLMT6Ip_MzCUNuX5baiBO/s320/X06.png" width="320" /></a></div>
<div>
そうすると、SphereのPrpoerty GridにRigdbodyのコンポーネントが追加されています。</div>
<div>
オブジェクトに対してコンポーネントを追加していくのは、かなりUnityと似ていますね。</div>
<div>
<br /></div>
<div>
SphereのRigdbodyのコンポーネントのGravityをみると</div>
<div>
なぜかX,Y,Zが指定できるようになっています。。</div>
<div>
とりあえず、そのまま実行してみたところ。。なにも起きませんでした。</div>
<div>
よくみると without any collider shapeというエラーがでていました。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiueskl_fLQ55YtnnZoxP3c3P-A1uaf8CjmSEUjlDi6mdIWWMVbzEq6AD1oRGtblb9tOE0wj3_NipRbabMYQPdmiqbzZdjKfezBNn6PRoRla2sIQPqVEvsuR-UNXZKY0mAJvbJPOa8hXvgb/s1600/x07.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="45" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiueskl_fLQ55YtnnZoxP3c3P-A1uaf8CjmSEUjlDi6mdIWWMVbzEq6AD1oRGtblb9tOE0wj3_NipRbabMYQPdmiqbzZdjKfezBNn6PRoRla2sIQPqVEvsuR-UNXZKY0mAJvbJPOa8hXvgb/s320/x07.png" width="320" /></a></div>
<div>
<div>
これはRigdbodyのコンポーネントだけではなく</div>
<div>
Colliderのコンポーネントを追加しないとダメなようです</div>
<div>
<br /></div>
<div>
SphereのRigdbodyのコンポーネントPrpoerty Gridの一番下に</div>
<div>
Collider Shapesというプラスボタンがあり、そちらのプラスボタンをおすと</div>
<div>
色々なColliderが選択できます。今回はSphereを選択しました</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFCRrajC73buKa3zL4BP-HfBEpIeMOs-64oVmotB78YhoeH97uUQsU7DGuyGZ42NMAHJpB9jFjgVErGhG_BsfR_TzsUCyg7NFYI1ru4o1e85F1IQ1M89qRA8UO1djoDo8Zp4Sr2SgkxMGO/s1600/X09.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFCRrajC73buKa3zL4BP-HfBEpIeMOs-64oVmotB78YhoeH97uUQsU7DGuyGZ42NMAHJpB9jFjgVErGhG_BsfR_TzsUCyg7NFYI1ru4o1e85F1IQ1M89qRA8UO1djoDo8Zp4Sr2SgkxMGO/s320/X09.png" width="167" /></a></div>
ここで気を取り直して、再びアプリを実行。。<br />
<iframe allowfullscreen="" frameborder="0" height="315" src="https://www.youtube.com/embed/PkrEzwYTmt8" width="560"></iframe>
動画が見にくくて申し訳ないのですが、<br />
Unityのようにゲームビューで実行されず、<br />
いったんWindowsのアプリとして別のWindowが起動します。<br />
これは、少し不便ですね。。<br />
<br />
あと、特にGravityのx,y,zの値は入れなくても下に落ちましたし<br />
逆にxに値をいれてみても、実行結果に変化はありませんでした。<br />
<br />
3Dのモデルはデフォルトでは、<br />
ToursやTeapodなどUnityにはないものが用意されています。<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe70byl0V7iSNFRyAb3baEHVHG9JY5QOTrlyUmhJklMT0AxZXzHE3WDfbQ8ucNa96wlaQWB0mQejtZoDzoOQAirs5lTp5bBrC0fEsAXHrLvKedG0dcYOMCxlQzMVdOkhrTAanJY9FAOx4q/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+%25283%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe70byl0V7iSNFRyAb3baEHVHG9JY5QOTrlyUmhJklMT0AxZXzHE3WDfbQ8ucNa96wlaQWB0mQejtZoDzoOQAirs5lTp5bBrC0fEsAXHrLvKedG0dcYOMCxlQzMVdOkhrTAanJY9FAOx4q/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+%25283%2529.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
おそらく、Asset Storeでの資産が大きく、すぐにUnityから乗り換えて<br />
実務でガッツリ使うぜってノリで使えなかと思いますが<br />
今回のように、とりあえず、試すには面白いツールかと思いました。<br />
<br />
まだまだ今後の進化に期待ってところも多いですが<br />
新しいツールの登場により、開発者の選択肢が広がるのは良いですね。<br />
今後触り続けるかは、僕的にも少し微妙かな。。<br />
ゴールデンウイークは時間が許す限りお遊びしてみます。(;^_^A<br />
<br /></div>
<div>
<br /></div>
ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0tag:blogger.com,1999:blog-5081170311756045545.post-68869639523394756202017-03-20T09:57:00.002+09:002017-03-20T09:57:26.706+09:00HoloLensの開発効率化 ノーコーディングでオブジェクトにマーカーをつける方法お疲れ様です。ZuQ9->Nnです。 <br />
HoloLensは、とても視野が狭く、<br />
ホロがどうしても、視界の外に出てしまいます。<br />
<br />
そこで、オブジェクトにマーカーをつけて<br />
視界を誘導してあげたい場合があります。<br />
こちらもHoloToolkit-Unityにすでに用意されています。<br />
<br />
一番簡単なものは、HoloToolkit > Utilities > Prefabsの中にある<br />
HeadsUpDirectionIndicator.prefabを利用する方法です。<br />
<br />
こちらも、いつものように手順をおっていきます。<br />
まずは、HoloToolkit-Unityのインストールとプロジェクトの設定<br />
<br />
最初にMain Cameraを選択、右クリックでメニューを表示しDelelteで削除します。<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6sBbpTjKooJFxj5k5nUOIhvVPf-Y7ZRVdiCBT50MQC8Oaq7s7BYFMhIbT6QRI92kO-7MT9P2o5rNZczBKrda2p5oHb2qzLfFfISotfnvXHAdNyU29YxroA-Y8pzBc1rWWH_3d2DBXeHX_/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+%252866%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg6sBbpTjKooJFxj5k5nUOIhvVPf-Y7ZRVdiCBT50MQC8Oaq7s7BYFMhIbT6QRI92kO-7MT9P2o5rNZczBKrda2p5oHb2qzLfFfISotfnvXHAdNyU29YxroA-Y8pzBc1rWWH_3d2DBXeHX_/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+%252866%2529.png" width="320" /></a></div>
<div>
次に、HoloToolkit > Input> Prefabsの中にあるHoloLensCamera.prefabを</div>
<div>
Hierarchyにドラッグアンドドロップで追加</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgV1beP1Xd8DZdGh7L3TFWM3WVBDoxho3P80GoIeK23bp3tqAQubgGioamuxVuZNKgMH2fIf-3nY6Fk9YHJJWrm_C66WJFC5I4bYad07ARhqzvk2O9FlaUlxTk8TgJSYrqqOz7qehsQ8vdR/s1600/1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgV1beP1Xd8DZdGh7L3TFWM3WVBDoxho3P80GoIeK23bp3tqAQubgGioamuxVuZNKgMH2fIf-3nY6Fk9YHJJWrm_C66WJFC5I4bYad07ARhqzvk2O9FlaUlxTk8TgJSYrqqOz7qehsQ8vdR/s320/1.png" width="150" /></a></div>
<div>
<br /></div>
<div>
次に、HoloToolkit > Input> Prefabsの中にあるInputManager.prefabを</div>
<div>
Hierarchyにドラッグアンドドロップで追加</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheW7_MvDj3XYfLRixA3y3vBEQLs8A2PfEzvEf8MTT7LLjRsJz0j372qljyhgqqvzysN8s3UR-p-CGSeB01-g2wqUyey7DP3yb73gwxyWHrcYAFXCaWWDrb-ky5WHRAheBFRHUVERt5DZ7L/s1600/2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEheW7_MvDj3XYfLRixA3y3vBEQLs8A2PfEzvEf8MTT7LLjRsJz0j372qljyhgqqvzysN8s3UR-p-CGSeB01-g2wqUyey7DP3yb73gwxyWHrcYAFXCaWWDrb-ky5WHRAheBFRHUVERt5DZ7L/s320/2.png" width="137" /></a></div>
<div>
<div>
次に、HoloToolkit > Input> Prefabs > Cursorの中にあるBasicCursor.prefabを</div>
<div>
Hierarchyにドラッグアンドドロップで追加</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOqBaxc3z1G1DRQ0SN_BabGSMP0aB1TPOjEp1ZKYhCi1Ek00VWCHbRlhk9kvfCkRJO3DYXE1PqdpwnT4SdZVa2kcl5kHtSukG0YW4N4icPRdtwQ8eHKdDmu5gtEGqkd1L5H1E03O1Fu8P4/s1600/3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhOqBaxc3z1G1DRQ0SN_BabGSMP0aB1TPOjEp1ZKYhCi1Ek00VWCHbRlhk9kvfCkRJO3DYXE1PqdpwnT4SdZVa2kcl5kHtSukG0YW4N4icPRdtwQ8eHKdDmu5gtEGqkd1L5H1E03O1Fu8P4/s320/3.png" width="149" /></a></div>
<div>
HierarchyからCreate > 3D Object > CubeでCubeを作成</div>
<div>
Cubeの位置を見やすい位置に移動してください。(今回は x:0 y:0 z:7)</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgE3apYPXY6T78gyKFHMnsnYGdToeJRVngquKDXet-wqLLnUOQUsDhMqdQFmUuswY1emL-yrRJmbo0q4n8uXoA85FKtF9zc-jxQRGPvw1dtfY6UFkekFw6Bq9zf8pcqdxdv6QIRdS9uJb3/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+%252870%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgE3apYPXY6T78gyKFHMnsnYGdToeJRVngquKDXet-wqLLnUOQUsDhMqdQFmUuswY1emL-yrRJmbo0q4n8uXoA85FKtF9zc-jxQRGPvw1dtfY6UFkekFw6Bq9zf8pcqdxdv6QIRdS9uJb3/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+%252870%2529.png" width="320" /></a></div>
<div>
次に、HoloToolkit > Input> Utilities> Cursorの中にある<br />
HeadsUpDirectionIndicator.prefabを</div>
<div>
Hierarchyにドラッグアンドドロップで追加</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE9xoAv2LAysDWpjd2Zv-IBg8c9oqGIgxMa8Ei4HLagYRO102l6ZVObVkgNyQ4yNLIO1gpe9Dbl9LCIMWQjfoViOOX3Tw-H_fwxVvR1ZNpbpBzQFERZmSD6M9YHDNA037dC3PyOpwWuqPB/s1600/4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE9xoAv2LAysDWpjd2Zv-IBg8c9oqGIgxMa8Ei4HLagYRO102l6ZVObVkgNyQ4yNLIO1gpe9Dbl9LCIMWQjfoViOOX3Tw-H_fwxVvR1ZNpbpBzQFERZmSD6M9YHDNA037dC3PyOpwWuqPB/s320/4.png" width="178" /></a></div>
<div>
HierarchyのHeadsUpDirectionIndicatorを選択し、Inspectorの</div>
<div>
TargetにHierarchyのCubeをセット</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwv_9Y9X46iElop_UpTtYYrnWfJ96JHrTnWLEgRtq22iTzLsJnHTJuSEkyFNp_VIGMOlnC-IMSBXLLo8vQnnh2XpopVzOlwA2fF-MaP2Oya9-r_k3JlYkpzpIcVMnkyJ5S0HaZr8eGOja0/s1600/5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="254" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwv_9Y9X46iElop_UpTtYYrnWfJ96JHrTnWLEgRtq22iTzLsJnHTJuSEkyFNp_VIGMOlnC-IMSBXLLo8vQnnh2XpopVzOlwA2fF-MaP2Oya9-r_k3JlYkpzpIcVMnkyJ5S0HaZr8eGOja0/s320/5.png" width="320" /></a></div>
<div>
なんと、作業はこれで完了、Unityを実行してみると、</div>
<div>
こんな感じでオブジェクトに矢印が表示されます。</div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dx04hDzQXNlKrIyXSxiEi2nrsBjkOpxIV-kCe9cK9YtkIfqZw0OtPLuIiw-jQpqN1eu_d-nLbHny2APlAifcQ' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div>
<div>
しかし、この方法では、問題がのこります。</div>
<div>
そう、HeadsUpDirectionIndicatorのTargetには</div>
<div>
1つのオブジェクトしかしていできません。</div>
<div>
<br /></div>
<div>
それでは、2つ以上のオブジェクトの場合の対応法をみていきましょう。</div>
<div>
HeadsUpDirectionIndicatorを選択、右クリックでDeleteを選択し削除します。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieKoF3P2AlJAwtJzIrdTTD16xQ5VeOvxaPn-QbJwB4Xry-WPM6K9SZTaiYRoHYsog89keTjnr1i1OnZ-1KNXgDnxvLwRP_ezOzTTQLDAhzfcrDRGSySGRLhyphenhyphennv0g3cUPMrRCjIDxjQ3kY3/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+%252873%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieKoF3P2AlJAwtJzIrdTTD16xQ5VeOvxaPn-QbJwB4Xry-WPM6K9SZTaiYRoHYsog89keTjnr1i1OnZ-1KNXgDnxvLwRP_ezOzTTQLDAhzfcrDRGSySGRLhyphenhyphennv0g3cUPMrRCjIDxjQ3kY3/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+%252873%2529.png" width="320" /></a></div>
<div>
<br /></div>
<div>
HierarchyからCreate > 3D Object > SphereでSphereを作成</div>
<div>
CubeとSphereの座標を見やすい位置に移動。(cubeは x:1 y:0 z:7、Sphere x:-1 y:0 z:7)</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2E9tEDy3fBD98Jgo1nZMO_j6gcG1d_qLXQAMS3KnWkKZR-mHyfRkbFU_tOs8S4pHlRtQcv6_OuIO0dZq7fmkE7opP0t-pkfYa7k2vA-SxZFl_wwRuIyoiJS9dLEKVC86PYwWEabRBcGAa/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+%252874%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2E9tEDy3fBD98Jgo1nZMO_j6gcG1d_qLXQAMS3KnWkKZR-mHyfRkbFU_tOs8S4pHlRtQcv6_OuIO0dZq7fmkE7opP0t-pkfYa7k2vA-SxZFl_wwRuIyoiJS9dLEKVC86PYwWEabRBcGAa/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+%252874%2529.png" width="320" /></a></div>
<div>
HierarchyからCreateを選択、InspectorのAdd ComponentでDirectionIndicator.csをアタッチ</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR1UGoD7W5r1ulBULAEMQjdthTsxI1CSU27xlcl2BBBrAa71BrfTcZVgK4IuwVbZoqqDlglUtuFG6NGfmKDRizbCY-Q8sU3mYL4qgDy67pW4O2QPaqvlzxcYSSBK_fpw_hJi_JxwZuxJY0/s1600/6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="286" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiR1UGoD7W5r1ulBULAEMQjdthTsxI1CSU27xlcl2BBBrAa71BrfTcZVgK4IuwVbZoqqDlglUtuFG6NGfmKDRizbCY-Q8sU3mYL4qgDy67pW4O2QPaqvlzxcYSSBK_fpw_hJi_JxwZuxJY0/s320/6.png" width="320" /></a></div>
<div>
アタッチされたDirectionIndicatorのCursorにHierarchyのBacicCursorをセット</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-gwD74ieJoUitZWef8dztthQqiTkusHM3eVA1qRFafEH1jJkyz97ERoaH4wWc1Y7x_gPJ2QxA1KjWtX2InX-7UtTw3J8WaNWGWJ_OySPJybPtnwXLkjvKpJq_2T2YRBrcBm6GRvqI3JzO/s1600/7.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="277" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-gwD74ieJoUitZWef8dztthQqiTkusHM3eVA1qRFafEH1jJkyz97ERoaH4wWc1Y7x_gPJ2QxA1KjWtX2InX-7UtTw3J8WaNWGWJ_OySPJybPtnwXLkjvKpJq_2T2YRBrcBm6GRvqI3JzO/s320/7.png" width="320" /></a></div>
<div>
HoloToolkit > Input> Utilities> PrefabsのHeadsUpDirectionIndicatorPointer.prefab</div>
<div>
DirectionIndicatorのCursor Indicator Objectにセット</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPBaHOnwPmXgvQ3-Jb80VBVKEyTSopQfyNn1A3rhQeoJGm0RmujCuCMy9m2fq94qA6ukNbxZ5tFpmvkRScBw61h0qylvMDGvIDS2jmH80VP_Bj9EWPoP1q5epuLyhdSsYfty-eLiRiJhB2/s1600/8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPBaHOnwPmXgvQ3-Jb80VBVKEyTSopQfyNn1A3rhQeoJGm0RmujCuCMy9m2fq94qA6ukNbxZ5tFpmvkRScBw61h0qylvMDGvIDS2jmH80VP_Bj9EWPoP1q5epuLyhdSsYfty-eLiRiJhB2/s320/8.png" width="320" /></a></div>
<div>
HierarchyのSphereも同じ手順で、同じ設定を行ってください。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-2db0erhdd5wsQyk2TZru82RPTeD1EE_KbY-AdVR5__67GaqqOnIpp2JUaQ2mIwd1MAIWhBtI6j8BeAhxGN802FMV0fGRrM5QzvPUYZ8ZPrgYhOEm4ZQPoTjkJjGVqG115bnRQDH0cmhh/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+%252877%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-2db0erhdd5wsQyk2TZru82RPTeD1EE_KbY-AdVR5__67GaqqOnIpp2JUaQ2mIwd1MAIWhBtI6j8BeAhxGN802FMV0fGRrM5QzvPUYZ8ZPrgYhOEm4ZQPoTjkJjGVqG115bnRQDH0cmhh/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+%252877%2529.png" width="320" /></a></div>
<div>
これでUnityを実行してみると、こんな感じで、</div>
<div>
オブジェクト一つ、一つに対してマーカーがつき矢印もオブジェクトの方向に向きます。。</div>
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dwtrK29z87jIGR2-QIj3pFdIrZy_iIfqjeA4QJeXZ4gV6aBkYZBkN7CkbGdUJyXRJRGQVHgl2fxU75B8qN8Ng' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div>
<div>
ただ、見ていただいてもわかるように、矢印がかなり、大きく不格好です。</div>
<div>
また、オリジナルのマーカーを表示したいという欲求もうまれてきます。</div>
<div>
なので、次に、マーカーを変更してみることにします。</div>
<div>
まずは、お好きな画像を用意。</div>
<div>
<br /></div>
<div>
ここでの説明は、僕がかなり適当に作った arrow.png、star.pngを使って説明します。</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVQQ_trJ-Rc5slqEWQbEhCpamQUhQnF5Tw5daMm12vzAJM8FV6yVJYJySw4SuyRuAOCN-Ou0p3iz_s6dUwq5h2sEasnxz8ZirT8Vdo-7dU_Z6H0HTgmJyDmI3unOq1EyDbVPIGF0idAzop/s1600/arrow.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVQQ_trJ-Rc5slqEWQbEhCpamQUhQnF5Tw5daMm12vzAJM8FV6yVJYJySw4SuyRuAOCN-Ou0p3iz_s6dUwq5h2sEasnxz8ZirT8Vdo-7dU_Z6H0HTgmJyDmI3unOq1EyDbVPIGF0idAzop/s1600/arrow.png" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw3dDKiiSqv2nYWypHp7x_kA1WW92Mnlb3lJaTutJZhQxkWLf75yGSIUW3zKFYfEBOcU-97apF9qzjzP3_wxm6UNvAk2cBttQMBZf3m77XQI_wvuurkq9EaHl3S41gp-7HATWJjm1EfhQ7/s1600/star.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgw3dDKiiSqv2nYWypHp7x_kA1WW92Mnlb3lJaTutJZhQxkWLf75yGSIUW3zKFYfEBOcU-97apF9qzjzP3_wxm6UNvAk2cBttQMBZf3m77XQI_wvuurkq9EaHl3S41gp-7HATWJjm1EfhQ7/s1600/star.png" /></a></div>
<div>
まずは、この画像をUnityのProjectに追加、</div>
<div>
HierarchyからCreate > 3D Object > QuadでQuadを作成<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdn1k0-vdT70bCsNfwcOX-pBFNy1Hb1YSd9ZIS9LD9EA2J9aEBF0_sW-rGdhO3fikoYotTePj8t1hrM7dJrvCd6pbcd4x2BaBo5S3BXzO8D123kq5mOKl91hDUzTDgOm0AULImxGEE56R3/s1600/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+%252881%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdn1k0-vdT70bCsNfwcOX-pBFNy1Hb1YSd9ZIS9LD9EA2J9aEBF0_sW-rGdhO3fikoYotTePj8t1hrM7dJrvCd6pbcd4x2BaBo5S3BXzO8D123kq5mOKl91hDUzTDgOm0AULImxGEE56R3/s320/%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588+%252881%2529.png" width="320" /></a></div>
</div>
<div>
Quadを選択し、Projectに追加したarrow.pngをドラッグアンドドロップで追加</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiajZ9K16aDmc6lqjbz-bcDE_0lVWy5g_aIr_sa-v15gKH0iEYvffPU5G_HxZo0tC-6rUCcd4gr7PYrFuDwOXBn-ZMXngUJTQjAmKUboCct6VPIxWrg8nP97P4iB_TYbMJHiy58Gkw-k7Rb/s1600/9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="309" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiajZ9K16aDmc6lqjbz-bcDE_0lVWy5g_aIr_sa-v15gKH0iEYvffPU5G_HxZo0tC-6rUCcd4gr7PYrFuDwOXBn-ZMXngUJTQjAmKUboCct6VPIxWrg8nP97P4iB_TYbMJHiy58Gkw-k7Rb/s320/9.png" width="320" /></a></div>
<div>
QuadをArrowに名前を変更後、HierarchyからProjectにドラッグアンドドロップでPrefabに</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUUKcQkeSWpDckt-fXnWoe1Nq8SNdNP869XrdgIJU_h2MVatkXdOgyWvIGpvxS21eV16eAFtwfzxl7AUtkFPtV2DqhFIC5HHCaYmyeHfgz0F2I5h8xp7DA950r5KODbF1qRmthF3v7mdo-/s1600/10.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUUKcQkeSWpDckt-fXnWoe1Nq8SNdNP869XrdgIJU_h2MVatkXdOgyWvIGpvxS21eV16eAFtwfzxl7AUtkFPtV2DqhFIC5HHCaYmyeHfgz0F2I5h8xp7DA950r5KODbF1qRmthF3v7mdo-/s320/10.png" width="160" /></a></div>
<div>
HierarchyのArrowは削除してください。</div>
<div>
HierarchyのCubeを選択、InspectorのDirectionIndicator</div>
<div>
Cursor Indicator ObjectにPrefab化したArrowをセット<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKJFWH-8rSgGKdEUZ63DFNHx2fSC17WJnKlYfqU19D-6G9N2WdQkgvveMaJoFr8y3IZdPIAuRXiEL2EXHAkl5DLoj6enBVBgqtZt-M9YuM3gURGW6dgTF4byiqzZhWDCkoKkE4MLN9ki5Y/s1600/11.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="229" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKJFWH-8rSgGKdEUZ63DFNHx2fSC17WJnKlYfqU19D-6G9N2WdQkgvveMaJoFr8y3IZdPIAuRXiEL2EXHAkl5DLoj6enBVBgqtZt-M9YuM3gURGW6dgTF4byiqzZhWDCkoKkE4MLN9ki5Y/s320/11.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
</div>
</div>
同じ手順でStar.pngをQuadに追加、StarのPrefabを作成<br />
SphereのDirectionIndicatorほうにはCursor Indicator ObjectにPrefab化したStarをセット<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizrQI2si83ZWOxpuYZfTwyr9K3quZyZEyfRZ88ZDTI02YvDXbrYkzBpzsskiozvCdeM44HMNiGpkuJmqKNzS56KpN3u9btLDMo-BZPfLpX29_3nFAsweAJR4k_BxduOA-6xpjKMVOSVuos/s1600/12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="222" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizrQI2si83ZWOxpuYZfTwyr9K3quZyZEyfRZ88ZDTI02YvDXbrYkzBpzsskiozvCdeM44HMNiGpkuJmqKNzS56KpN3u9btLDMo-BZPfLpX29_3nFAsweAJR4k_BxduOA-6xpjKMVOSVuos/s320/12.png" width="320" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
これでUnityを実行すると、こんな感じでです。<br />
<div class="separator" style="clear: both; text-align: center;">
<iframe allowfullscreen='allowfullscreen' webkitallowfullscreen='webkitallowfullscreen' mozallowfullscreen='mozallowfullscreen' width='320' height='266' src='https://www.blogger.com/video.g?token=AD6v5dxUDyYUFSza-8nPUqCCnMyOpoIiJom-qyk8QCZ5509HOedvSnEiceX9fbUmu9P2X1yaA_PIJIkvTdSb8EaHAg' class='b-hbp-video b-uploaded' frameborder='0'></iframe></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
画像があまりに適当すぎて、わかりずらいのですが (;^_^A アセアセ・・・<br />
Cube、Sphereにそれぞれ、独自のマーカーが適用され<br />
それぞれのオブジェクト方向に向きます。<br />
<br />
マーカーが青色に変わるのは、DirectionIndicator.csの<br />
DirectionIndicatorColorが適用されているためでこちらの色はInspectorで変更可能です。<br />
<br />
HoloToolkit > Utilities > Tests > Scenesに<br />
HeadsUpDirectionIndicator.unityというサンプルがあり、<br />
こちらは、HeadsUpDirectionIndicator.csを利用しています。<br />
<br />
HeadsUpDirectionIndicator.csは、HeadsUpDirectionIndicator.prefabにも<br />
利用されているスクリプトでDirectionIndicator.csとの違いは<br />
HeadsUpDirectionIndicator.csのTargetに対してオブジェクトをアタッチします<br />
<br />
こちらの手法でも、もちろん今回のようなサンプルでは大丈夫かと思いますが、<br />
動的にコードでオブジェクトをInstantiateする場合は<br />
オブジェクトに対してDirectionIndicator.csをアタッチし、<br />
それをPrefab化したものをInstantiateする方法が適していると思います。<br />
<br />ZuQ9Nnhttp://www.blogger.com/profile/02949164790242237057noreply@blogger.com0