物理
物理は使いたいときだけ動き、ほとんどは自動です。頼まなくても床は固く、dynamic と印を付けたものは 落ちます。以下のルールは、期待どおりに動かない 2〜3 の場面を説明します。
何が「固い」とみなされるか
rigid body を与えたもの、あるいは形を持っていて、その上のどれもまだ名乗り出ていないものが 固くなります。床が人を止めるのは、それが床だからです。印を付け忘れる心配はありません。
オブジェクトから上に向かって見ていくと、こうです。
| オブジェクトが持つもの | 結果 |
|---|---|
| rigid body | それ自体が 1 つのボディ |
| none に設定された rigid body | ここは子も含めて何も固くありません |
| collider(見えないものでも) | 固い |
| ジオメトリがあり、表示されている | 固い |
| ジオメトリはあるが、隠されている | 固くない |
| 上のどれでもない(グループ、ライト) | 固くない |
ここから 2 つのことが導かれ、どちらも役に立ちます。
collider があるのは意図した証拠なので、見えなくても固いままです。 見えない壁はまさにこう 作ります。collider だけ置き、ジオメトリは置かない。来場者は何もないところにぶつかります。
ジオメトリが固いのは、見えている間だけです。 飾りの形を隠せば、何かを止める力もなくなります。
いったん大きなボディに加わった形は、隠しても中に残ります。外したいときは、オブジェクトを削除するか、 その rigid body を none にしてください。
衝突の形はどこから来るのか
collider を与えれば、それがそのまま使われます。なければ、エンジンがジオメトリから形を割り出します。
| ジオメトリ | できるもの |
|---|---|
| box・sphere・cylinder・capsule・cone | 対応する形 |
| 3 種類の多面体 | 正確な凸包 |
| plane・circle・ring・triangle | 薄い両面の板 |
| torus | 重なり合う球のリング |
| extrude・lathe | 正確なメッシュ形状 |
| 読み込んだ 3D モデル | なし。下を参照 |
物理でいちばん多い驚きが、圧倒的にこれです。GLB をシーンに置いて dynamic にすると、世界を すり抜けて落ちていきます。collider を足せば — box か capsule でほぼ正解です — きちんとふるまいます。
メッシュ形状(extrude・lathe・読み込んだジオメトリ由来)は、静止した床や壁には問題ありません。 動くものに使うと、ほかのものをすり抜け、震えます。box・sphere・capsule・cylinder を使ってください。 単純な形ははるかに高速でもあります。
スケールは形に焼き込まれるので、オブジェクトを拡大縮小すれば、衝突する相手も同じように変わります。
物理ボディを動かす
dynamic なボディの位置は物理が所有していて、次のステップであなたの変更を上書きします。 エディターに無視されているように見えます。
動かすにはインパルスかフォースを、どこかに置くにはテレポートを使ってください。 リスポーン、チェックポイント、「最初に戻る」に使います。
script では ctx.physics.teleport(...) と ctx.physics.applyImpulse(...) です。
→ ctx のリファレンス
歩くキャラクターが欲しいなら、ゲーム操作がこれらを
すべて引き受けてくれます。
速度の読み取りは軽く、1 フレームほど遅れます。「いま動いているか?」には最適ですが、正確な計算には 向きません。
ワールドの設定
重力・既定の摩擦・反発・ソルバーの品質はプロジェクト単位で設定し、space ごとに上書きできます。 変更は即座に反映され、再起動は要りません。
個々のボディは摩擦と反発を上書きできます。触らなければ、ワールドの値を継承します。
衝突
2 つのものが触れると、両方に伝わります。それぞれで on-collide イベントが発火し、それぞれが
何にぶつかったかを知ります。イベントの中で特定のオブジェクトに絞ることも、開いたままにすることも
できます。
タップと違い、実際に触れたオブジェクトでしか発火しません。イベントは、ぶつかる側に付けてください。
そもそも物理が動くのはどこか
| どこ | 物理は動く? |
|---|---|
| プレイヤー(ウェブ) | 動きます |
| ARClip アプリ(モバイル) | 動きます |
| エディター | 動きません。作業中に何かが落ちることはありません |
プレイヤーでも、エンジンが物理を起動するのは、シーンがそれを必要とするときだけです。dynamic か kinematic なものがある、ゲーム操作がある、ボディと script がある、といった場合です。静的な背景 だけのシーンはその代金を払いません。ウェブでは、来場者に数メガバイトのダウンロードをさせずに 済むということです。
判定は生きているので、セッション中に script が作ったボールが、自分のために物理を起動させます。
次へ: ライト — そして、なめらかに変化するもの。