teratail header banner
teratail header banner
質問するログイン新規登録
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

155閲覧

Unity Instantiateでprefabを生成した際、親指定無しでも必ず最前面に出して「見える」ようにしたい

Tora_ou

総合スコア16

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2025/06/25 10:33

0

0

実現したいこと

Instantiateでprefabを生成した際に画面内に生成されているのにそのprefabが「見えない」という症状がよく出ます
原因を調べてみるとcanvasの外に生成されてしまっているせいでcanvasより後ろ?に生成されている為、生成されているけど画面上では見えない、という事のようです?

Instantiate(itemA, transform.position, Quaternion.identity);
これだけしか書かないと生成はされるが、canvasの外に生成されてしまうせいで画面上では見えない?
・・・という事で意味はわからないけどお手本の通りに↓書いてみるとたしかに見えるようになります。
GameObject prefab = (GameObject)Instantiate(itemA, transform.position, Quaternion.identity);
prefab.transform.SetParent(canvas.transform, false);
canvasの子になり、canvasの中に生成されるようになったから、らしいです。
※canvasはインスペクターで指定してます

ここから本題なのですがcanvasのようにヒエラルキー上にある物が指定できれば問題は無いのですが
prefabから生成されるオブジェクトだった場合、親になるcanvasをインスペクター上では設定できなくなってしまうので、先ほどと同じように書いても親として指定しているはずのcanvasが無いのでエラー、となります。

もうInstantiateで生成する度に親子関係の指定をして実際に生成された場所が思ってるとのは全然違う所でそれを直す為にうんたらかんたらの設定があまりにも煩雑でうざったいです。
単純に
画面のここに生成!そしてcanvasよりも前に表示!
どこにあっても表示されるように最前面に生成!
…するような方法は無いのでしょうか?
Instantiateで生成する際にワールド座標を指定、なども調べてやり方もわかったのですが
結局生成した後、canvasの子になっていないと生成したオブジェクトは画面内に有るのに「見えない」
そしてprefabなのでcanvas(に限らずヒエラルキーに有る物全て)がインスペクター上では親に指定できない。
・・・という、状態です。何時間も詰まってます。

発生している問題・分からないこと

Instantiateで生成されているprefabが生成されているのに画面では「見えない」という状態を改善したいです

該当のソースコード

特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

prefabを使わなかった時は出来ていた事がprefabを使った途端に出来なくなる
有る有る過ぎると思います!

補足

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

Canvasは複数存在してもいいはずなので、CanvasごとPrefab化すればいいのではないでしょうか。
なお、複数存在する場合の表示順序は、Canvasのインスペクターから設定できます(Screen Space - OverlayならSort Order)。

投稿2025/06/25 10:50

編集2025/06/25 11:00
fiveHundred

総合スコア10450

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tora_ou

2025/06/25 11:21

Instantiateでprefab生成が難し過ぎて prefabじゃない時は出来ていた親指定がprefabで親指定するとエラーで詰んでしまいます。 Setting the parent of a transform which resides in a prefab is disabled to prevent data corruption. 親指定無しで生成したprefabを常に最前面に表示するようなダイレクトな方法は無いのでしょうか。 画面には生成されていて確かに有るのに「見えない」だけだなんて。。。
fiveHundred

2025/06/25 11:41

私の言っているのは「親のCanvasごと」prefabファイル化しろという意味ですが、理解できていますか?
Tora_ou

2025/06/26 19:13

prefabの使い方の練習と思ってやっていましたがわからないし 12時間以上何も進まないという状態だったので今回は諦めてprefabを使わずやる事にしました。 prefabさえ使わなければ出来てしまいます。 prefabの便利さを感じ始めていますがまだまだ理解していないので難しさが勝ちます。 コメントありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問