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

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

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

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

Q&A

解決済

2回答

830閲覧

Unityでシーンのヒエラルキーと、プレハブのインスペクターが同時に表示されないため、オブジェクトのアタッチができません。

Sashimi_ShowYu

総合スコア61

Unity

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

0グッド

0クリップ

投稿2019/04/26 12:38

編集2019/04/26 12:40

まず、画面1(http://iup.2ch-library.com/i/i1986052-1556281942.jpg)を見てください。あるプレハブのインスペクター上の、矢印のところにjikiというオブジェクト(後述)をドラッグアンドドロップしたいのです。
しかし、そのjikiというオブジェクトはアセット一覧にないため、それができません。
jikiというオブジェクトはアセット一覧ではなく、ヒエラルキーウィンドウのところにあるからです(画面2参照 http://iup.2ch-library.com/i/i1986053-1556282023.jpg )。

プレハブを開いていると、ヒエラルキーは、そのプレハブの階層構造がヒエラルキーウィンドウに表示されてしまいます。(画面1参照)
しかし、通常のシーンのヒエラルキーを開くと今度は、プレハブの方のインスペクターの表示が消えます。(画面2参照)

なんとかプレハブのインスペクターにドラッグアンドドロップしたいのですがどうしたらいいでしょうか?

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

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

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

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

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

guest

回答2

0

ベストアンサー

TekiTamaはHierarchyに配置せずInsantiateで動的に作られるもので、Jikiは名前の通り自機なのでHierarchyに配置していると。
で、TekiTamaJikiを設定したいのは自機に向かって進またい(初期方向算出)為なのでしょう。

この場合はInspectorでの事前設定はできないと思います。

Prefabで設定できるものはインスタンス化される前のもの(Asset)のみだと考えていいと思います。(インスタンス化した後の一時的なものは別)
そして、シーンのHierarchyにあるものはシーンロード時に同時にインスタンス化されるものだと考えてください。
今Missingになっているのは、おそらく実行時などにインスタンス化されたJikiが設定され、次に実行を終了した後だからなのだと思います。
その結果、インスタンス化されたInstanceIDとインスタンス化される前のFileIDとで別物扱いになっている=参照できなくなっているからです。

TekiTama自体も同一シーンに配置し、必要な際にはこの配置したTekiTamaを元にインスタンス化する前提であればできます。(同時にインスタンス化されるので)
でも、正直そのやり方は拡張性もなにもないと思います。

なので、carupotaさんが言われているようなやり方だとか、別の管理オブジェクト経由でJikiのインスタンスをTekiTamaのインスタンスが実行時に受け取る(探す)ようにする必要があります。

投稿2019/04/26 17:46

vo3

総合スコア321

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

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

Sashimi_ShowYu

2019/04/27 09:49

ありがとうございます。 助かります。 まず、インスタンス化されたものはプレハブで設定できない、ということで理解しました。 しかし、そうなってくると、どう対処していいものか・・・ 書いていただいた解決法は、とにかく私には難しく。 別の管理オブジェクト経由・・というのも私レベルでは理解が及ばずです。 carupotaさんのやり方でやっても、そもそもシーンヒエラルキーにあるものは一切アタッチができないので、先に進めないのです。 途方に暮れます。 ただ、目的としては、Jiki(自機)に向かってTekiTama(敵弾)が飛んでくることができればよいのですが、その方法のヒントでもあれば教えてほしいです。 現状のコードは以下のようにしています。 public class TekiTamaUgoki : MonoBehaviour { public Transform JikiIchi;←★ void Update() { gameObject.transform.position = Vector3.MoveTowards(gameObject.transform.position, JikiIchi.position, 4f); } } ★のJikiIchiに シーンヒエラルキーのJikiをアタッチできなかったわけですが、もうあきらめて、Jikiをいったんプレハブ化し、そのプレハブをアタッチしてみました。 しかし、そのやり方だと、Jikiプレハブが最初にもっている位置情報のみが参照されます。つまり、Jikiプレハブからインスタンス化したオブジェクトがどのように配置されたり、移動されようと、全く関係ないのです。 いったいどうすればいいでしょうか?
vo3

2019/04/27 10:05

> ★のJikiIchiに シーンヒエラルキーのJikiをアタッチできなかったわけですが これはInspectorでアタッチができなかったということだと思うのですが、carupotaさんのやり方は実行時に取得するということです。 なので、例えば TekiTamaUgoki に void Start() { Transform JikiIchi = GameObject.Find ("Jiki").transform; } と記述してからエディタで実行をして、TekiTamaをインスタンス化してやると、"Jiki" という名前のGameObjectが存在していれば、TekiTamaUgokiは JikiのTransformを取得できるので、無事自機の位置を参照可能になります。
Sashimi_ShowYu

2019/04/27 15:10

ありがとうございます。 そのとおりやってみましたが、なかなかうまく行きません。 (スタートメソッドで、指示の通りJikiIchiに入れてみたけれど、アップデートメソッドでそのJikiIchiを使おうとすると、「このコンテキストにそんな名前のものはない」とエラーが出るなど) それは多分こちらが根本的なことを理解してないからだと思うので、今自分でいろいろ試しています。 わかってきたら、また再度お礼を言わせてください<(_ _)>
vo3

2019/04/27 23:50

すみません、何も考えずそのままコピペしてました。 void Start() { JikiIchi = GameObject.Find ("Jiki").transform; } にしないと重複宣言になり、基本的にローカルスコープ側が優先されるので、★側のJikiIchiが上書きされませんでした。 なので、 > 「このコンテキストにそんな名前のものはない」 はそれまでのMissing参照の情報にアクセスしているのだと思います。
Sashimi_ShowYu

2019/05/04 10:05

返信遅れました。 補足ありがとうございます! 補足していただいた通りにやったら、きっちり動きました。 感謝です。 本来なら、補足なくても、それくらい分かれよという話なのですが、とにかく当方勉強不足で変数の使い方の根本的なことも分かっていなかったもので。 あと、ローカルスコープという単語からググって、ある程度、変数の使い方も勉強できました。 色々助かりました。本当にありがとうございました。
guest

0

アタッチする欄の右の〇マークを押してみましょう。

投稿2019/04/26 14:44

編集2019/04/26 14:56
carupota

総合スコア27

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

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

Sashimi_ShowYu

2019/04/26 15:56

回答ありがとうございます。指示の通り、○マークを押してみました。 別ウィンドウが開き、オブジェクトの一覧のようなものが表示されました。 しかし、その中にやはり、シーンのヒエラルキーにあるオブジェクトは含まれていませでした。検索をかけてもヒットしませんし、タブをアセットやセルフに変えても同じです。 なにかやり方が間違ってますでしょうか? それともシーンのヒエラルキーにあるオブジェクトは、アタッチできないのでしょうか?
carupota

2019/04/26 16:24 編集

よく見るとTekiTamaUgoki.cs でTransformでJikiIchiを宣言してますね Public GameObject JikiIchi; みたいにすればアタッチできませんか? それでスクリプト内でtransformにするのはどうですか ちなみにわざわざアタッチしなくても Transform JikiIchi = GameObject.Find ("Jiki").transform; とかでもいいと思いますよ
Sashimi_ShowYu

2019/04/26 16:25

何度もありがとうございます。 そのやり方でも駄目でした。GameObject で宣言しても、シーンのヒエラルキー内のオブジェクトが、一覧(○ボタンで開いたウィンドウに表示される一覧)の中に一つもありません。 どうも、アセットに入ってるものしかアタッチできないっぽいですね・・・。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問