こんにちは。第二開発部のT.Nです。
今年kentemに新卒で入社したUnity初心者が、同じUnity初心者へ向けて解説する記事、第二回目です。
前回はGameObjectをスクリプトから動かしました。
前回:Unityでゲームをつくろう【#1 スクリプトからGameObjectを動かしてみる】 - KENTEM TechBlog
今回はRigidbodyというコンポーネントを使って、簡単な物理演算をしていきます。 (前回、「第二回ではキーボードから入力を受け取る」という宣言をしていましたが変更しました。申し訳ございません、、、)
GameObjectを入れる
まずは何もしていない状態を確認していきます。
今回はSphereとPlaneを入れ、SphereをPlaneより上に配置します。
これで実行してみます。
するとSphereは空中で止まったままとなりました。
これを重力の影響を受けるようにしてみます。
Rigidbodyコンポーネントを追加する
重力の影響を受けさせるには、新たにRigidbodyというコンポーネントを追加しなければいけません。
以下コンポーネントを追加する手順です。
- InspectorのAddComponentをクリック
- 入れたいコンポーネントの名前を検索
今回はSphereにRigidbodyと検索して入れます。
これで実行してみます。
するとSphereが落下し、Planeに衝突して止まりました。
これはRigidbodyのUseGravityという項目がOnになっており、Sphereが重力の影響を受けるようになったためです。
Rigidbodyとは
このRigidbodyとは、GameObjectに物理挙動をつけるためのコンポーネントです。
重力や空気抵抗など、オブジェクトに力を与えたりできます。
初期速度を与える
それでは実際にRigidbodyの値を変えて、Sphereに初期速度を与えてみましょう。
Rigidbodyの中にVelocity(Rigidbody→Info→Velocity)という値があります。
これは物体のx, y, z方向の速度です。
Object(Sphere)を落としてみるとyの値が増えて(落下なのでマイナス方向)、地面に当たって止まると0になるのがわかります。
この値をStart()で変えて初期速度を与え、Sphereを飛ばしてみましょう。
初期速度を与えるコードのスクリプトを作成し、Sphereにアタッチして下さい。
以下コード例です。
using UnityEngine; public class Sphere : MonoBehaviour { private Rigidbody _rigidBody; private void Start() { _rigidBody = GetComponent<Rigidbody>(); _rigidBody.velocity = new Vector3(15, 0, 0); } }
今回はRigidbodyコンポーネントの中のVelocityの値を変えたいので、GetComponentでRigidbodyを取得します。
その後、velocityに初期速度のVector3を与えます。(今回はx方向に15)
では実行してみます。
するとSphereが飛んでいきました。
このようにしてGameObjectに初期速度を与えることができます。
空気抵抗を与える
先ほどのVelocityの値を観察すると、地面に当たるまでVelocityのx値が全く変化がないことがわかります。
実際は空気抵抗などで少しずつ速度は落ちていくものです。
ではその空気抵抗をつけてみましょう。
空気抵抗はDragという項目で設定します。
デフォルトは0で、空気抵抗が全くない状態です。この値を増やしていくと抵抗が強くなっていきます。
今回は1にしてみます。
すると先ほどとは異なり空中で速度が落ちていきました。
おわりに
いかがだったでしょうか。
私はRigidbodyのような物理演算系のコンポーネントは、使用した経験がないので、作っていて楽しかったです。
次回は、UIを使ってみたいと思います。(また変更したらすみません)
KENTEMでは、様々な拠点でエンジニアを大募集しています! 建設×ITにご興味頂いた方は、是非下記のリンクからご応募ください。