この学習項目では Unity の物理演算機能を使ってみます。
手始めにゲームオブジェクトに重力の影響を与えて画面下の方に落下させてみたいと思います。
演習を行う前に準備をしましょう。
では重力の設定をしていきます。
重力をゲームオブジェクトに与えるためには「Rigidbody」というコンポーネントを TAMA にアタッチする必要があります。
Rigidbody はゲームオブジェクトに落下とか加速度とかいった物理(ニュートン力学)的な挙動を与えるためのコンポーネントで、これから Unity でゲームを作っていく上で散々お世話になります。
では具体的に演習してみましょう。
TAMA のインスペクタの下の方に Add Component というボタンがあるのでそれを押す
Physics → Rigidbody を選択する。するとRigidbody がアタッチされる
なお Physics 2D → Rigidbody 2D という名前が似ているコンポーネントがあるので選択しないように気を付けて下さい。
こちらは 2D ゲーム用の Rigidbody です。
これだけで TAMA に重力がかかるようになりましたが、このままではピクリとも動きません。
そこでVisual Scripting を実行する時のように実行ボタンを押して下さい(図1)。
図1. 実行ボタン (一番左の三角ボタン)
ただしこのままだとずっと落下し続けるので、再度実行ボタンを押して実行を停止して下さい。
すると TAMA が元の位置に戻って停止します。
ここから先は少し難しい話なので分からなければ飛ばしても結構です。
ただし Unity の物理演算機能を使いこなすためには大事な知識ですので興味のある人は是非トライして下さい。
さて地上の重力加速度は約 g = 9.81 ですので、空気抵抗が無ければ落下中の物体は 1 秒ごとに 9.81 m/秒だけ速度が上がります。
Unity の重力加速度も g = 9.81 と設定されていてデフォルトでは空気抵抗も無いので、やはり落下中のゲームオブジェクトは 1 秒ごとに 9.81 m/秒だけ速度が上がります。
実際に実行ボタンを押してから 1 秒ごとの TAMA の落下速度を計測すると下の値となりました (計算誤差があるので理論値通りにはなりません。参考までに使用した計測スクリプトはこちら)
開始約 1 秒後 → 落下速度 9.81 m/秒
開始約 2 秒後 → 落下速度 19.62 m/秒 ( ≒ 9.81 x 2 )
開始約 3 秒後 → 落下速度 29.42997 m/秒 ( ≒ 9.81 x 3 )
開始約 4 秒後 → 落下速度 39.24001 m/秒 ( ≒ 9.81 x 4 )
開始約 5 秒後 → 落下速度 49.05008 m/秒 ( ≒ 9.81 x 5 )
なお Unity は重力加速度の値や重力のかかる方向を変更可能です。
例えば月の加速度( g = 1.62 )を設定してみましょう。
そのためにはまず Edit メニュー → Project Settings → Physics で設定画面を開き、Gravity の Y の値を -9.81 から -1.62 に変更します (y 軸の下方向に重力がかかるのでマイナス値になっています)。
値を変更したら実行ボタンを押して下さい。
すると月面で TAMA を落とした時の様にゆっくりと落下します。
なお Gravity の値を変更した人は次のページに進む前に -9.81 に戻しておいて下さい。