UnityUnityメモ

Unity初心者必見!1秒おきにオブジェクトをランダム回転させるスクリプト解説

Unity

1. はじめに

この記事では、1秒おきにオブジェクトをランダムに回転させるスクリプトを作成して、Unityの基本操作やスクリプトの適用方法を解説します。回転するオブジェクトには、シンプルな「キューブ」を使用しますが、この手法を使えば他のオブジェクトにも応用可能です。

Unity初心者の方でも安心して取り組めるように、具体的な手順をステップバイステップで説明していきます。コードの細かい部分も解説するので、「なんでこうなるの?」という疑問も解消できるはずです!

Unityを触ったことがないという方はコチラの記事から見てみてください!



2. Unityプロジェクトの準備

この記事では、キューブオブジェクトを1秒ごとにランダムに回転させるスクリプトを実装します。そのために、まずはUnityプロジェクトを準備し、シーンにキューブを配置しましょう。以下の手順に従って進めてください。


1. 新しいUnityプロジェクトを作成する

  1. Unity Hubを開きます。
  2. 「新しいプロジェクト(New Project)」 ボタンをクリックします。
  3. 「3D」 テンプレートを選択し、プロジェクト名をわかりやすい名前(例: RandomCubeRotation)に設定します。
  4. 保存先を指定して 「作成(Create)」 をクリックします。

ポイント: プロジェクト名を付けるときは、スペースではなくアンダースコア(_)やキャメルケース(例: RandomCubeRotation)を使うと管理しやすくなります。


2. シーンにキューブを配置する

  1. ヒエラルキー(Hierarchy)ウィンドウ を右クリックします。
  2. 表示されるメニューから 「3D Object」「Cube」 を選択します。
  3. シーンにキューブが作成されます。

3. キューブの位置を調整する

キューブが見えやすい位置に配置するため、以下のように調整します:

  1. インスペクター(Inspector)ウィンドウ を確認します。
  2. TransformコンポーネントPosition を以下の値に設定します:
    • X: 0
    • Y: 0.5
    • Z: 0
  3. これで、キューブがシーンの中心に配置され、地面の上に適切に浮かんだ状態になります。

ここまでで、プロジェクトの基本的な準備が整いました!次は、キューブをランダムに回転させるスクリプトを作成します。準備が完了したプロジェクトを開いた状態で次のステップに進んでください。



3. スクリプトの作成

この記事では、キューブが1秒おきにランダムな角度で回転するスクリプトを作成します。以下の手順に従ってスクリプトを準備しましょう。


1. スクリプトを作成する

  1. プロジェクトウィンドウを開く
    Unityエディターの下部にある「プロジェクト」ウィンドウを確認します。
  2. 新しいスクリプトを作成
    プロジェクトウィンドウで右クリックし、以下の操作を行います。
    • 「Create(作成)」を選択
    • 「C# Script」をクリック
    • スクリプトの名前を「CubeRotate」に変更します。
  3. スクリプトを開く
    作成した「CubeRotate」スクリプトをダブルクリックして、コードエディター(通常はVisual Studio)を開きます。

2. スクリプトにコードを記述する

以下のコードをスクリプトにコピー&ペーストしてください。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CubeRotate : MonoBehaviour
{
    private float angle; // 回転角度
    private float time;  // タイマー

    void Start()
    {
        // タイマーを初期化
        time = 0.0f;
    }

    void Update()
    {
        // タイマーを減らす
        time -= Time.deltaTime;

        // タイマーが0以下になったらランダムに回転
        if (time <= 0.0f)
        {
            time = 1.0f; // タイマーをリセット
            angle = Random.Range(0, 360); // ランダムな角度を取得

            // オブジェクトをランダムに回転させる
            this.transform.Rotate(angle, angle, angle);
        }
    }
}

3. コードのポイント解説

  • Start メソッド
    • ゲーム開始時にタイマーを初期化します。初期値は 0.0f に設定。
  • Update メソッド
    • 毎フレーム呼び出されるメソッドです。Time.deltaTime を使って1秒間隔を計算します。
    • タイマーが 0 以下になった場合、新しいランダムな角度を生成し、キューブを回転させます。
  • Random.Range メソッド
    • 0~360の範囲でランダムな値を生成します。
  • this.transform.Rotate メソッド
    • オブジェクトの回転を指定した角度だけ変更します。ここではX, Y, Z軸すべてに同じ値を適用しています。

以上でスクリプトは完成です!次のステップでは、作成したスクリプトをUnityのキューブに適用し、動作を確認していきましょう。



4.スクリプトの適用と動作確認

さて、ランダムにキューブを回転させるスクリプトが完成しましたね。次は、このスクリプトをキューブに適用し、実際に動作するかどうか確認してみましょう!


1. スクリプトをキューブに適用する方法

  1. スクリプトをプロジェクトウィンドウで探す
    プロジェクトウィンドウを確認し、作成した「CubeRotate」スクリプトを探します。
  2. スクリプトをドラッグ&ドロップ
    プロジェクトウィンドウから「CubeRotate」スクリプトをドラッグして、ヒエラルキーウィンドウにあるキューブにドロップします。
    ポイント: キューブを選択した状態でインスペクターを確認すると、スクリプトがアタッチされていることが分かります。
  3. スクリプトの確認
    インスペクターの「CubeRotate」コンポーネントには、特別な設定項目はありません。コード内で動作が定義されているので、そのまま次のステップへ進めます。

