転がるボール
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 を見てください。
チャレンジ
中級Coin Rushを開始して、矢印キーでボールを転がしましょう。
Ball.csのStart()で、rb = GetComponent<Rigidbody>();を設定します。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プレイグラウンド