tanaka's Programming Memo

プログラミングについてのメモ。

Lighting Settingsを別のシーンにコピーするエディター拡張

f:id:am1tanaka:20190823203034p:plain
LightingSettingsのコピー

この記事はUnityゆるふわサマーアドベントカレンダー2019の8/25分のブログです。

24日は @reximology さんの Unity 内部のコンパイラを追ってみた - らんどなテックブログ でした。明日は @UnagiHuman さんのOculusQuestとRealsenseを接続してPointCloudを見る - Qiitaです!

あるシーンのライト設定(Lighting Settings)を、別のシーンにコピペするエディター拡張をご紹介します。


目次

概要

1年ほど前の1週間ゲームジャムで溶岩番というパズルゲームを公開して高評価をいただきました。

溶岩番 | フリーゲーム投稿サイト unityroom

現在、そのスマホ版の製作を進めているのですが、せっかくなのでライトを奇麗にしたい。しかし、スマホだし軽くもしたい。ということで、ステージごとにシーンを作って、ライトを焼きつけることにしました。

そこで問題になるのがライトの設定(Lighting Settings)です。最近は、コンポーネントのプリセット値を保存して、他のコンポーネントで利用できるようになりましたが、ライトの設定ウィンドウだとこの機能が(多分)ありません。手動で書き写すか、シーンファイルをテキストエディターで開いて該当箇所をコピペすることはできますがあまりに面倒です。

何かないかと探したところ、Unityフォーラムでエディター拡張が紹介されているのを見つけました!使い方をご紹介します。

対応バージョン

2019/8/18現在、Unity 2017以降対応で、2019.2での動作確認ができているとのことです。

インポート

BitBucketでコードが公開されているので、プロジェクトにスクリプトを作成してコードを貼り付ければ使えるようになります。

  • Unityを起動して、利用したいプロジェクトを開きます
  • 既存のものでも、新規にフォルダーを作成してもよいので、任意の場所にスクリプトを保存しておくためのEditorフォルダーを作成します

f:id:am1tanaka:20190818204237p:plain
Editorという名前のフォルダーを用意

  • Editorフォルダーの中に、C# Scriptを新規で作成して、CopyLightingSettingsという名前にします

f:id:am1tanaka:20190818204413p:plain
CopyLightingSettings

以上で、問題なければ実装完了です。

使い方

使い方が以下の動画で紹介されています。

youtu.be

以下、その手順です。

  • コピー元のシーンを開くか、アクティブにします

f:id:am1tanaka:20190823210608p:plain
コピー元のシーンをアクティブにする

  • Windowメニューから、Renderingを選択すると、Copy Lighting Settingsメニューが追加されているので選択します

f:id:am1tanaka:20190823203034p:plain
Lighting Settingsのコピー

これでライト設定がコピーされました。貼り付けたい先のシーンを開いて、貼り付けます。

  • コピー先のシーンを開くか、アクティブにします

f:id:am1tanaka:20190823204223p:plain
ライト設定をしていないので、壁や床が暗い

  • Windowメニューから、Rendering > Paste Lighting Settingsを選択します

f:id:am1tanaka:20190823204258p:plain
設定をペーストして、ベイク

今回はライトのベイクをしたいのでペースト後にGenerate Lightingボタンをクリックしてライトマップを生成しました。これで完了です。

f:id:am1tanaka:20190823210939p:plain
コピー完了!!

コピー前は以下のようなデフォルト設定でした。

f:id:am1tanaka:20190823204520p:plain
元の設定

ペースト後は以下のように設定されています。

f:id:am1tanaka:20190823204555p:plain
ペースト後

Past Lighting Settins in open Scenes

貼り付けメニューには、Past Lighting Settins in open Scenesというのもあります。こちらで貼り付けると、開いているすべてのシーンに同じライト設定が貼り付けられます。あるライト設定を多くのシーンに貼り付けたい場合に、マルチシーンでシーンを開いておいて、このメニューでまとめて貼り付けると便利そうです。ベイクは切り替えながらやらないといけませんけど。

まとめ

それほど真面目にライティングをやってこなかったのでライトをコピーできないのは面倒っぽいなと思うぐらいでしたが、いよいよ使う段階になったのでこれでかなり手間が省けそうです。コピペとベイクをエディター拡張で自動化したらさらにいい感じにできそうですが、それはまたいずれということで。

本当は、この手の設定はScriptableObjecctでアセット化して欲しいです。いずれUnityさんが対応してくれることを願いつつ。

もっとよい方法などございましたら、コメントなどでご教示いただければ嬉しいです!以上、2019年度の真夏のゆるふわアドカレの8/25の記事でした!

次は、 @UnagiHuman さんのOculusQuestとRealsenseを接続してPointCloudを見る - Qiita

です^^

参考URL

youtu.be