UnityUnityメモ

Unityで簡単にオブジェクトを順番に表示!初心者向けスクリプト解説

Unity

1. はじめに

Unityでゲームやシミュレーションを作っているとき、「特定のオブジェクトを一定時間後に表示させたい!」と思ったことはありませんか?例えば、ゲームの演出やチュートリアルで、プレイヤーに順番にアイテムやキャラクターを見せたい場面などです。

今回の記事では、**Sphere(球体)Cube(立方体)**という2つのオブジェクトを使って、それらを一定時間ごとに順番に表示する方法を解説します!初心者の方にも分かりやすいよう、Unityの基本操作からスクリプトの書き方まで、丁寧に説明していきます。

「どうやってスクリプトを書くんだろう?」とか「コードが難しそう…」と思った方もご安心を!簡単なコードで楽しく実現できる方法を、一緒に学んでいきましょう!

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



2. オブジェクトの作成

まずは、表示するオブジェクトをUnity上で作成します。ここでは、**Sphere(球体)Cube(立方体)**を用意します。以下の手順に沿って進めましょう!


手順

  1. Sphere(球体)の作成
    1. ヒエラルキー(Hierarchy)ウィンドウを右クリックします。
    2. 3D Object」→「Sphere」を選択します。
    3. 作成された球体がシーンに追加されます。
  2. Cube(立方体)の作成
    1. 再びヒエラルキー(Hierarchy)ウィンドウを右クリックします。
    2. 3D Object」→「Cube」を選択します。
    3. 作成された立方体がシーンに追加されます。

色を変更する(任意)

それぞれのオブジェクトが分かりやすくなるように色を変更しましょう。

  • プロジェクトウィンドウを右クリック、「Create」→「Material」を選択します。
  • インスペクター画面から色を設定してオブジェクトにアタッチします。

これで、シーンに必要なオブジェクトが準備できました!次はこれらのオブジェクトを制御するスクリプトを作成していきます。準備OKですか?それでは次に進みましょう!



3. スクリプトの作成

次に、オブジェクトを時間差で表示するスクリプトを作成します。Unityでは、C#スクリプトを使ってこのような処理を実現できます!以下の手順を参考にして進めてください。


手順

  1. 新しいスクリプトを作成する
    1. プロジェクト(Project)ウィンドウで右クリックします。
    2. Create」→「C# Script」を選択します。
    3. スクリプトの名前を「ObjectDisplayController」に変更します。
  2. スクリプトを編集する
    • 作成したスクリプトをダブルクリックして開きます。
    • 以下のコードをコピーして、スクリプトに貼り付けましょう。
using UnityEngine;

public class ObjectDisplayController : MonoBehaviour
{
    public GameObject sphere; // Sphere(球体)の参照
    public GameObject cube;   // Cube(立方体)の参照

    // Startは最初に呼び出されるメソッド
    void Start()
    {
        // Sphereを非表示に設定
        sphere.SetActive(false);
        // Cubeも非表示に設定
        cube.SetActive(false);

        // 1秒後にSphereを表示する処理を呼び出す
        Invoke("ShowSphere", 1f);
    }

    // Sphereを表示するメソッド
    void ShowSphere()
    {
        sphere.SetActive(true);
        // 2秒後にCubeを表示する処理を呼び出す
        Invoke("ShowCube", 2f);
    }

    // Cubeを表示するメソッド
    void ShowCube()
    {
        cube.SetActive(true);
    }
}

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

  • SetActive(false)
    オブジェクトを非表示にするために使用します。これにより、最初はSphereとCubeが見えなくなります。
  • Invoke("メソッド名", 秒数)
    指定したメソッドを一定時間後に呼び出すための関数です。ここでは、1秒後にSphereを表示し、その2秒後にCubeを表示するよう設定しています。
  • sphere.SetActive(true) / cube.SetActive(true)
    非表示だったオブジェクトを表示するために使用します。

これでスクリプトの準備は完了です!次は、スクリプトをUnityのシーンに適用していきます。



