Menu
CoddyTech

毎秒回転させる

CoddyのUnityジャーニー「Unityスクリプトの基礎」セクションの一部。レッスン 11/85。

transform.Rotate(x, y, z)は、GameObjectを各軸の周りに指定した角度だけ回転させます。Update()内で呼び出すと、フレームごとに少しずつ回転するため、オブジェクトは回転し続けます。

では、1秒間に何フレームあるでしょうか?高速なコンピューターでは120フレーム、スマートフォンでは30フレームかもしれません。単純なtransform.Rotate(0, 0, 5)では、高速なコンピューターのほうが4倍速く回転します。Unityの答えはTime.deltaTimeです。これは前のフレームから経過した秒数です。速度にこれを掛けると、どのデバイスでも速度を1秒あたりの値として扱えます。

ここでは、車輪をz軸の周りに1秒あたり45度回転させます。

public float speed = 45f;

void Update()
{
    transform.Rotate(0, 0, speed * Time.deltaTime);
}

1秒あたり60フレームの場合、Time.deltaTimeは約0.0167なので、各フレームで45 * 0.0167、つまり約0.75度回転し、これが60回で45度になります。1秒あたり30フレームの場合、各フレームで回転する角度は2倍になりますが、1秒間の合計はやはり45度です。

challenge icon

チャレンジ

簡単

立方体を y 軸を中心に、1 秒あたり speed 度回転させましょう。

  1. Update() 内で、transform.Rotate(x, y, z) を呼び出します。
  2. y に対応する中央の数値には speed * Time.deltaTime を入れ、x と z には 0 を入れます。上の車輪は z 軸を中心に回転しましたが、この立方体は y 軸を中心に回転します。

「プレイ」を押すと、立方体は 1 秒ごとに 4 分の 1 回転します。次に「確認」を押します。

自分で試してみよう

using UnityEngine;

public class Spinner : MonoBehaviour
{
    public float speed = 90f;

    void Update()
    {
        // ここでキューブをy軸を中心に回転させる
    }
}

Unityスクリプトの基礎のすべてのレッスン

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