🍣

Q:#if UNITY_EDITOR な ScriptableObject のフィールドはビルド時にどうなる?

2022/06/22に公開

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