物理エンジンと当たり判定を使いこなそう(その2)

前回の!続き!
前回はRigidbodyコンポーネントの設定まで説明した。今回はその続き、実際にスクリプトから利用するお話だ。この記事では

Rigidbodyでオブジェクトを移動させてみる

ということをメインに色々説明していく。 解説するにあたってタナトモがキャラクターを作っておいた。ニワトリのクック君だ。
力作だ
こっち見ないでほしいっす...
今回はクック君がこんな感じの
迷路を抜け出すゲームを作ってくよ~
なんでクック君浮いてるんすか...
まだRigidbodyアタッチしてないから...


クック君は飛べない鳥なのだ。残念だが地面に降ろさなくてはならない。RigidbodyをアタッチしてUseGravityにチェックを入れれば地面に降りてくる。
これで重力が反映されるっす!

ちゃんと地面に降りてくれたね~
じゃあたにっこさん、クック君を動かす
プログラムを書いてみて
それくらいなら余裕っす!
あれ...?
壁なんて無かったんや...


たにっこさんのプログラムでクック君を移動させたら、壁を貫通して動いてしまった。 今回問題になっているのは以下の部分だ。 進む方向を指定して現在の座標に加算していくプログラムになっている。 このプログラム自体に間違いはないのだが、実はRigidbodyとtransform.positionでの移動は相性が悪いのだ!
代わりにvelocityってのを使うのさ
おお~
簡単に違いを説明するよ


まずたにっこさんの書いたコードの解説からしていく。これはtransform.positionでの移動だった。この移動は細かく瞬間移動を繰り返すような処理なのだ。そのため物理演算と喧嘩することがある。 ※画像はイメージです


次にタナトモの書いたコード。これはRigidbody.velocityでの移動だ。この移動は加速度を設定しているだけで、実際の移動の処理は物理演算に任せている。 ※画像はイメージです

けっこう説明省いたけど
まあこんなモンだ


このあたりの説明は、話そうと思えばいくらでも話せてしまうのだが、初心者のうちは今説明した違いだけ覚えていてくれれば困ることは少ない(と思う)
最初から厳密な違いや内部的な話とかを考えているとゲームを作り始めるのが10年後とかになるので、まずは動かしてみる!というのを大事にしてほしい。
やってりゃ慣れる
(説明面倒なだけじゃないっすよね...)
(違うよ)
(直接脳内に...!)