【Unity】【エディタ拡張】Project Settings (Graphics Settings) をスクリプトで変更する 
2022/02/20 Sun [edit]
う~む、Unity 標準の Fog (Light Settings にあるやつ) を実験してたんだけど、どうやら Android でビルドすると、アプリサイズが肥大化するみたいだな。3種類(Linear, Exponential, ExponentialSquared) 入れてみたら、200MB も増えた…。そしてスマホだとメモリー不足で落ちる…。|||orz
しかし、PC 版には入れたい(PC 版ではあまりサイズは増えない)。だけど Graphics Settings って、Shader stripping 以下の項目ってプラットフォームごとに設定できないんだよね。PC 版では Custom で 3種類(Linear, Exponential, ExponentialSquared) 入れて、Android 版では入れないようにしたい。でも毎回手動で設定するのは面倒くさい…。
Editor~系のクラスでできるのかな?と思ったけど、どうもできそうなのが見つからないので、ググってみたら、似たようなことをやってるのを見つけた。これを改造したら、どうやら上手く行くようだ。そのメモ。
(参考)
・Project Settings の「Disable Unity Audio」をスクリプトから操作する方法
(※) Unity 2020.3.26f1 / Windows11(x64) で確認
●Graphics Settings の Fog 設定をスクリプトで変更する (メニュー)
using System.Linq;
using UnityEngine;
using UnityEditor;
namespace Exsample
{
//※Editor フォルダに配置
public static partial class GraphicsSettingsEdit //※クラス名は任意
{
//フォグ設定をビルドに含める
[MenuItem("Tools/Include Fog in Build")]
private static void IncludeFogInBuild()
{
var path = "ProjectSettings/GraphicsSettings.asset";
var manager = AssetDatabase.LoadAllAssetsAtPath(path).FirstOrDefault();
var obj = new SerializedObject(manager);
var prop = obj.FindProperty("m_FogStripping");
prop.intValue = 1; //0: Automatic, 1: Custom
prop = obj.FindProperty("m_FogKeepLinear");
prop.boolValue = true;
prop = obj.FindProperty("m_FogKeepExp");
prop.boolValue = true;
prop = obj.FindProperty("m_FogKeepExp2");
prop.boolValue = true;
obj.ApplyModifiedProperties();
}
//フォグ設定をビルドから除外
[MenuItem("Tools/Exclude Fog in Build")]
private static void ExcludeFogInBuild()
{
var path = "ProjectSettings/GraphicsSettings.asset";
var manager = AssetDatabase.LoadAllAssetsAtPath(path).FirstOrDefault();
var obj = new SerializedObject(manager);
var prop = obj.FindProperty("m_FogStripping");
prop.intValue = 1; //0: Automatic, 1: Custom
prop = obj.FindProperty("m_FogKeepLinear");
prop.boolValue = false;
prop = obj.FindProperty("m_FogKeepExp");
prop.boolValue = false;
prop = obj.FindProperty("m_FogKeepExp2");
prop.boolValue = false;
obj.ApplyModifiedProperties();
}
}
}
これは Unity プロジェクトのルートにある ProjectSettings フォルダ内の GraphicsSettings.asset の内容を書き換えるものだ。各 ~.asset ファイルは YAML(?)なので、テキストエディタで開ける。"m_~" でプロパティ名で保存されているので、何でもできそうだ(名前がわからないのなら、一度エディタで変更して、差分を見ればわかる)。
ここでは余談だが、Automatic だと、エディタではオフで、ランタイムでオンに切り替えたりする使い方の場合、stripping されるのでビルドに含まれなくなってしまう。必ず Custom にして、使いたい FogMode をオンにしておく必要がある。

上記のスクリプトはメニューから変更するものだけど、これと以前作ったプラットフォーム切り替えのコールバックを合わせれば、自動で設定変更もできる。
・Unity2020 でプラットフォーム切り替えをすると、Run In Background が勝手にオフになってしまう
●プラットフォーム切り替え・ビルド開始時にフォグ設定を強制的に更新するスクリプト
using UnityEngine;
using UnityEditor;
using UnityEditor.Build;
//※Editor フォルダに配置
public class EditorPlatformSetting : IActiveBuildTargetChanged, IPreprocessBuild //※クラス名は任意
{
public int callbackOrder => 0;
//ビルドターゲットを変更したときのコールバックハンドラ
public void OnActiveBuildTargetChanged(BuildTarget previousTarget, BuildTarget newTarget)
{
Debug.Log("BuildTarget is " + newTarget);
UpdateFogSettingsByPlatform(newTarget);
}
//ビルド開始するときのコールバックハンドラ
public void OnPreprocessBuild(BuildTarget target, string path)
{
UpdateFogSettingsByPlatform(target);
}
//プラットフォームにより、強制的にフォグ設定を更新する
void UpdateFogSettingsByPlatform(BuildTarget target)
{
switch (target)
{
//※必要なら、プラットフォームを追加する
case BuildTarget.StandaloneWindows:
case BuildTarget.StandaloneWindows64:
IncludeFogInBuild(); //フォグをビルドに含める
break;
case BuildTarget.Android:
ExcludeFogInBuild(); //フォグをビルドから除外
break;
}
}
}
OnActiveBuildTargetChanged(BuildTarget previousTarget, BuildTarget newTarget) でプラットフォーム判別できるので、ここで IncludeFogInBuild() または ExcludeFogInBuild() を呼べば良いね。path と FindProperty() のプロパティ名を変えれば、色々自動化できそうだ。ただし、Unity はバージョンによって、たまにプロパティ名が変わるので、そこだけは注意だけどね。
(関連記事)
Unity】Unity2020 でプラットフォーム切り替えをすると、Run In Background が勝手にオフになってしまう
- 関連記事
-
-
【Unity】【エディタ拡張】Project Settings (Graphics Settings) をスクリプトで変更する
-
【Unity】【C#】符号(方向)付き角度を、2Dの外積を使って求める [2D]
-
【Unity】【C#】制限付きでテキストのサイズに合わせて他のオブジェクトのサイズも変化させる
-
【Unity】【C#】SDクエリちゃんを飛行させる!
-
【Unity】【C#】UI-Text 版 FPS(フレームレート)をリアルタイムに測定して表示する
-
トラックバック
トラックバックURL
→http://fantom1x.blog130.fc2.com/tb.php/410-19849cbc
この記事にトラックバックする(FC2ブログユーザー)
| h o m e |