SetActiveかenabledかで非表示

シンプルなゲームを作る際、ゲームオーバー時には「GAMEOVER」のテキストと「PLAY AGAIN」のボタンを表示させたいことがあります。
Unityの新しいUI(uGUI)を使えば、その2オブジェクトを1つのCanvasオブジェクトに入れておいて、スタート時にはそのCanvasを非表示にし、ゲームオーバー時にはCanvasに割り当てたメソッド(例:ShowGameOverメソッド)を呼び出すことで、Canvas自体を表示させれば良いかなと思って実装しておりました。

そういうケースにおいて、最初にCanvasを

gameObject.SetActive(false);

で非表示にするよりも

GetComponent<Canvas>().enabled = false;

で非表示にしたほうが扱い易いです。

というのも、前者ではオブジェクト自体が非アクティブになるので、このCanvasに割り当てたShowGameOverメソッドを、他のオブジェクトから呼び出そうと

GameObject.Find("Canvas").GetComponent();

と記述しても、Canvas全てが非アクティブになっているためにエラーになります。

後者の書き方であれば、非表示になっているのはCanvasオブジェクトのCanvasコンポーネント部分だけをenabled=falseしているので、その他のコンポーネントや、割り当てたスクリプト内のメソッド等にはアクセスできるので、操作しやすいです。

(追記)
別のケースで、タイムアップしたらUpdate関数を止めたいという場合は、enabled=false;を使えば、グラフィックは消えないけれどもUpdate関数を止めることができるので使い勝手がよさそうです。