毎秒回転させる
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度です。
チャレンジ
簡単このキューブには、速度が 90 の Spinner スクリプトがあります。Update() で、どのデバイスでも毎秒 speed 度ずつ、y 軸を中心にキューブを回転させます。
Play を押して動きを確認し、次に Check を押します。
自分で試してみよう
using UnityEngine;
public class Spinner : MonoBehaviour
{
public float speed = 90f;
void Update()
{
// ここでキューブをy軸を中心に回転させる
}
}
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。