前回の記事では、キーボード入力を使ってオブジェクトのEmissionを制御し、光の強さや色を変更する方法を解説してきました。その結果、キーボード入力でオブジェクトを発光させることができました。ただ、発光しているようにはなかなか見えないという結果でした。今回の記事では、もっと発光している感を出すための工夫をご紹介します。
オブジェクトをStaticに変更
光らせるためにEmissionを設定したオブジェクトと、床や天井、壁などの光っているオブジェクトの影響を受けたい周辺のオブジェクトそれぞれのInspectorから「Static」にチェックマークを入れます。
チェックマークが入っていない床や天井、壁などのオブジェクトは、Emissionを設定したオブジェクトが光っていてもその影響を受けません。
Lighting Settingの変更
Lighting Settingsの中に表示されている「New」を押して「New Lighting setting」を作成します。
Realtime Global Illumination」にチェックを入れて、リアルタイムグローバルイルミネーションを有効にします。
同じくLighting Settingsで、「Auto Generate」にチェックを入れて、シーンのライトマップを自動生成するように設定します。
スクリプト修正
スクリプトを下記のように修正します。
スクリプトの修正点は、「DynamicGI.SetEmissive」を使ったことです。「DynamicGI.SetEmissive」はUnityの機能の一つで、オブジェクトのマテリアルが発する光(Emission)をリアルタイムでゲームの世界に反映させるために使用されます。
using UnityEngine;
public class EmissionController : MonoBehaviour
{
public Material emissiveMaterial;
public Color activeColor = Color.red;
public float intensity = 3.0f;
void Update()
{
if (Input.GetKey(KeyCode.Space))
{
// スペースキーを押している間、赤色に発光
Color finalColor = activeColor * Mathf.LinearToGammaSpace(intensity);
emissiveMaterial.SetColor("_EmissionColor", finalColor);
DynamicGI.SetEmissive(GetComponent<Renderer>(), finalColor);
}
else
{
// スペースキーを離すと発光しない
emissiveMaterial.SetColor("_EmissionColor", Color.black);
DynamicGI.SetEmissive(GetComponent<Renderer>(), Color.black);
}
}
}
結果
Unityの画面に戻ってシーンを再生してみると、キーボードの「Space」キーを押している間は、オブジェクトが赤色に発光し、周辺の床や壁へオブジェクトの光が影響していることを確認できました。周辺へ光の影響が出ていると、オブジェクト自体が発光しているように見えますね!
次の記事では、今回作成した光るオブジェクトをもう少しぼんやりと光らせていこうと思います。
まとめ
この記事では、Unityでオブジェクトを光らせて、その光を周辺のオブジェクトへ影響を与える方法を紹介しました。オブジェクトの光が周辺環境へ影響していることで、オブジェクト自体が発光していることが分かりやすくなります。
コメント