子オブジェクトの保持していないコンポーネントの取得について


親オブジェクトに以下のようなスクリプトを置いて、子オブジェクトのRendererコンポーネントを取得したいと思いました。  
しかし、子オブジェクトすべてがRendererコンポーネントを保持しているわけではないので、MissingComponentExceptionが出てしまいました。

[code]

    void GetMaterial(GameObject gameobject)
    {
    
        if (gameObject.GetComponent<Renderer>()?.material != null)
        {
            _materials.Add(gameObject.GetComponent<Renderer>().material);
        }
    
        foreach (Transform child in gameObject.GetComponents<Transform>())
        {
            GetMaterial(child.gameObject);
        }
    }
    
[/code]

どのようにしたらRendererコンポーネントを持っているオブジェクトだけを対象とし、エラーの出ない実装にできるでしょうか。  
回答よろしくお願いします。




UnityのエディターではGetComponentの結果はフェイクnullです。  
フェイクnullは比較オペレーターをオーバーロードしたことで、実はnullじゃないです。  
それから、エディターでNullReferenceExceptionの代わりにMissingComponentExceptionが出ることができます。  
nullオペレーターは==や!=オペレーターと違います。オーバーロードができないです。

[code]

    void GetMaterial(GameObject gameobject)
    {
        var renderer = gameObject.GetComponent<Renderer>();
    
        if (renderer != null && renderer.material != null)
        {
            _materials.Add(renderer.material);
        }
    
        foreach (Transform child in gameObject.transform)
        {
            GetMaterial(child.gameObject);
        }
    }
    
[/code]

日本語で説明は大変ですね。

