Menu
CoddyTech

転がるボール

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

この章では、小さなゲーム「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を開始して、矢印キーでボールを転がしましょう。

  1. Ball.csのStart()で、rb = GetComponent<Rigidbody>();を設定します。
  2. FixedUpdate()で、float x = Input.GetAxis("Horizontal");とfloat z = Input.GetAxis("Vertical");を読み取り、その後rb.AddForce(new Vector3(x, 0f, z) * force);を呼び出します。

「プレイ」を押し、ゲームをクリックしてボールを転がしましょう。ボールは移動しながら向きを変えます。その後、「確認」を押します。

自分で試してみよう

using UnityEngine;

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

    void Start()
    {
    }

    void FixedUpdate()
    {
        // 矢印キーでボールを押す:Horizontal は x 軸方向、Vertical は z 軸方向。
    }
}

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

自分で練習してみよう: Unityプレイグラウンド