毎秒回転させる
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度です。
チャレンジ
簡単立方体を y 軸を中心に、1 秒あたり speed 度回転させましょう。
Update()内で、transform.Rotate(x, y, z)を呼び出します。- 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プレイグラウンド