質問: 初の質問投稿となります。よろしくお願いします。 uGUI の Textをプレハブから生成した後、 Canvas を親として設定するためにプレハブを使い ``` public class NumberText : MonoBehaviour { public Canvas UICanvas; //UIを表示するキャンバス void Awake(){ transform.SetParent(UICanvas.transform, false); } } ``` というように書いたのですが、下記のエラーが出てしまいます。 > > Setting the parent of a transform which resides in a prefab is disabled to prevent data corruption. > > > プレハブを使わずに、 Canvas を直接 `GameObject.Find` することで正常に動作してくれたのですが、プレハブ化出来ないのがどうもモヤモヤします。 Inspector 上でプレハブやスクリプトを付け忘れていないことは確認しているのですが...。 Canvas をプレハブ化して参照するような使い方をすることが間違っているのでしょうか? また、 Hierarchy にある CanvasはPanel や Image を子オブジェクトとして持つのですが、プレハブ化した際にこれらの子オブジェクトが Project ビューに表示されないことも気になります。 !スクリーンショット
回答: Find系は処理が遅いと言われてますが、繰り返し処理しなければほとんど問題にはなりません。 AwakeやStart、また何らかのトリガから一度のみ行う場合はそんなに神経質にならなくても大丈夫です。 また、それでもFindしたくないのであれば、Publicな変数にCanvasを設定し、インスペクタから設定することでもCanvasを取得することは可能です。 その場合はProjectView内のCanvasではなく、HierarchyView内のCanvasをインスペクタから設定してください。