【UnityC#講座】Directional LightとSkyboxで1日を表現する

Unity2018.1.5f1
Windows10

【UnityC#講座】Directional LightとSkyboxで1日を表現する

今回はDirectional Lightを回転させ、Skyboxを交換させることで1日の空の変化を表現します。

■アセットをインポートする

まずは「Sky5X One」をインポートしてください。

これは無料で朝昼晩の5つのSkyboxが入ったものです。
今回はこれをDirectional Lightの角度によって入れ替わるようにします。

■スクリプトを設置する

次にC#スクリプト「SkySystem」を作ります。

Project > Create > C# Scripts

[SerializeField]を宣言されている変数の上に置くとその変数がprivateなのにInspectorに表示されて再生時の変数の中身をチェックできます。
360度を5等分し、その角度の時だけ対応するSkyboxが出るようにしました。
if文は中に入るコードが一行だと{}が要りません。

そしてSkySystemをHierarchyのDirectional Lightにドラッグ&ドロップしてください

SkySystem/Inspector

「Skybox」と書かれている左端の三角形をクリックすると出てくる欄に5と入力してEnterを押すと5つの欄が出てきます。
そこにSky5X OneのSkybox画像を1から順に入れて行きましょう。

SkySystem/Inspector/Skybox設置

さて無事に光の移り方と空は変化したでしょうか。

SkySystem/完成

スポンサーリンク

■自作のQuaternion教材

今回のスクリプトは回転させるのにtransform.eulerAnglesを使いました。
これはXYZ軸をそれぞれ360度で表現できる分かりやすいものです。
しかしも他にも回転させる方法があり、それはQuaternionというものです。

transform.rotation = new Quaternion(x, y, z, w);

このようにXYZの他にWがあり4元数というそうです。
直感的にわからず検索してみると難しい数式と図ばかり出てくるので自分なりにQuaternionの教材を作ってみました。

まずはこんな風にCubeに移動のギズモを参考にXYZ軸に対応するSphereを3つつけます。

Quaternion教材/Cube

次にTextをちょうど良い位置に出します。

Quaternion教材/Cube/Text

そしたらスクリプトを付けましょう。

Cubeに設置したらInspectorからTextを設置して出来上がりです。
QWERキーがXYZWにそれぞれ対応し、Zキーでリセットします。

Quaternion教材/完成

さてやってみた感想ですが、やっぱりよく意味が分からないですね・・・
最初にひとつだけのキーを押しているとXYZは‐180度になってストップし、Wだとまったく動きません。
しかし他の数値を入れるとよく動くようになりますが数値が大きくなると動きが鈍くなります。
どうも一つの軸だけ加算してもダメなようで最初に基準となる軸を決めて他の軸で回すということでしょうか。
あるいは一番数値が大きな軸が基準となりそれ自身は動きにくくなるということかもしれません。

このスクリプト自体が間違えている部分もあるのかもしれませんがここに残しておきます。
誰か、あるいは未来の自分の役に立つかもしれませんので。
私はよく自分で書いたこのブログの記事を見てスクリプト書いており、おそらくこのブログの一番の利用者は自分自身で間違いなです(笑)

さて今回はこれで終わりです。
お疲れ様でした。

■関連記事

【UnityC#講座】Render Textureでゲーム内にディスプレイを作る、Lens Flareで太陽を作る

スポンサーリンク

目次に戻る