Unity で信号機を作成する方法

このチュートリアルでは、C# を使用して Unity で簡単な信号システムを作成する手順を説明します。信号機の設定方法、信号機を制御するロジックの追加方法、および実際の信号システムをシミュレートする方法を学びます。

前提条件

  • Unity インターフェースの基礎知識
  • C#プログラミングの基礎知識
  • Unity コンピュータにインストールされているもの(最新バージョン)

ステップ1: シーンの設定

まず、交通信号システムをシミュレートするために、3 つのライト (赤、黄、緑) を備えた Unity のシーンを設定する必要があります。

  1. Unity を開いて新しいプロジェクトを作成します。
  2. Hierarchy ウィンドウで、信号機を表す 3 つの 3D オブジェクト を作成します。各信号機には Spheres を使用できます。名前を RedLightYellowLightGreenLight に変更します。
  3. Scene ビューでこれらを重ねて配置し、垂直の信号機をシミュレートします。必要に応じて位置とスケールを調整します。
  4. To make them look like real traffic lights, assign different colors to each sphere:
    • RedLight を選択し、そのマテリアルの色を赤に変更します。
    • YellowLight を選択し、そのマテリアルの色を黄色に変更します。
    • GreenLight を選択し、そのマテリアルの色を緑に変更します。

ステップ2: 信号機スクリプトの作成

ここで、信号機の動作を制御するスクリプトを作成します。このスクリプトは、赤、黄、緑の信号を一定の間隔で切り替えます。

  1. Assets フォルダーを右クリックし、Create > C# Script を選択します。TrafficLightController という名前を付けます。
  2. 好みのコード エディターでスクリプトを開き、次のコードを記述します。
using System.Collections;
using UnityEngine;

public class TrafficLightController : MonoBehaviour
{
    public GameObject redLight;
    public GameObject yellowLight;
    public GameObject greenLight;
    
    public float redLightDuration = 5f;
    public float yellowLightDuration = 2f;
    public float greenLightDuration = 5f;
    
    private void Start()
    {
        StartCoroutine(TrafficLightCycle());
    }
    
    IEnumerator TrafficLightCycle()
    {
        while (true)
        {
            // Red light on
            redLight.SetActive(true);
            yellowLight.SetActive(false);
            greenLight.SetActive(false);
            yield return new WaitForSeconds(redLightDuration);
            
            // Green light on
            redLight.SetActive(false);
            yellowLight.SetActive(false);
            greenLight.SetActive(true);
            yield return new WaitForSeconds(greenLightDuration);
            
            // Yellow light on
            redLight.SetActive(false);
            yellowLight.SetActive(true);
            greenLight.SetActive(false);
            yield return new WaitForSeconds(yellowLightDuration);
        }
    }
}

このスクリプトは、赤、緑、黄色のライトが順番に点灯および消灯する単純なサイクルを定義します。

ステップ3: スクリプトにライトを割り当てる

スクリプトの準備ができたので、どのライトを制御するかをスクリプトが認識できるように、ライト オブジェクトをスクリプトにリンクする必要があります。

  1. Main Camera を選択するか、スクリプトを保持するためにシーン内に空の GameObject を作成します。TrafficLightController という名前を付けます。
  2. Inspector で、Add Component をクリックし、TrafficLightController スクリプトを添付します。
  3. Assign the traffic light spheres to the script:
    • RedLight オブジェクトをスクリプトの redLight フィールドにドラッグします。
    • YellowLight オブジェクトを yellowLight フィールドにドラッグします。
    • GreenLight オブジェクトを greenLight フィールドにドラッグします。

ステップ4: 信号システムのテスト

ここで、信号システムをテストし、すべてが期待どおりに動作するかどうかを確認します。

  1. Unity エディターの上部にある 再生 ボタンを押します。
  2. 信号システムの動作を観察します。スクリプトで定義した時間間隔に基づいて、赤、緑、黄色の信号が循環します。

すべてが正常に動作している場合は、赤いライトが 5 秒間点灯し、続いて緑のライトが 5 秒間点灯し、その後黄色のライトが 2 秒間点灯し、これがループして繰り返されます。

ステップ5: 信号機のカスタマイズ

各信号の時間間隔を変更することで、信号システムを簡単にカスタマイズできます。Inspector ウィンドウで、redLightDurationyellowLightDuration、および greenLightDuration フィールドを変更して、各信号の点灯時間を変更します。

たとえば、赤信号を長く点灯させて混雑した交差点をシミュレートしたり、黄色信号の持続時間を調整して切り替えを迅速化したりすることができます。

結論

Unity でシンプルな信号システムを作成しました。このチュートリアルでは、C# で GameObject を制御し、タイム ループを実装して現実世界のシステムをシミュレートする方法を学びました。ここから、歩行者用信号、カウントダウン タイマー、より複雑な交通ルールなどの機能を追加して、このプロジェクトを拡張できます。