チュートリアル 5
ワールドの太陽光源とアバターを設定する
前章でワールドに地面やバス停標柱を設置しましたが、太陽光がないため暗く描画されてしまいました。太陽光を適切な明るさに設定して、ワールドの中を運転してみましょう。
太陽光源を設定する
前章ではワールドに地面やバス停標柱を設置しましたが、描画が暗すぎるという問題がありました。

太陽光の強度の既定値は0のため、そのままでは夜のような暗さで描画されてしまいます。今回は昼間の明るさで描画したいので、太陽光源を追加しましょう。 太陽光源を設定するには、ワールドファイルに次の構文を記述します。
DirectionalLight.SetColor("色");
DirectionalLight.SetDirection(X成分, Y成分, Z成分);
DirectionalLight.SetIntensity(強度);
色には太陽光の色をHTML通称(red など)またはRGB値(#FF0000 など)で指定します。夕方なら黄色~橙色を指定すると効果的な場合がありますが、今回は昼間ですから白で良いでしょう。
X成分、Y成分、Z成分には太陽光の注ぐ向きを指定します。必ずしも正規化されている(大きさ、すなわち絶対値が1である)必要はありません。
強度には太陽光の強度を指定します。大きい値ほど光は強くなります。
向きや強度をどのくらいにするかは悩みどころですが、まずは適当な値でレンダリング結果を確認し、ちょうど良い色となるようにそこから調整していくのが良いかと思います。 参考までに、サンプルワールドでは次のようなスクリプトとなっています。
DirectionalLight.SetColor("#FFFFFF");
DirectionalLight.SetDirection(-1, -4, 2);
DirectionalLight.SetIntensity(3);
まずはサンプルワールドと同じ値を指定してみましょう。現時点でのワールドファイル全体は次のようになっているはずです。
DirectionalLight.SetColor("#FFFFFF");
DirectionalLight.SetDirection(-1, -4, 2);
DirectionalLight.SetIntensity(3);
Models.LoadList("Models.txt");
Background.Add("Background");
Chunks[0, 0].PutProp("Grass", 0, 0, 0);
Chunks[0, 1].PutProp("Grass", 0, 0, 0);
Chunks[0, 0].PutProp("BusStop", 125, 0, 150);
スクリプトを記述できたら、前章と同様に bin\TransportX.Player.exe を実行し、ワールドを動作確認してみましょう。

地面やバス停標柱が自然に明るく描画されるようになりました。バス停標柱も適切な明るさになり、文字が読めるようになっています。

使用アバターを設定する
これでワールド制作の最低限の基礎が終了しました。せっかくですから、アバターを設定して、ここまで作ってきたワールドの中を運転してみましょう。
ワールドで使用するアバターは、次の構文によって指定します。
Avatar.Load("パス");
Avatar.Locate(チャンクX, チャンクZ, X座標, Y座標, Z座標, X回転, Y回転, Z回転);
パスにはアバターを定義したdllファイルへの相対パスを指定します。
Avatar.Locate 構文ではアバターの初期位置を設定します。チャンク番号や座標、角度として指定すべき値はプロップ設置時と同様です。
角度が全て0°で良い場合は、次の省略形を使用することもできます。
Avatar.Locate(チャンクX, チャンクZ, X座標, Y座標, Z座標);
アバターの作り方についての解説はこの先の章に委ねることとして、ここではTransportX公式のサンプル車両(LV290)を読み込むこととしましょう。
ワールドファイルを samples\MyFirstWorld\World.csx として配置している場合、アバターは samples\LV290\TransportX.Sample.LV290.dll ですので、相対パスは ..\LV290\TransportX.Sample.LV290.dll となります。
今回は初期位置をチャンク(0,0)、チャンク内座標(130,0.2,160)、角度を全て0°としましょう。スクリプトは次のようになります。
Avatar.Load(@"..\LV290\TransportX.Sample.LV290.dll");
Avatar.Locate(0, 0, 130, 0.2, 160);
現時点でのワールドファイル全体は次のようになっているはずです。
Avatar.Load(@"..\LV290\TransportX.Sample.LV290.dll");
Avatar.Locate(0, 0, 130, 0.2, 160);
DirectionalLight.SetColor("#FFFFFF");
DirectionalLight.SetDirection(-1, -4, 2);
DirectionalLight.SetIntensity(3);
Models.LoadList("Models.txt");
Background.Add("Background");
Chunks[0, 0].PutProp("Grass", 0, 0, 0);
Chunks[0, 1].PutProp("Grass", 0, 0, 0);
Chunks[0, 0].PutProp("BusStop", 125, 0, 150);
ここまでできたら、F5キーを押下して再読込してみましょう。
![]()
アバターとして指定したバスがバス停標柱の右側に現れました。これでサンプルワールドと同様、キーボード入力によってワールド内を運転できるようになりました。

付録
付録として、この章の完成データを配布しています。どうしても動かないときなどの参考にお使いください。