今回は、そちらを確認しました。10.0.18362.0以上も必要です。2のみで旧型のHoloLensでは動作しないようです。Editorで確認を行いましたGitHubからプロジェクトをCloneかダウンロードしてプロジェクトを開きます。Deviceのチェックを外して実行します。Unityで実行ボタンを押すと、こんな感じで壁や天井、床といったオブジェクトがせいせいされた部屋のようなものが表示されます。パッケージインポートをする必要すらありません。独立した全く別の一つの機能としてとらえた方がよさそうです。中身を確認したところSceneUnderstandingDataProvider.cs、SceneUnderstandingDisplayManager.cs、SceneUnderstandingUtils.csというScriptが利用されています。ため、SceneUnderstandingそのもののコードではなくあくまで、サンプルのために作成されたScriptです。Unityの中にCPU毎のフォルダにMicrosoft.MixedReality.SceneUnderstanding.dllが入っています。dllなのでコードの中身は見ることができませんでした。SceneUnderstanding.SceneObserver.RequestAccessAsync();が呼び出されています。床、壁、天井にPlaneのオブジェクトを作成するようです。プロパティに指定されているbyteデータを読み込んで表示しています。SU_Kitchen.bytesが利用されています。v2のリポジトリだけではなく、MicrosoftDocs/mixed-realityのリポジトリのチェックも必要そうです。あと、やはり、Microsoftの開発ドキュメントはよく読みましょう。僕は、今回、何度も、見落としておりましたので。HandConstraint.csのOnHandActivateの呼び出しタイミングについてお疲れ様です。ZuQ9->Nnです。v2(以下MRTKv2)にハンドトラッキングを扱うHandConstraint.csというスクリプトがあります。content.つまり、手の領域にあるオブジェクトに対して制約をつけて、手が見えたり隠れたりするときにイベントを実行するScriptです。OnHandDeactivateというイベントが定義されています。すべての手がトラッキングが失われたきにトリガーとなるイベントとなっています。OnFirstHandDetectedとOnHandActivateのタイミングってどう違うのだろう?そんな純粋な気持ちで調べたら。自分のメモ用にまとめておきます。Configureを選択する等はいつも通り行ってください。わからない方は、以前の記事を参考にしてください。Textを作成これはデバックの文字列を画面に表示させるためのテキストです。TextのTransFormや設定を行ってください。名前は何でもいいのですが、今回は、HandConstraintTestとしました。HandConstraintTest.csとしました。TextをHandConstraintTest(Script)のTextにアタッチHandConstraintの各イベントにHandConstraintTestのメソッドを対応させます。AfterHandLostこれでUnityを実行すると、このような感じになりました。動画では、少しわかりにくいので、スクリーンショットでも解説します。Unityを実行した直後は、OnLastHandLost、OnHandDeactivateが実行されます。次に手を表示したときには、OnFirstHandDetectedのみ実行されます。このタイミングでは、OnHandActivateは実行されません。手を非表示にしたときは、OnLastHandLostが呼び出されます。いつ、OnHandActivateが呼び出されるのでしょうか?結論から言うと、Unityの設定を変更しなければ、OnHandActivateは呼び出されません。Handler.csもアタッチされています。Handler.csは、GameObjectにアタッチして、オブジェクトの位置と方向を計算するコンポーネントを提供します。Typeを確認してください。最初の設定は、Headになっています。頭に追随する設定なのです。手に追随する設定に変更します。一度、Unityを実行するとこのような感じになります。今回は、手を表示した時点で、OnFirstHandDetected、OnHandActivateの二つのイベントが実行されました。HandnessをBothからRightやLeftにすると右手が表示されたときのみ、左手が表示されたときのみといった制御を行うことができます。JointをPalm以外にも変更してみましたが、OnFirstHandDetected、OnHandActivateの二つのイベントが実行されました。Editorで実行しているからかもしれませんね。親指を隠した状態で手を表示し、親指を立てたときのみOnHandActivateが実行される可能性があるのでは?と思ったのですが、Noneにしてもイベントが実行されました。Jointは、OnHandActivateの実行タイミングとは関係ないと考えています。Jointは、オブジェクトをトラッキングするときの位置のみに利用するのでしょう。これだけではありません、OnHandActivateイベントは、HandConstraintPalmUp.csをアタッチした場合では、また別のタイミングで実行されるのです。ComponentでHandConstraintをRemoveします。ComponentからHandConstraintPalmUpを選択しアタッチします。HandConstraintPalmUpの各イベントにHandConstraintTestのメソッドを対応させます。AfterHandLostUnityを実行するとこのような感じになります。こちらもスクリーンショットで開設します。手を表示したときは、OnFirstHandDetectedのみ実行されます。手を回転させて、手のひらが表示されたタイミングでOnHandActivateが実行されます。JointをPalm以外にも変更してみましたが、Unityでは同じタイミングでイベントが実行されました。TypeをHead、頭に戻して確認したところ手のひらが表示されたタイミングでは、OnHandActivateが実行され無い結果となりました。実機でどのように動くか、確認したい。Editorの時と変わらないと考えるのが妥当です。Unity上で確認した動きを表にしてまとめました。OnHandActivateちょっと自信が無いので、間違いがあったらご指摘ください。Trackingで、柔らかい仮想オブジェクトに触ってみるお疲れ様です。ZuQ9->Nnです。今回は、ネタ記事です。技術的にもアセットを使っているのであまりたいした内容ではありません。センシティブな内容が含まれるので不愉快に思われる方は、記事を閉じてください。2の新しい機能で、一番気になるのがハンドトラッキングです。ハンドトラッキングで、今回は柔らかい仮想オブジェクトに触ってみましょう。適当な名前でUnityでプロジェクトを作成(僕はTestとしました。)Microsoft.MixedReality.Toolkit.Unity.Foundation.2.1.0.unitypackageをUnityにインポートします。Settings?のダイアログが表示されますので、Applyを押します。Toolkitが表示されますので、そこから。Configureを選びます。MixedRealityToolkitConfigurationProfileのダイアログが表示されます。こちらは、開発環境に合わせて選択しますが、今回は、とりあえず、DefaultMixedRealityToolkitConfigurationProfileを選択しますHierarchyに、MixedRealityTookitとMixedRealityPlayspaceが自動追加されます今回は、こちらのサイトに公開されているアセットを利用します。center.サイトの一番下に、unitypackageのリンクがありますので、そちらをクリックしてダウンロードdealing-with-transformations.unitypackageがダウンロードされますのでUnityにインポートを行います。Sphereを選択Sphereを見える位置に配置します。Defomerを選択アタッチします。Handlerを選択アタッチします。Scriptを選択スクリプトを追加。スクリプト名は、特に何でもいいのですが、今回はSphereBounceとしました。SphereBounceのコードはこんな感じになります。Draggedにドラッグしてアタッチします。Founctionのドロップダウンを開いて。Boundを選択します。Editorを実行し、Shiftボタンを押しながら指を表示クリックしながら動かすとこんな感じで動きます。パラメータを調整してみたんですが残念ながら、あんまり思った感じのプルプル感は得られませんでした。2のタッチに対応させてみる。Handlerを利用しました。2ではハンドトラッキングのタッチも検出できます。一応、そちらでも動くように対応させてみたいと思います。その対応が不要な人は読み飛ばしてください。Volumeをアタッチします。Handlerをアタッチします。Updatedにドラッグしてアタッチします。SphereBounceのコードに、タッチで反応したときの動作のメソッドBoundTouchを追記します。SphereBounceのコードは、こんな感じになります。Founctionのドロップダウンを開いて。BoundTouchを選択します。設定は以上でおわりです。Editorを実行Shiftボタンを押しながら指を表示、今度は、クリックせずそのまま、Shpereに近づけます。これだけだと、あまりにネタすぎるのでソースコードの解説を行います。Shpereを揺らしているMeshDeformer.csについて。実装が記述されていますが、MeshFilterを取得して、ポリゴンそのものを変形させることによって、凹んだ表現をおこなっています。クリック動作を扱うPointerHandler.csについて。こちらは、MixedRealityToolkit-Unityで提供されています。MonoBehaviourを継承しているため、Inspectorからセットできるようになっています。IMixedRealityPointerHandlerがイベントを扱います。このイベントがUnityのInspectorからセットできるようになっています。NearInteractionTouchableVolume.csこちらも、MixedRealityToolkit-Unityで提供されています。NearInteractionTouchable.csと言うスクリプトも存在します。Colliderには反応しませんでした。(SetTouchableColliderメソッドの引数がBoxColliderになっているから??)間違えないようにNearInteractionTouchableVolume.csをアタッチしてください。TouchHandler.csこちらも、MixedRealityToolkit-Unityで提供されています。こちらもMonoBehaviourを継承しているため、Inspectorからセットできるようになっています。タッチ終了こちらのイベントもUnityのInspectorからセットできるようになっています。NearInteractionTouchableVolume.csをアタッチしていないと、検出されませんでした。eventData)クリックで反応するメソッド、今回は、クリックされている間はずっと反応させたかったのでOnPointerDraggedの時に呼び出しました。引数をそのまま渡すことができます。eventData.Pointer.BaseCursor.Positionでカーソルの場所がVector3で取得できます。eventData)タッチで反応するメソッド、今回は、タッチされている間はずっと反応させたかったのでOnTouchUpdatedの時に呼び出しました。引数をそのまま渡すことができます。自作のメソッドでIMixedRealityPointerHandler、IMixedRealityTouchHandlerをそれぞれ実装することも可能なのですが実装したいイベントの後に、どのような処理をしたいか?に集中したほうがコードは短くなりますので、今回はこの実装をおこないました。これ系のネタは、ほかの人もやっているんじゃないかと捜したところQiitaではUnityで3記事みつかりました。もろ、タグが切られていてたww。QiitaUnityでゲームの制作をしているのですがキャラクターモデルのおっぱいを揺らしたいという話になりました。UnityのCloth(布のシミュレーション)を使えば擬似的におっぱいを作れそうだなと思ったのでやって見ることにしました。Qiitaどうも、趣味でVRゲームを作ってるおっぱい大好きエンジニアです。その製作中におっぱいの動きで悩んだところがありました。どのようにおっぱいの実装をしたのか残そうというコンセプトです。結果として次のような動きができるようになりました。揺れるおっぱいが見たい気持ちになったのですが、MayaやLive2Dを買うお金がないので気合いで作りました。Rigitbodyコンポーネントだけのオブジェクト。Gravityはオフ、Constraintsは全部チェックつける。Bodyに「1つめ」のオブジェクトを指定。それ以外の値は適当です。RigitbodyのMassを小さめにしています。Jointと同じです。Bodyに「2つめ」のオブジェクトを指定。Rendererは確認用なので、あってもなくてもおkです。インポート設定は特に不要です。Grayscaleにチェックをつけるといい感じにノーマルマップを作成できます。マスクはアルファチャンネルを使用するので、Photoshopで↓こんな感じになっていないとダメです。インポート設定は特に不要です。マスクのアルファチャンネルを使ってテクスチャーを動かします。ノーマルマップは設定しなくても大丈夫ですが設定したほうが影ができて興奮できます。2の実機が届いてたら実機で動かしたかったんですが。残念ながら実機確認はできていません。2のエミュレータでは動くのを確認しました。2実機でも動くと思うよ。(1)自己紹介ZuQ9NnZuQ9->Nn(ズッキューン)です。