週刊SleepNel新聞

SleepNel所属のぽうひろが日々の個人開発で気になったことを綴ります。

Unityで時間経過で変わる信号機の光を作ってみる

みなさん、こんにちは。ぽうひろです。

今日は、赤、青、黄と変わる信号機の光を作ってみます。
f:id:pouhiroshi:20160731200829p:plain:w300

信号機は各自でアセットを買うなどしてご用意くださいw。
私はSimpleTownアセットを利用しています。


信号の子オブジェクトでEmptyGameObjectを作り、その下にLightオブジェクトを3つ作ります。
f:id:pouhiroshi:20160731202726p:plain:w300
LightはSpotLightで、Colorを赤、青、黄にそれぞれ設定し、DrawHaloにチェックを入れるとそれっぽく光って見えます。
f:id:pouhiroshi:20160731201158p:plain:w300
こんな感じになってます。
f:id:pouhiroshi:20160731201018p:plain:w300
これだけだと3色同時に光るだけなので、Scriptを入れます。
最初に作ったEmptyObjectにScriptを足して、3つの光を変数セットします。
f:id:pouhiroshi:20160731201339p:plain:w300
Scriptはこんな感じで書きます。

public Light red;
public Light yellow;
public Light green;
private float timer;

// Use this for initialization
void Start () {
	//最初は全部消す
	red.enabled = false;
	yellow.enabled = false;
	green.enabled = false;
}
	
// Update is called once per frame
void Update () {
	//タイマーカウントアップ
	timer += Time.deltaTime;
	if (timer < 5f) { //5秒未満は赤表示
		red.enabled = true;
		yellow.enabled = false;
		green.enabled = false;
	}
	if(timer >= 5f && timer < 10f){ //5秒以上、10秒未満はグリーン表示
		green.enabled = true;
		yellow.enabled = false;
		red.enabled = false;
	}
	if(timer >= 10f){ //10秒以上は黄色
		yellow.enabled = true;
		red.enabled = false;
		green.enabled = false;
	}
	if(timer > 12f){ //12秒以上だったらタイマーリセット
		timer = 0f;
	}
}

実行結果はこうなりました!(Lightアイコンが邪魔ですが許してください・・・)
f:id:pouhiroshi:20160731202111g:plain

1つのLightを移動させてColorを変えてもオブジェクト節約できて良いかもしれません。

信号を制御してみたい方は是非トライしてみてください。

それではまた!!