2. 実行して確認する

  1. 再生ボタンをクリック
    Unityエディターの上部にある再生ボタン(▶️)をクリックします。
  2. 動作確認
    シーンビューまたはゲームビューで、キューブが1秒ごとにランダムな方向に回転しているのを確認してください。注意点:
    • ランダムな角度のため、回転のスピードや方向が統一されていないことを確認しましょう。
    • スクリプトが正しく適用されていない場合は、以下を再チェックしてください:
      • スクリプトが正しくアタッチされているか
      • エラーメッセージがコンソールに表示されていないか

3. 問題が発生した場合

  • エラーが表示される場合
    コンソールタブにエラーメッセージが表示される場合、該当する行番号を確認し、コードを修正してください。
  • キューブが動かない場合
    スクリプトがキューブに正しくアタッチされていることを確認し、再度再生してみてください。

これで、キューブが1秒おきにランダムな角度に回転するようになりました!次は、回転の速度や範囲をカスタマイズしてみましょう。



5. 動作をカスタマイズする方法

キューブが1秒おきにランダム回転する動作が確認できたら、次に動作をカスタマイズしてみましょう。ここでは、回転速度や範囲を変更する方法、さらに複数オブジェクトへの適用例を解説します。


1. 回転速度を変更する

現在のコードでは、キューブが1秒おきにランダムな角度で回転しています。この「1秒」を変更してみましょう。

スクリプト内の次の部分を探してください:

time = 1.0f;  // タイマーをリセット

この値を変更することで、回転の頻度を調整できます。

例: 0.5秒おきに回転させたい場合

time = 0.5f;

例: 2秒おきに回転させたい場合

time = 2.0f;

2. 回転範囲を変更する

現在のコードでは、角度が0~360度の範囲でランダムに選ばれています。この範囲を変えたい場合は、以下の部分を編集してください。

angle = Random.Range(0, 360);  // 0~360度のランダムな値を取得

例えば、0~90度の間でランダムに回転させたい場合は、次のようにします:

angle = Random.Range(0, 90);

3. 複数のオブジェクトに適用する

1つのオブジェクトだけでなく、複数のオブジェクトにランダム回転を適用する方法も簡単です。同じスクリプトを複数のオブジェクトにアタッチするだけで動作します。

  • 手順
    1. シーン内に複数のオブジェクト(キューブ、スフィアなど)を配置します。
    2. 各オブジェクトにスクリプトをドラッグ&ドロップします。

これで、各オブジェクトが独立してランダム回転を行います。


4. 他の形状や3Dモデルにも適用する

キューブ以外のオブジェクトにも同じスクリプトを使うことができます。たとえば、スフィアやUnity Asset Storeから取得した3Dモデルにも対応可能です。

  • シーンに新しいオブジェクトを追加します。
  • スクリプトをそのオブジェクトにドラッグ&ドロップします。
  • 実行して動作を確認してください。

5. 応用アイデア

さらに以下のようなカスタマイズも試してみましょう:

  • 回転だけでなく、オブジェクトの色もランダムに変更する。
  • 回転速度を滑らかに変化させる(補間を使用)。
  • 特定の回転軸(例: Y軸のみ)に限定する。

これらの応用は、簡単なアレンジで実現可能です。ぜひ試してみてください!


以上でカスタマイズ方法の解説は終了です。次は、自分なりのアイデアで新しい動きを追加してみてください!



よくある質問

Q
スクリプトを適用したのにキューブが回転しません。原因は何ですか?
A

主な原因として以下の点を確認してください:

  1. スクリプトを作成後に保存しましたか?スクリプトの変更がUnityに反映されていない可能性があります。
  2. スクリプトをキューブに正しくアタッチしましたか?スクリプトがアタッチされていないと動作しません。
  3. Unityのコンソールウィンドウにエラーが表示されていませんか?エラーがある場合は内容を確認し、コードに間違いがないか修正してください。
Q
他の3Dオブジェクト(球体や円柱など)でも同じスクリプトを使えますか?
A

はい、このスクリプトは他の3Dオブジェクトにも適用可能です。ただし、スクリプトをアタッチするオブジェクトを変更する必要があります。例えば、キューブではなく球体(Sphere)にスクリプトをドラッグ&ドロップすれば同じように動作します。

Q
回転速度を速くしたり遅くしたりするにはどうすればいいですか?
A

スクリプト内のタイマーを調整することで回転速度を変更できます。以下のコードを例に説明します:

time = 1.0f;  // この値を小さくすると速く、大きくすると遅くなります

例えば、time = 0.5f; に設定すれば0.5秒ごとに回転するようになります。好みに応じて調整してください。

おすすめのアセット

「Survival Island – Template + Editor」は、サバイバルゲームを簡単に作成できるUnityアセットです。このアセットには、クラフト、資源収集、敵との戦闘、クエスト、ルート(アイテム収集)システムなど、サバイバルゲームに必要な基本機能がすべて含まれています。これを使用すれば、サバイバル要素を持つゲームをすぐに開発開始できます。

また、編集機能が充実しており、ゲームのシステムやクエストの内容を簡単にカスタマイズすることが可能です。カジュアルなゲームから本格的なサバイバルゲームまで、さまざまなスタイルに対応できます。さらに、このアセットは**Universal Render Pipeline (URP)**と互換性があるため、幅広いプラットフォームで最適なパフォーマンスを実現します。