PlayCanvasで3Dオブジェクトをリアルな物理法則に従って動かす方法は、ゲーム開発において非常に重要です。
この記事では、COLLISION(コリジョン)とRIGIDBODY(リジッドボディ)コンポーネントを使用して、エンティティの落下を実現する手順をわかりやすく解説します。
【COLLISION(コリジョン)とRIGIDBODY(リジッドボディ)とは?】
- COLLISIONは、物体同士の衝突を検出するための機能です。
衝突と言ってもぶつかるわけではなく、”触れた”、”すり抜けた”など、あくまでも「接触」的な検出になります。
いわゆる「ぶつかる」はRIGIDBODYで再現します。
Playcanvasの公式サイトでもCollisionに関する説明があるので、より詳しく知りたい方は以下のURLより確認できます。
https://developer.playcanvas.com/ja/user-manual/scenes/components/collision/ - RIGIDBODYは、RIGIDBODYは、よく「剛体」と訳されます。
オブジェクトの物理的な挙動(重さ、質量、重力反応)をシミュレートします。
「壁にぶつかったらすり抜けない」はRIGIDBODYの仕事です。
その他、その場にとどまる、重力を反映する、挙動に追従するなどができます。
実際に作ってみたほうが早いと思いますので、早速作っていきましょう。
RigidBodyに関するPlaycanvasの公式解説は以下になります。
https://developer.playcanvas.com/ja/user-manual/scenes/components/rigidbody/
新しいプロジェクトの作成
- PLAYCANVASにログインします。
- 「PROJECT」ボタンを押します。
- 右上にあるオレンジ色の「New 」ボタンをクリックします。
- 「Create a new project」画面が表示されるので、必要な情報を入力します。
- 複数のテンプレートが表示されるので、で「BlankProject」を選択します。
- 画面右側の「Name」にプロジェクトの名前を入力します。
なんでもいいですが、とりあえず「落ちるBOX」にします。無記でもOKです。 - Name の下の「Description」はプロジェクトの概要です。
無記でもいいですが、とりあえず「COLLISIONとRIGIDBODYの話」にします。 - 「Create」ボタンをクリックして新しいプロジェクトを作成します。
これで作成は完了です。 - ダッシュボードに自動で戻ります。 最上段に「落ちるBOX」ができている事を確認します。
次にプロジェクトの編集画面に入ります。 - 「落ちるボックス」をクリックします。
- 画面が変わるので、オレンジ色のEDITORボタンをクリックします。
- シーン選択画面に移るので「Untitled」をクリックします
- ビューポートに床とボックスがある編集画面が表示されます。
手順を文字にすると大変そうですが実際には1分位でプロジェクトはできちゃいます。
床(Plane)の設定
まずは床の設定をします。
物体がすり抜けないようにCOLLISIONとRIGIDBODYをつけて行きます。
手順は下記です。
- ヒエラルキーのPlaneをクリックして選択状態にします。
- 編集画面右側のインスペクターから「ADO COMPONENT」をクリックします。
- ドロップダウンリストが表示されるので「Physics」を選択し左側に表示される「Collision」をクリックします。
- 赤色文字で「Ammo module not…」と表示されるので、赤文字の右の”IMPORT AMMO”をクリックします。
これは新規 プロジェクトの場合”Ammo”と言うスクリプトが入っていないのでインポートしてくれと言っています。 - アセットフォルダーに「Ammo」と言うフォルダーができるのでダブルクリックをして開きます。
ammo.j s他2個のファイルが 入っていると思います。
これらのデータはこのまま放置で大丈夫です。
またAmmoは一度インストールすればそのプロジェクトでは以降インストール不要です。
新しいプロジェクトを作成した場合は、都度インストールします。 - もう一度Planeをクリックして、 編集画面右手のインスペクター内にあるCOLLISIONをクリックします。Typeの文字の右側にBoxと表示されているはずです。
- 先にPleneそのもののサイズを調整したいので、右手のインスペクターのENTITY項目の一番下の”Scale”の数値を (12 , 1 , 12)にします。
- 次にENTITY項目下のCOLLISIONの項目内、「Type」の下にある「Half Extents」の各数値を左から(6 , 0.01 , 6)に 設定します。
- 次にまた「+ADO COMPONENT」をクリックし「Physics」を選択、左側に表示される「RIGIDBODY」をクリックします。
- 画面を下にスクロールさせ、RIGIDBODYの「Type」が「Static」である事を確認します。
これで床の設定は終わりです。慣れるとこれも1分位で出来るようになると思います。
BOXの設定
次にBOXの設定をしていきます。
- BOXをクリックし、選択状態にします。
- 床と同じ様に「+ADD COMPONENT」からPhysicsを選択し、COLLISIONをクリックします
BOXの場合はひとまずCOLLISIONのサイズ等はいじらずにこのままで大丈夫です - 次にRIGIDBODYを設定します。
「+ADD COMPONENT」から「Physics」を選択し「RIGIDBODY」をクリックします。 - 画面を下にスクロールさせRIGIDBODYを確認します。
- RIGIDBODYのTypeがstaticになっているので、これを「Dynamic」に変更します。
- 最後にBOXの高さを調整するので、ENTITYのPositionのY軸(真ん中)の数値を「5」にします。
これですべての設定が完了しました。
Launchして確認
ビューポート上部右側にあるLaunchボタンをクリックします。
するとLaunch画面が開きキューブが上から床に落ちてくると思います。
これでPLAYCANVASで エンティティを落とす事ができました。
めちゃくちゃ簡単!!
まとめ
今回の肝はRIGIDBODYです。
RIGIDBODYには「static」、「Dynamic」。「Kinematic」3つの種類があります。
それぞれを簡単に説明すると下記の感じになります。
Static: 重力の影響を受けずにその場に留まります。
床はstaticなので空間を落下せずに、その場にとどまっている状態になっています。
Dynamic: 重力の影響を受けます。
BOXは高い位置にあるので下に向かって落ちていきます。
ちなみにPlaycanvasでの重力設定は以下の場所にあります。
ビューポート上部の”歯車マーク”⇨インスペクター内”PHYSICS”⇨Gravity
このGravityのYの値が-9.8が地球上の重力を模しています。
Yの値をマイナスではなく、整数にすれば物は上に登っていきますし、X,Zに値を入れれば横向きに重力が発生します。
Kinematic: プログラム制御によって動きます。
例えばプログラムコードを使い、BOXを回転させた時にcollisionも追従して回転します。
この時RigidBodyをkinematicにしていないと、BOXが回転しているように見えても、RigidBody自体は追従していないので注意してください。
また、RIGIDBODYがBOXにもPlaneにもついているので、二つのエンティティがぶつかっています。
試しにBOXかPlaneのどちらかのRIGIDBODYを削除してみてください。
BOXは床をすり抜けていくはずです。
※RIGIDBODYの削除はインスペクタのRIGIDBODYの文字の「横の歯車マーク」をクリックで、Deleteが表示されるので、Deleteをクリックで削除できます。
以上で PLAYCANVASでCOLLISIONとRIGIDBODYを使って物体を落とす方法を解説しました。
PlayCanvasのCOLLISIONとRIGIDBODYを用いることで、簡単にリアルな物理挙動をシミュレーションすることが可能です。
これらのコンポーネントを駆使することで、よりリアルなゲーム開発を行うことができます。
次回はJavascriptを使い、エンティティを回転させる方法について解説していきます。
最後に
ここまでの解説を読んで頂きありがとうございます。
メタバースやバーチャル空間の制作について、
「それでもやはり専門的な知識がないと難しいのでは?」
と考えている方もいるかもしれません。
「メタバースやバーチャル空間制作を誰かに頼みたい」とご検討中の方は、まずはお気軽に「お問い合わせ」を通じて弊社までお話しいただければと思います。
弊社では、豊富な事例を基に、お客様一人ひとりのニーズに合わせた最適な提案を行っております。
バーチャル空間の制作を通じて、お客様のビジネスやプロジェクトに新たな価値をもたらすことが私たちの使命です。
プロジェクト管理から運用まで、トータルでサポートさせていただきます。
メタバースの世界で何を実現したいのか、どのような空間を創りたいのか、まずはお気軽に弊社までお話しいただければと思います。
それをもとに、お客様それぞれの想いを形にするお手伝いをいたします。
まずは小さな一歩からでも、私たちと一緒にメタバースでの可能性を探ってみませんか?
お問い合わせはこちらからどうぞ。あなたのビジョンをお聞かせください。共に新しい価値を創造し、未来のバーチャル空間を一緒に築き上げましょう。