4. スクリプトの設定

作成したスクリプトをUnityのシーンで動作させるために設定を行います。スクリプトをオブジェクトにアタッチし、必要なオブジェクトを紐付けましょう!


手順

  1. 空のゲームオブジェクトを作成
    1. ヒエラルキー(Hierarchy)ウィンドウを右クリックします。
    2. Create Empty」を選択して空のゲームオブジェクトを作成します。
    3. 作成されたゲームオブジェクトの名前を「ObjectDisplayManager」に変更します。
  2. スクリプトをアタッチ
    1. プロジェクト(Project)ウィンドウで作成したスクリプト「ObjectDisplayController」を探します。
    2. スクリプトを「ObjectDisplayManager」にドラッグ&ドロップしてアタッチします。
  3. オブジェクトを紐付ける
    1. ヒエラルキー(Hierarchy)ウィンドウで「ObjectDisplayManager」を選択します。
    2. インスペクター(Inspector)ウィンドウを見ると、「ObjectDisplayController」スクリプトのフィールドが表示されます。
    3. 「Sphere」のフィールドにヒエラルキーからSphereをドラッグ&ドロップします。
    4. 「Cube」のフィールドにヒエラルキーからCubeをドラッグ&ドロップします。
  4. 設定の確認
    • すべてのフィールドが正しく設定されていることを確認してください。
      • Sphere → ヒエラルキー内のSphereオブジェクト
      • Cube → ヒエラルキー内のCubeオブジェクト

補足

スクリプトのアタッチがうまくいかない場合は、以下を確認してください:

  • 「ObjectDisplayController」スクリプトにエラーがないことを確認してください。
  • 正しいオブジェクトにスクリプトをドラッグ&ドロップしていることを確認してください。

これでスクリプトの設定が完了しました!次はいよいよシーンを実行して、結果を確認してみましょう!



6. 実行して確認

これで準備は整いました!作成したスクリプトと設定を実行して、オブジェクトが時間差で表示されることを確認しましょう。


手順

  1. Playモードを開始する
    • Unityエディターの上部にある「Playボタン(三角形の再生マーク)」をクリックします。
  2. 動作を確認する
    • シーンが再生されると、以下の順番でオブジェクトが表示されるはずです:
      1. 実行開始から 1秒後 に「Sphere(球体)」が表示されます。
      2. 「Sphere」が表示されてから さらに2秒後 に「Cube(立方体)」が表示されます。
  3. 結果が期待通りか確認する
    • 「Sphere」と「Cube」が指定した時間差で表示されていれば成功です!

トラブルシューティング

もし動作しない場合は、以下をチェックしてみましょう:

  1. スクリプトのエラーを確認
    • スクリプトに赤いエラーが表示されている場合、修正してください。
    • 間違えて「ShowSphere」や「ShowCube」の名前を変更していないか確認しましょう。
  2. オブジェクトの紐付けを確認
    • 「Sphere」と「Cube」が正しくスクリプトのフィールドに紐付けられていることを確認します。
  3. オブジェクトがシーン内にあるか確認
    • 「Sphere」と「Cube」がシーン内に存在しているかを確認してください。

これで、時間差でオブジェクトを表示するスクリプトをUnityで実装できました。次のステップとして、他のオブジェクトでも試してみたり、さらに複雑なアニメーションを追加することで、表現力豊かなゲーム演出を作れるようになります。ぜひ試してみてくださいね!🎉



よくある質問(Q&A)

Q
Invoke関数の代わりに他の方法を使えますか?
A

はい、例えばCoroutineを使う方法もあります。ただし、初心者にはInvoke関数の方がシンプルでわかりやすいです。

Q
複数のオブジェクトを順番に表示するには?
A

複数のオブジェクトを扱いたい場合、配列やリストを使用して管理する方法がおすすめです。

Q
オブジェクトが非表示のままになる原因は?
A

スクリプトの設定で、SphereやCubeを正しくアタッチしているか確認してください。また、オブジェクトがシーン内に存在していることを確認してください。