ブラウザの中で、人間を一人動かせた。すると、次に作りたい遊びが見えてきた。
走る。跳ぶ。箱へぶつかる。箱が動く。強く当たると壊れる。
下の実験を触ると、箱が動いた瞬間に「横に立つもう一人も、ついてきたら」と考えたくなるはずだ。
人間を走らせ、箱へぶつかってみる
下の「3Dを読み込んで動かす」を押すと、その場で3Dの実験が始まる。
まず、まっすぐ走る。次に、箱へぶつかる。箱が動いたら、ジャンプして越えてみる。
動画ではない。自分の操作で、その場の結果が変わる。
箱が別の箱へ当たっただろうか。横に立っている二人目も走ったら、この押された箱を避けられるだろうか。
人間が動いた。箱も動いた。
次に考えたのは、技術の名前ではなかった。
立っている二人目も、つられて走り出したらどうなるんだろう。
箱が動くだけで、少しゲームになる
最初は人間を歩かせるだけだった。
そこへ物理を入れた。
箱へぶつかる。箱が押される。別の箱へ当たる。勢いが強ければ壊れる。
こちらが箱の動きを一つずつ決めたわけではない。衝突した結果が、その場で生まれている。
物理演算の面白さは、リアルさよりも少し予想外になることにあるのかもしれない。
さっき箱を押したとき、思った方向へ動かなかったなら、そのずれが遊びの種になる。
少ないルールから遊びが生まれていた
React Three Fiber公式のExamplesには、レーシング、ピンボール、宇宙ゲーム、Minecraft風ゲーム、Arkanoid、卓球などが並んでいる。
特に気になったのが「Arkanoid under 60 LOC」だった。
ボールが動く。壁で跳ね返る。ブロックへ当たる。
ルールは少ない。それでも遊びになる。
機能を増やすより、一つの現象を何度も触れる形にするほうが面白いのではないか。
人間を増やす前に、箱をもう一度押してみる。毎回同じように見えて、少しずつ違う。
人間を10人置いたら何が起きる?
次に置きたい人間は、強い戦士ではない。
パンツ一枚。武器なし。
できることも少ない。
走る。跳ぶ。転ぶ。
そんな人間を10人置く。
一人が走る。近くの人がついていく。さらに別の人も動く。
先頭が急に曲がる。後ろの人が曲がれずにぶつかる。一人が転ぶ。後ろも巻き込まれる。
全員転ぶ。
まだ、この10人は動いていない。Yukaも、追従も、転倒の連鎖も未実装だ。ここから先は次に試したい仮説になる。
でも、一人を実際に動かしたあとなら、10人が走り出す場面を少し想像できる。
人間の行動を人間へ伝染させたい
AIの人間を動かす候補としてYukaがある。
Yukaには追跡、逃走、経路移動、障害物回避、リーダーへの追従などが用意されている。
Flockingの実例は、次の3つを組み合わせて群れを作る。
- 周囲と同じ方向へ進む
- 仲間へ近づく
- 近づきすぎたら離れる
これを鳥や魚ではなく、人間へ使ってみたい。
誰かが走ったらついていく。
誰かが止まったら集まる。
誰かが跳んだら真似する。
転ぶことまで伝染したら、たぶん面白い。
最初に足すルールは一つでいい。ついていく強さだけ変える。急に曲がると後ろが詰まる。それから転倒を足す。
動きを試してからゲームを見つける
最初からゲームの設計図を完成させるつもりはない。
人間を増やす。追いかける強さを変える。転びやすくする。障害物を一つ置く。
一つずつ動かす。
思わず笑った動きだけ残す。
ゲームを設計してから動かすのではなく、動かした結果からゲームを見つける。
人間を一人動かせた。
次は、立っている二人目を動かす。読んだ人が「なら、こうしたら」と思いつく場所を、そのまま残したい。
その二人が、意味もなく同じ方向へ走り始めるところを見てみたい。
実際に動かして分かった、困ったことと解決方法
人間が走り、箱が動くところまで作ると、動かす前には分からなかった問題が見えてきた。
処理が重すぎると、そもそも動かない
3Dの人間、物理演算、影、アニメーションを一度に動かすと、処理が重くなる。重くなりすぎると、動きが遅くなるのではなく、画面そのものが動かなくなる。
だから、動く画像や3Dをページ内で多用しないことにした。
この記事の3Dも、最初から読み込まない。「3Dを読み込んで動かす」を押したときだけ起動する。画面から離れて30秒たつと終了し、「停止して閉じる」を押せばstageごと隠れる。
実験が増えても、同時に動かすのは一つだけにする。
パーツに分けないと、デバッグに時間がかかる
人間、箱、壁、カメラ、操作を一つの塊として作ると、何かがおかしくなったときに原因が分からない。
人間の動きが悪いのか。箱の物理設定が悪いのか。カメラがずれているのか。全部を同時に疑うと、確認だけで時間がかかる。
そこで、人間、箱、壁、カメラを別のパーツとして考え、一つずつ動かして確認する開発環境にした。直す対象を一つに絞ると、デバッグが早くなる。
端まで行くと、パラレルワールドへ抜けてしまう
床の端まで走ると、そのまま世界の外へ抜けられた。画面だけが人間を追い続けるので、どこか別のパラレルワールドへ行ってしまったように見えた。
解決方法は単純で、世界の四方に壁を作った。
見た目だけの壁ではなく、物理的に通り抜けられない壁にする。これで端から落ちず、同じ場所の中で走り続けられるようになった。
箱は思ったより小さかった
箱だけを見ていると問題なくても、人間、床、カメラと一緒に置くと、思ったより小さく見えた。
3Dでは、物の大きさを単体で決めてもバランスが取れない。人間との比率、周囲の空間、カメラから見た大きさを一緒に確認する必要がある。
今回は箱を少し大きくし、現在は一辺1.08の大きさに調整した。正しい数値を探すというより、実際の画面で押したくなる大きさを探した。
現在の課題
いま、実際に操作していて困っている課題は特にない。
処理が重くなりすぎない。世界の端から落ちない。箱も周囲に合う大きさになった。人間を動かし、箱へぶつかるところまでは動いている。
10人の追従や転倒の連鎖はまだ作っていない。ただし、これは現在の不具合ではなく、次に試したい実験だ。






