// Hogehoge.cs
public class Hogehoge : MonoBehaviour
{
 public int 変数A{ get { return 変数a; } set { 変数a = value; } }
 public bool 変数B{ get { return 変数b; } set { 変数b = value; } }
}

// GameManager.cs
public class GameManager : MonoBehaviour
{
 public GameObject[] objects;

 // B

 private void Start()
 {
  int aaa = this.objects[0].変数A; // @
  int bbb = this.objects[0].GetComponent<Hogehoge>().変数A; // A
 }
}

GameManagerの@はthis.objects[0]を見ている=GameObjectクラスを見ているので、GameObjectに変数Aがなくてエラーになる
Aはthis.objects[0](GameObject)からHogehogeクラスを取得してHogehogeクラスを見ているので、Hogehogeの変数Aを見てエラーにならない

ただしGetComponentはコストが高い処理なので、毎フレーム実行する必要がある場合などはクラス変数(B)にHogehogeの変数を定義しておきそれにアクセスするほうが低コスト
 public Hogehoge[] hogehoges;