※情報が古くなっていたので現行版に併せて修正しました(2023/2/10)
この記事はUnityゆるふわサマーアドベントカレンダー2019の8/25分のブログです。
24日は @reximology さんの Unity 内部のコンパイラを追ってみた - らんどなテックブログ でした。明日は @UnagiHuman さんのOculusQuestとRealsenseを接続してPointCloudを見る - Qiitaです!
あるシーンのライト設定(Lighting Settings)を、別のシーンにコピペするエディター拡張をご紹介します。
目次
概要
1年ほど前の1週間ゲームジャムで溶岩番というパズルゲームを公開して高評価をいただきました。
現在、そのスマホ版の製作を進めているのですが、せっかくなのでライトを奇麗にしたい。しかし、スマホだし軽くもしたい。ということで、ステージごとにシーンを作って、ライトを焼きつけることにしました。
そこで問題になるのがライトの設定(Lighting Settings)です。最近は、コンポーネントのプリセット値を保存して、他のコンポーネントで利用できるようになりましたが、ライトの設定ウィンドウだとこの機能が(多分)ありません。手動で書き写すか、シーンファイルをテキストエディターで開いて該当箇所をコピペすることはできますがあまりに面倒です。
何かないかと探したところ、Unityフォーラムでエディター拡張が紹介されているのを見つけました!使い方をご紹介します。
対応バージョン
2023/2/10現在、Unity 2019.3以降対応で2021LTSでの動作を確認しています。Editor/CopyLightingSettings.cs
が必要なコードなのでこれを動作バージョンに対応させれば動くということです(2023/2/10修正)
インポート
Unity2019.3以降ではPackage Managerで手軽に入れられるようになっていました。
- GitHub - pschraut/UnityCopyLightingSettings: Unity editor extension to copy&paste lighting settings from one scene to another. を開いて、Package URL's 一覧から最新バージョンのLinkのアドレスをコピーします
- 組み込みたいUnityプロジェクトを開きます
- WindowメニューからPackage Managerを開きます
- Unityに戻って左上の + をクリックして、Add package from git URL... を選択します
- Ctrl + Vキーで先ほどコピーしたパッケージのURLを貼り付けます
以上で完了です。しばらく待つとインストールが完了して使えるようになります。
(以上、2023/2/10加筆)
BitBucketでコードが公開されているので、プロジェクトにスクリプトを作成してコードを貼り付ければ使えるようになります。
- Unityを起動して、利用したいプロジェクトを開きます
- 既存のものでも、新規にフォルダーを作成してもよいので、任意の場所にスクリプトを保存しておくための
Editor
フォルダーを作成します
Editor
フォルダーの中に、C# Scriptを新規で作成して、CopyLightingSettings
という名前にします
- 作成した
CopyLightingSettings
スクリプトをダブルクリックして開きます - https://bitbucket.org/snippets/pschraut/LeykeLを開きます
- コード部分を選択してコピーします
- エディターで開いた
CopyLightingSettings
スクリプトに貼り付けます - 上書き保存をしてUnityに戻ります
以上で、問題なければ実装完了です。
使い方
使い方が以下の動画で紹介されています。
以下、手順です。
- コピー元のシーンを開くか、アクティブにします
- Windowメニューから、Renderingを選択すると、Copy 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
です^^