Menu
CoddyTech

毎秒回転させる

CoddyのUnityジャーニー「Unityスクリプティングの基礎」セクションの一部。レッスン 4/67。

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 なので、1フレームあたり 45 * 0.0167、約 0.75 度回転し、これを60回繰り返すと45度になります。1秒あたり30フレームの場合、1フレームあたりの回転角度は2倍になりますが、1秒間の合計はやはり45度です。

challenge icon

チャレンジ

簡単

このキューブには、速度が 90 の Spinner スクリプトがあります。Update() で、どのデバイスでも毎秒 speed 度ずつ、y 軸を中心にキューブを回転させます。

Play を押して動きを確認し、次に Check を押します。

自分で試してみよう

using UnityEngine;

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

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

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

Unityスクリプティングの基礎のすべてのレッスン