ピックアップ記事
Unity nullなのにnull判定に引っかからなくて躓いた

Unity nullなのにnull判定に引っかからなくて躓いた

私がやりたかったこと

inspectorから受け取った画像リストからアニメーションを作成。

もし、リスト内に未設定項目(null)があった場合には、それを除外した配列を再生成し、関数に引き渡すようにするという流れです。

 

nullを除外した配列を再生成する方法については、以下の記事でもまとめたような方法をとりたいと考えています。

 

しかしながら、nullの判定が行えず、除外できずにいました。

例えば、以下のような形です。



public Sprite[] images = new Sprite[5];
foreach(var image in images ?? Enumerable.Empty<Sprite>()){
    if(image != null){
        Debug.Log(image);
    }
}

 

この場合、images配列変数にセットされた画像名だけが出力され、nullは出力されないはずでした。

しかし、nullという文字が表示されます。

 

今の私の心境は、まるでメイちゃんです。

nullだけど、nullじゃなかった!!

 

判定部分を以下のように文字列にすれば、判定を行えますが、少しブサイクですね...。

if(image.ToString() != "null"){

 

解決法

こちらの記事が参考になりました。

 

上記の記事で紹介されていた関数を利用することで解決しました。

引数部分は少し変更を加えています。

public static bool IsNull<T>(this T obj) where T : class {
    var unityObj = obj as UnityEngine.Object;
    if (!object.ReferenceEquals(unityObj, null)) {
        return unityObj == null;
    } else {
        return obj == null;
    }
}

 

また、別記事で紹介していたnullを除外した配列を再生成する関数は、以下のように変更し、利用しています。

public static IEnumerable<T> WhereNotNull<T>(this IEnumerable<T> source)
where T : class 
{
    if (source == null) 
    { 
        return Enumerable.Empty<T>(); 
    } 
    return source.Where(x => !x.IsNull());
}
おすすめの記事