【Unityはじめのいっぽ】Unityで3Dのボールを転がすプログラムを作る

今回はUnityを初めて使う人向けのプログラムを作っていきます。
3Dプロジェクトで平面上にボールを置いて、ボールを動かす作品を作ってみましょう。

 

まずはこの作品のポイントである「Rigidbodyコンポーネント」について説明します。

Rigidbodyコンポーネントは、Unityで物体を物理演算で動かすために使用するものです。
表は、Rigidbodyコンポーネントの一部の主要なプロパティを簡単に説明したものなので、ぜひメモしておいてください。

プロパティ名 説明
Mass  物体の質量。大きいほど重くなります。
Drag  空気抵抗。大きいほど動きが遅くなります。
Angular Drag  回転の抵抗。大きいほど回転が遅くなります。
Use Gravity  重力を使うかどうか。
Is Kinematic  キネマティック(物理演算を使わない)かどうか。
Freeze Rotation  回転を固定するかどうか。

 

例えば、もしあなたがゲームで重たい石を作りたいとしたら、RigidbodyのMassプロパティを大きくします。また、もし飛ぶ物体を作りたいとしたら、Use Gravityプロパティをfalseに設定します。

 

Unityで平面上でボールを転がすゲームを作るには、以下のような手順で行います。

  1. Unityを起動し、新しいプロジェクトを作成する。

  2. 「GameObject」メニューから「3D Object」→「Sphere」を選択し、平面上にボールを配置する。

  3. ボールに「Rigidbody」コンポーネントを追加する。これにより、ボールは重力の影響を受けて落下するようになります。

  4. 「Add Component」メニューから「Physics」→「Sphere Collider」を選択し、ボールに当たり判定を追加する。

  5. 「Add Component」メニューから「Script」を選択し、ボールにスクリプトを追加する。スクリプトでは、例えば「Space」キーを押すと、ボールに力を加えることで転がす挙動を実装する。

  6. Unityの「Inspector」ウィンドウで、追加したスクリプトの設定を調整し、ゲームを作成する。

  7. 「File」→「Build and Run」を選択し、作成したゲームを実行する。

これで平面上でボールを転がすゲームが作成できます。

以下は、Unityで平面上でボールを転がすゲームでボールに追加するスクリプトの例です。

 

using UnityEngine;

public class BallController : MonoBehaviour {
// Rigidbodyコンポーネントを入れる変数
private Rigidbody rb;

// Start is called before the first frame update
void Start() {
// Rigidbodyコンポーネントを取得
rb = GetComponent<Rigidbody>();
}

// Update is called once per frame
void Update() {
// Spaceキーが押されたら
if (Input.GetKeyDown(KeyCode.Space)) {
// Rigidbodyに力を加える
rb.AddForce(new Vector3(0, 0, 10), ForceMode.Impulse);
}
}
}

このスクリプトは、スクリプトがアタッチされた物体にRigidbodyコンポーネントがアタッチされていることが前提です

  • using UnityEngine;
    Unityエンジンを使用するために必要な命令です

  • public class BallController : MonoBehaviour {
    クラス名です。このスクリプトが持っているコードはBallControllerクラスになります。

  • private Rigidbody rb;
    スクリプト内で使用するRigidbodyコンポーネントを入れる変数です

  • void Start() {
    スクリプトがアタッチされた物体が生成された時に一度だけ呼ばれる関数です

  • rb = GetComponent<Rigidbody>();
    スクリプトがアタッチされた物体からRigidbodyコンポーネントを取得します。

  • void Update() {
    スクリプトがアタッチされた物体が生成されてから毎フレーム呼ばれる関数です

  • if (Input.GetKeyDown(KeyCode.Space)) {
    Spaceキーが押された時の処理です

  • rb.AddForce(new Vector3(0, 0, 10), ForceMode.Impulse);
    Rigidbodyに力を加えます。ここでは、z軸方向に10の力を加えています。

このスクリプトをアタッチした物体にRigidbodyコンポーネントがあると、スペースキーを押すたびにボールが前に動くようになります。

最後に、カメラとマテリアルの設定を貼っておきます。ボールと床のマテリアルはProjectタブで右クリック(または+マークをクリック)して作成し、好きな色を設定してみましょう。

 

Scratchと同様に、まずは文法と英単語に慣れながら、簡単な作品づくりから徐々に理解していきましょう!

次回はゲームのギミックを追加していきます。
最後まで読んでいただきありがとうございました。

 

SNSでもご購読できます。