最近ResetコールバックでFieldを登録するアプローチにハマっています。通常は実行時にFindやGetComponentでコンポーネントの取得を行うのですが、これを事前に取得します。事前に登録するのでFind等のアプローチが使えますし、GUI操作のような煩わしさも少ないです。
が、フィールドが一杯あるのは正直見栄えが良くないです。が、HideInspectorで消すと実際コンポーネントの参照がなくとも非表示にしてしまうのでやり過ぎ感があります。
なので、PropertyDrawerでアタッチ済みのコンポーネントは非表示にしてしまいます。Resetで接続がうまくいかなかったコンポーネントはUI操作でちゃんと設定する感じです。
確認するにはInspectorのDebugに設定する必要がありますが、まあ。
なおResetのアプローチを使わない場合でも、フィールドをシリアライズ可能にしておけばホットリロード時に参照を失わずに済むハズなので、GetComponentを使う場合も少し使えるかもしれません。