ゲームの中に時間の概念を持たせたいことって多いですよね。
特にオープンワールド系であれば昼と夜の切り替えに加えて天気も変化させたいところです。
ここで、時間の経過で朝・昼・夜の切り替えができて、天気の変化もつけることが可能な無料Unityアセットを紹介します。
Time of Day & Weather System
ダウンロードとインポートをしたら、下記の通り設定していきます。
1.TimeOfDayオブジェクトをシーンに追加
「TimeOfDay&WeatherSystem」フォルダにある「Prefabs」フォルダの中の「TimeOfDay」をシーンに追加します。
2.「WeatherMaster」オブジェクトをシーンに追加
1と同じフォルダにある「WeatherMaster」をシーンに追加します。
3.TimeOfDayのSun・Moon・Weather masterのオブジェクトを指定する。
TimeOfDayのTo D_BaseにあるSun・Moon・Weather masterを指定します。
SunとMoonはゲーム内の光源(Directional Light)でOKです。
Weather masterは2で追加したWeatherMasterをそのまま指定します。
4.WeatherMasterでTime of dayオブジェクトを指定する。
Time of dayを指定します。1で追加したオブジェクトをそのまま指定すればOK。
ここで不要な天気があればスクリプト「Weather XXX」のチェックをはずしてしまっても大丈夫です。
一旦ここまで設定すれば、時間の経過とともに自動で光源の回転と強さの調整を行ってくれます。
補足① Directional Light回転制御
自分の場合は、光源(Directional Light)がなぜか真上を向いてしまい、画面全体が暗くなってしまったので、ToD_Baseスクリプトを少しいじりました。
"-270"の部分を削除して、強制的に下向きに変えています。
void UpdateSunAndMoon()
{
// This rotates the sun 360 degree in X-axis according to our current time of day.
lSun.transform.localRotation = Quaternion.Euler((_fCurrentTimeOfDay * 360) - 90, 170, 0);
if (_bUseMoon == true)
lMoon.transform.localRotation = Quaternion.Euler((_fCurrentTimeOfDay * 360) - 270, 170, 0);
}
これは適宜調整してください。
初期設定では少し光が弱いかもしれません。
その場合は下記のintensityを調整してください。
※天気ごとに調整が必要です。
intensity調整前は0.4ほどの強さしかなかったのが、
数値を2倍に調整すると
intensity調整後は、光の強さが2倍くらいになります。
画面全体が明るくなり、影もついているのでいい感じですね!!
補足③ 時間の経過速度の調整
TimeOfDayオブジェクトのFull day cycle in secondsで調整できます。
1日のサイクル一周分の時間を秒数で変更可能です。
終わりに
雨や雪のパーティクルを設定できたりするようなので、これから色々いじっていきたいと思います。
空のマテリアルをそのまま使いながら設定できるのがいい感じですね!
Comments