この記事では、自作したアイテムに持てる機能と衝突判定機能(コライダースクリプト)を設定して、Clusterでボールをクラブで打つワールドを作成した。
この記事の参考書籍
はじめに
以前作成した「ball and bar」のワールドの棒とボールは、Unityで作成した3Dオブジェクトであったため、初めからColliderは設定されていた。しかし、自作したアイテムをUnityにインポートするとオブジェクトにはメッシュ(外殻)だけしかない。オブジェクト同士を衝突させるためには、自力でCollider(衝突判定機能)を設定する必要がある。
具体的には空のGameObjectにもColliderを設定することができるので、アイテムにコライダーを設定した空オブジェクトの子を着ける。
準備
Clusterワールドにインポートするアイテムとして、Blenderでゴルフクラブ用のアイテムを作成してFBXファイルとしてデスクトップに保存。
このFBXファイルをUnityのClusterCreatorKitにインポートして、Clusterのワールドで使えるようにする。
UnityのClusterワールド起動
デスクトップにクラブのfbxファイルがある状態で、Unity Hubアイコンをクリックして起動。ClusterCreatorKitTemplates-masterをクリック。
Clusterワールドが表示された。
プレーンのワールドを開く
新たなワールドを作成するため、最低限要素3つ入りワールド(plane)を開く。
上部メニューから「File」→「Open Scene」クリック。
”Load Scene”ウィンドウで、以前保存した”plane”ワールドを選択して[開く]クリック。
Planeワールドが開いた。
アイテムをUnityにインポート
Blenderで作成し保存した”club.fbx”ファイルを、デスクトップからUnityのAssetsフォルダ内にドラッグ&ドロップ。
Assetsフォルダ内に”club”ファイルが追加された。
ファイルをクリックすると、いくつかの要素が含まれているのが分かる。
アイテムをSceneビューに追加
次にこの”club”ファイルをAssetsフォルダ内からHierarchyビューにドラッグ&ドロップ。
”club”オブジェクトがHierarchyビューに追加され、Sceneビューにも巨大なシャフトが表示された(Inspectorビューの数値は図のごとく)。でかい!
InspectorビューのScaleを変更して縮小。
Rotationも変更して(見やすいように)縦に置いた。
空オブジェクトにコライダー設置
準備
この後、空のオブジェクトにcolliderを付ける(設定する)作業を行うのだが、colliderが見えないと作業ができないので、見えるようにしておく。
外郭表示設定
画面右上にあるGizmos切り換えアイコン(ワイヤーのボールみたいな形)をクリックして有効にしておくと見えるようになる。
この時点ではアイテムの外郭が表示されている。
シャフト用のCollider用の空オブジェクト追加
上部メニューから「GameObject」→「Create Empty」クリック。
HierarchyビューとSceneビューにGameObject(2)という名前の空オブジェクトが作成された。
小さい立方体の外郭が表示された。
オブジェクト名を”shaft collider”に変更し、InspectorビューのPositionを変更して見やすい位置(空中)に移動。
Scaleもシャフトの大きさに合わせる。
空オブジェクトにコライダーを設定
Inspectorビューの[Add Component]ボタンをクリックして、”Box Collider”を選択。
Box Colliderが設定されると、Sceneビュー上でColliderの輪郭(赤色枠)が表示される。
コライダーの位置調整
視点を横方向に変更。シャフト方向に伸びたColliderの輪郭が良くわかる。
真横のビューにして、shaft colliderをクラブのシャフトの位置に合うように移動する。
真縦のビューにして、更にColliderを移動させて合わせる。シャフトのcolliderはこれで良し。
2つ目のコライダーを作成
次はフェイス部のColliderを設定する。
空オブジェクト作成
上部メニューから「GameObject」→「Create Empty」クリック。
HierarchyビューとSceneビューにGameObject(2)という名前の空オブジェクトが追加された(さっきと一緒)。
先程同様、オブジェクト名を変更(face collider)し、Positionで位置を変更。
コライダー付与
[Add Component]ボタンをクリックして、Box Colliderを設定。
SceneビューでCollider輪郭が表示されている。
横からのビューに視点を変更し、Colliderの大きさを、クラブのフェイス部に合うようにScale値を変更する。
コライダーの位置・向きの調整
shaft colliderと同様に、真横のビューに視点変更して、face colliderの位置を移動する。
[回転]アイコンとクリックしてcolliderの向きも変える(回す)。
真縦の視点にして、同様にface colliderの位置を移動。
face colliderの角度については、フェイス部の向きに沿った(平行な)ビューになるように視点を変更して、[回転]アイコンをクリック後、3軸の方向に回転しながら合わせた。
ビューを変えて、更に[移動]と[回転]で微調整。
最終的に、3方向からのface collierの位置と回転は、図のように設定した。
グリップ作成(ColliderとGrabbable Item付き)
次はグリップのオブジェクトを作成し、colliderと持てる機能を設置する。
空オブジェクト作成
前2回と同様、上部メニューから「GameObject」→「Create Empty」クリック。
コライダー設定
新しい空オブジェクトに、”grip”と命名し、位置を変えて、[Add Component」ボタンから「Box Collider」選択。
Scaleでサイズも変更。Colliderの輪郭が表示された。
コライダーの位置調整
真横・真縦の視点で、[移動]によって、”grip”colliderの位置をクラブのグリップ部に合わせる。
”grip”オブジェクトにはcolliderとしての機能だけではなく、クラブの把持部としての機能も設定する。
そのためには”クラブ”オブジェクトに持てる機能(Grabbable Item)を設定して、そのスクリプトの”Grip”に把持部オブジェクトを指定する必要がある。
Grabbable Item設定
まず、クラブに持てる機能を設定する。
Hierarchyビューで”club”を選択。Inspectorビューの[Add Component]ボタンをクリック。検索結果から”Grabbable Item”を選択。
”club”オブジェクトのInspectorビューに”Movable Item(Script)”と”Grabbable Item(Script)”が追加された。
空オブジェクト(grip)をアイテム(クラブ)の”子”にする
Hierarchyビューで、”grip”(と、”shaft collider”と”face collider”もついでに)を”club”表示上にドラッグ&ドロップ。
すると、すべてが”club”オブジェクトの下層に表示された(親子関係となった)。
空オブジェクトをアイテムのGripに指定
”子”とした”grip”オブジェクトを、”club”Inspectorビューの「Grabbable Item(Script)」の”Grip”指定ボックス内にドラッグ&ドロップ。
Grabbable ItemスクリプトのGripに、”grip”オブジェクトが指定された。
これでクラブのCollider設定はとりあえず完了したので、チェックする。
ワールド再生でクラブの確認
画面上部の[▶](再生)ボタンをクリックして、Gameビュー開始。
落ちているクラブを指定してクリックすると、クラブが持たれた。
しかし、この角度ではボールを打てないな。一度停止([▶]クリック)。
グリップオブジェクトを軸回転
”grip”オブジェクトをZを軸に-90度回転させる(持ち位置を回す感じ)。
そして再生([▶」)。
クラブを床から拾うと、クラブのフェイス面が左を向いた状態で持たれた。
なるほど。こうやって(GripオブジェクトのRotation変更)持ち方を設定するのか。
クラブの設定は一先ず完了。
ボール追加
次はボールの制作。と言っても、難しくはない。
上部メニューから「GameObject」→「3D Object」→「Sphere]クリック。
Sceneビューに巨大な球が追加された。
InspectorビューのPosition, Scaleの数値を変更して、球の位置と大きさを調整。
ボールにスクリプト・マテリアル設定
ボールにするには、球を動かせる物体にして色を付ける必要がある。
Inspectorビューの[Add Component]から”Movable Item”を選択して設置。
Assetsフォルダ内にある青色マテリアル(以前作成したもの)を、(Inspectorビューの)Default-Material部(マテリアルのエリア)にドラッグ&ドロップして変更する。
Gameビュー再生
クラブとボールが完成したので、[▶](再生)ボタンをクリックして、Gameビューを開始。
クラブを持って、フェイス部をボールに当てると、ボールは転がって床から落ちた。
成功かな。
Clusterにアップロードするためのアイキャッチ画像をスクリーンショットから作成・デスクトップに保存して、今回は終了。
次回は、このクラブとボールのワールドをClusterにアップロードして、MetaQuestで本当にクラブでボールが打てるのかどうか検証する。
参考書籍