tanaka's Programming Memo

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

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

※情報が古くなっていたので現行版に併せて修正しました(2023/2/10)

LightingSettingsのコピー

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

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

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

github.com


目次

概要

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

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

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

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

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

対応バージョン

2023/2/10現在、Unity 2019.3以降対応で2021LTSでの動作を確認しています。Editor/CopyLightingSettings.csが必要なコードなのでこれを動作バージョンに対応させれば動くということです(2023/2/10修正)

インポート

Unity2019.3以降ではPackage Managerで手軽に入れられるようになっていました。

以上で完了です。しばらく待つとインストールが完了して使えるようになります。

(以上、2023/2/10加筆)

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

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

Editorという名前のフォルダーを用意

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

CopyLightingSettings

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

使い方

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

youtu.be

以下、手順です。

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

コピー元のシーンをアクティブにする

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

Lighting Settingsのコピー

これでライト設定がコピーされたので、貼り付けます。

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

ライト設定をしていないので、壁や床が暗い

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

設定をペーストして、ベイク

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

コピー完了!!

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

元の設定

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

ペースト後

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