Então Maurício, Todos os objetos que estão na cena de jogo são do tipo GameObject. Independente se eles tem um comportamento de interface ou de Jogo.
O que define os comportamentos de um objeto são os componentes que colocamos neles. Isso porque todo objeto que adicionamos na cena deve ser do tipo gameObject ( https://docs.unity3d.com/2017.4/Documentation/Manual/class-GameObject.html)
Quando fazemos uma busca por tipo FindObjectOfType<>()
estamos fazendo a unity percorrer todos os game Objects da cena e verificar qual ou quais deles tem o componente do tipo que queremos.
Como você falou seu "GameOverBackground" possui um componente do tipo Panel
e se você quiser buscar ele deve procurar por objetos que tenham esse componente FindObjectOfType<Panel>()
. Acontece que outros objetos podem ter esse mesmo componente e por isso é difícil fazer essa busca de maneira efetiva e achar o objeto que você deseja.
Por isso que preferi fazer a atribuição pela interface da Unity. Além de deixarmos mais fácil para fazer alterações se precisarmos. Lembra tbm que sempre trabalhamos com outras pessoas no projeto e nem todos sabem ou querem colocar a mão no código.