質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

Q&A

1回答

1922閲覧

プレハブのインスペクターの変数に、ヒエラルキー上のGameObjectを設定したい。

Daniel_c0330n

総合スコア7

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

0グッド

1クリップ

投稿2020/01/29 10:37

###質問
プレハブには public GameObject; を付けたスクリプトをアタッチし、
インスペクター側からGameObjectを指定できる状態にしてあります。
そこにヒエラルキー上にあるオブジェクトを指定したい(できたら便利)なのですが、
アセットにあるものでしか指定できないっぽいんですよね。

目的としては、
ヒエラルキー上にあるオブジェクトに付いているスクリプトの変数の値を
プレハブ側のスクリプトから扱いたい。
という感じです。

現状は
スクリプトのStartメソッドで obj = GameObject.Find("指定したいオブジェクト") して
scr = obj.GetComponent<>(スクリプト名);
といった方法を取っているんですが、なんだか遠回りな感じがして、
もっと良いやり方があるんじゃないかなと思って質問してみました。

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

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

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

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

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

guest

回答1

0

Spotlight チームのベストプラクティス ― GUID ベースの参照 - Unity Technologies Blogで紹介されているGuid Based Referenceが使えるかもしれません。もともとは複数のシーンがロードされている状態でシーンをまたいでオブジェクトを参照したいという要求に応えるもののようですが、シーン上のオブジェクトとプレハブをつなぐのにも利用できそうな感じでした。

CrossSceneReferenceフォルダを丸ごとプロジェクトにインポートして機能を使えるようにした上で、まずシーンのヒエラルキー上にある指定したいオブジェクトにはGuidComponentをアタッチしておきます。これでそのオブジェクトに他とかぶらない識別子が割り振られるようです。
一方、プレハブのスクリプトでpublic GameObject obj;などと宣言していた部分はpublic GuidReference obj;に変更し、それを使っている部分...たとえばscr = obj.GetComponent<スクリプト名>();であれば、scr = obj.gameObject.GetComponent<スクリプト名>();に変更します。するとプレハブのインスペクター上には従来の参照フィールドとはちょっと見た目の違うフィールドが現れ、そこにGuidComponentを持つヒエラルキー上のゲームオブジェクトをドロップすることができるかと思います。
普通の参照フィールドと同じ使い勝手ですが、実際にはオブジェクトがドロップされた際には識別子だけを覚える仕掛けになっており、裏方ではGuidManagerが識別子を頼りに自動的に参照の結びつけをやってくれるみたいですね。

大した手間ではないとはいえ、シーン側のオブジェクトにコンポーネントを追加しておく作業が加わりますので、GameObject.Find("指定したいオブジェクト")と比べたときの手軽さはどっこいどっこいかもしれません。ですがこちらの方法はオブジェクト名に依存しませんので、あとでシーン側のオブジェクトの名前を変えたくなってもプレハブ側の修正がいらない...といった利点もあるんじゃないかと思います。

投稿2020/01/29 19:20

Bongo

総合スコア10807

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問