🍣
Q:#if UNITY_EDITOR な ScriptableObject のフィールドはビルド時にどうなる?
A: 参照できなくなるだけ、とかではなくちゃんと除外されるようです。
例えばこのような ScriptableObject があるとします。
using UnityEngine;
public class TestData : ScriptableObject
{
[SerializeField] private double[] sampleArray;
}
これを Resources フォルダの中に作って、適当に複製して配列の中身を Inspector からこれまた適当に、10万ずつ詰めます。
すると1つ5MB越えのデータが出来上がります。
ではこれをビルドしてみます。Resources の中身は丸々ビルドに乗るので
こうなります。
では次に先ほどのフィールドを #if UNITY_EDITOR で囲い、もう一度ビルドしてみます。
using UnityEngine;
public class TestData : ScriptableObject
{
#if UNITY_EDITOR
[SerializeField] private double[] sampleArray;
#endif
}
軽くなりました。
ということで、 #if UNITY_EDITOR で囲まれたものは最終的にビルドからは除かれるようです。
例えばエディター拡張で作業中だけ存在してほしいデータ(コメントなど)は今回のような形で定義するのもありかと思います。
Discussion