勉強不足で至らんブログ

勉強不足ですが色々と書いていきます。

SAColliderBuilderでNull Reference Exceptionが出てしまった時の応急処置

SA Mesh Collider Builderを使おうとしたらNullExceptionで処理が止まってしまった

超絶便利なSAColliderBuilderを使おうとしたらエラーで怒られました

assetstore.unity.com

上記のAssetはMeshに対して当たり判定を良い感じにつけてくれるものなのですが、AssetStoreにある別の建物などの環境Assetに対して使う際にエラーがでました。

その時のエラー箇所が SAMeshColliderEditorCommon.cs

 public static string GetSAMeshColliderName_Material( Material[] materials, int index )
    {
                // ↓ ここ
        if( materials != null && index < materials.Length && !string.IsNullOrEmpty(materials[index].name)) {
            return materials[index].name;
        }

        return "Mesh." + index.ToString("D8");
    }

942行目あたりのif文だったので、ここだけ軽くチェックしたら materials[index] がnullになるパターンがあるようでした。Assetの階層構造によるものなのかは深くチェックしていないのでわかりません。そのためif文に materials[index] != null を追加して以下のようにしました。

 public static string GetSAMeshColliderName_Material( Material[] materials, int index )
    {
        if( materials != null && index < materials.Length && materials[index] != null && !string.IsNullOrEmpty(materials[index].name)) {
            return materials[index].name;
        }

        return "Mesh." + index.ToString("D8");
    }

という風にしました。これで処理が終わり無事Colliderが付けられたので応急処置としては大丈夫そうです。

f:id:MakeTake:20200808195743p:plain