RaspberlyのブログRaspberlyのブログスマートフォン用の表示で見るRaspberlyのブログUnityネタをメインとした技術系ブログです。にゃんこ大戦争や日常なども。Questの開発ネタをやっていきます。Sなどにもそのまま応用できるかと思います。銃などを掴む時、取っ手やグリップなど特定のポイントを握るようにしたいと思うことがあると思います。いう時はGrabbableについているSnap機能を使うと便利です。今回は、とても使い方がわかりにくいことで評判のSnapOffsetについて解説していきます。2019年9月13日追記よりわかりやすく解説した補足記事を投稿しました。こちらも合わせてどうぞ。Questセットアップこのメモは前回の続きとなります。方は先にこちらからどうぞ。raspberly.hateblo.jp使用アセット今回使用したアセットを紹介します。Wakizashihttp://u3d.as/1vSL高品質な刀です。AssetStoreまとめさんでも紹介されていました。www.asset-sale.netハンドガンアセットhttp://u3d.as/1jZw弾丸やマガジンも含まれたハンドガンのアセットです。サンプルシーンの確認Assets/SampleFramework/Usageに様々なサンプルシーンがあります。今回も前回と同じAvatarGrabシーンを改造していきます。今回のSnapOffset機能はDistanceGrabシーンで活用されているのでそちらも併せてどうぞ。raspberly.hateblo.jp物を持つ時に特定の場所を掴んでほしい前回の記事では物を持った時にGrabbableのコライダーの範囲内であればどこでも掴んで持つことができました。銃や刀のように掴んでほしい位置や角度が明確である場合どうすればいいでしょうか。刀の場合、刀身部分を掴めるのはあまり好ましくありません。柄を握ってほしいはずです。Grabbableには物を掴んだ時に位置や角度を矯正する機能があります。その機能がSnapOffsetです。Grabbableコンポーネントを見てみると、SnapPositionとSnapOrientationの項目が確認できます。ここにチェックを入れると掴んだ時に、SnapOffsetの所に入っているTransformに合わ移動します。掴んでほしいポイントを示す空のゲームオブジェクトを子オブジェクトにする。この空のゲームオブジェクトをSnapOffsetとして登録すれば掴んだ時に位置や角度が矯正されます。・・・と思った方が多いかと思います。実はこのやり方は間違いです。この手順だと正常にスナップされません。掴んだ時に位置や角度がおかしな場所になります。Offsetの本当の使い方UnityForumの方にもこの問題点が取り上げられていました。https://forum.unity.com/threads/vr-oculus-sdk-touch-controller-snap-position-snap-offset-grab-a-gun.512853/正しい使い方は以下に記しますが全く直感的ではない使い方です。このオブジェクトをSnapOffsetとして登録します以上となります。実際にOffsetさせてみる上記の手順通りに実際にやってみます。Position、Rotationともに0のゲームオブジェクトを作り、これをSnapOffsetとしてみます。最初のやり方と違い無事手にスナップされました。Position、Rotationが0の場合はこうなります。次にRotationを変えてみます。Xを-60にしました。すると、掴んだ時の角度が矯正されます。これをひたすら動作確認しながら調整する必要がありますが非常に面倒です。ベストプラクティス(このやり方がオススメ)ここのベストプラクティスを@nkjzmさんが紹介していました。Integrationの機能を使った銃の実装についてQiitaにまとめてみました。OVRInputでは左右を区別しないキー入力の呼び出しが出来るので、それを活用した方式になります。OffsetはNullのまま。掴みたいオブジェクトのレンダラーの座標や角度を調整します。子オブジェクトの銃の3Dモデルの位置を調整します。剣の場合はこちら、剣はRorationのxを-60にするといい感じになります。実際に動作確認して細かく調整する必要はでてきます。手の形に収まるようになりました。刀を見てみると、刀身を掴もうとしても柄の部分に矯正されているのがわかると思います。まとめSnapOffsetはnullのまま、3Dオブジェクト側の座標を調整しよう参考資料あー完全に理解した。OffsetRot;を設定したいだけだ。絶対座標という...。2019qiita.com他間違っている箇所がありましたらコメントにお願いします。2019、11日目の記事です。Touchの開発ネタをやっていきます。Touchの開発ネタをやっていきます。Questの開発ネタをやっていきます。Questの開発ネタをやっていきます。アーカイブおすすめアセット参加グループUnityUnityゲーム開発者ギルドリンクはてなブログブログをはじめる週刊はてなブログはてなブログProはてなブログをはじめよう!Raspberlyさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。