Menu
CoddyTech

転がるボール

CoddyのUnityジャーニー「物理演算とゲームプレイ」セクションの一部。レッスン 27/63。

この章では、小さなゲーム「Coin Rush」を作ります。壁に囲まれたアリーナで矢印キーを使ってボールを転がし、時間切れになる前にコインを集めます。Unityのプロジェクトと同じように、2つのスクリプトで処理を分担します。Ballはボールを動かし、スコアと時計を管理します。Coinは各コインに配置します。Coin.csは空のクラスから始まり、次のレッスンで内容を追加します。

ボールは、位置を直接置き換えるのではなく、押すと転がります。AddForceを使ってRigidbodyに力を加え、回転は自由にしておきます。力でボールが動き、床との摩擦がボールの底面を捉えて回転させます。Spaceキーを押している間、このボウリングボールはレーンを転がり続けます。

public float push = 6f;
private Rigidbody rb;

void Start()
{
    rb = GetComponent<Rigidbody>();
}

void FixedUpdate()
{
    if (Input.GetKey(KeyCode.Space))
    {
        rb.AddForce(Vector3.forward * push);
    }
}

滑らずに転がるボールは、速度を半径で割った値で回転します。そのため、半径0.5のボールが毎秒3ユニットで移動すると、毎秒6ラジアンで回転します(rb.angularVelocity)。代わりにtransform.positionを変更するか、RigidbodyのConstraintsで回転を固定すると、回転せずにパックのように滑ります。単色の球体はどちらの場合も見た目が同じです。転がりを確認するには、ゲームの実行中にRigidbodyのInfoセクションにあるAngular Velocityを見てください。

challenge icon

チャレンジ

中級

ボールを使って Coin Rush を始めましょう。インスペクターで Ball の force を 10 に設定します。

  • Start() で、ボールの Rigidbody を rb に格納します。
  • FixedUpdate() で、矢印キーを使ってボールを押し動かします。x 方向には Input.GetAxis("Horizontal")、z 方向には Input.GetAxis("Vertical") を使い、どちらも force を掛けます。
  • ボールが転がるように、回転は自由にしておきます。

今のところ Coin.cs はそのままにしておきます。再生を押し、ゲーム画面をクリックしてアリーナ内を転がり回ってから、確認を押します。

自分で試してみよう

using UnityEngine;

public class Ball : MonoBehaviour
{
    public float force = 10f;
    private Rigidbody rb;

    void Start()
    {
    }

    void FixedUpdate()
    {
        // 矢印キーでボールを動かす:Horizontal は x 軸方向、Vertical は z 軸方向。
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

物理演算とゲームプレイのすべてのレッスン