質問: こちらの件、わたしの知識不足かもしれないのですが質問させてください。 いくつかのチュートリアルをやっていくなかでPrefab化する際は**一旦シーンビューに配置してそこからPrefabsフォルダかなにかに移してPrefabを作ります。** このワンクッションが以上にめんどくさくてイライラしてきます。なぜ直接Prefabsフォルダにドラッグできないんですか?createから直接Prefabを作れるっぽいですけど、使い方がよくわかりません。projectの画像からPrefabsフォルダに直接移動しようとしたら、元ファイルがコピーされずに移動したので往生しました。 ヒントとか指摘とかなにかあればよろしくお願いいたします。
回答: そもそも「画像」は「GameObject」ではないのでプレハブにはなりません。 **プレハブとして保存出来るのはGameObjectだけです。** 画像をシーン上にドラッグ&ドロップすると、画像ではなく「その画像がSpriteにセットされた状態のSpriteRendererが付いたGameObject」になっているはずです。 こいつをプレハブにしているのであって、画像をプレハブにしている訳ではありません。 あと、Prefabフォルダに入れたからプレハブになっている訳でもありません。 画像ファイルはどのフォルダにあろうが画像ファイルです。 以下推測を交えた余談。 (書いてる途中で質問の本筋ではないと気付いたのですがせっかくなので投稿) じゃあプレハブってGameObjectなの?となりますが実は違って、 **「GameObjectという実体(インスタンス)の器」**なんじゃないかなーと思います。 まず、プロジェクトビュー内のアセットは全て「実体(インスタンス)」を持ちません。 スクリプトならスクリプト、3Dモデルなら3Dモデル、画像なら画像という「概念(元データ/設計図)」だと思ってください。 (画像は画像ファイルじゃねーかと思うかもしれませんが、Unityのプロジェクトビューの中では概念だと思ってください) アセットが(ドラッグ&ドロップや`Instantiate`等によって)シーンビューに置かれると「実体(インスタンス)」を持つようになります。 Transformやオブジェクトに付けたコンポーネントはGameObjectコンポーネントを基準に動作します。 (インスタンスって何やねん、という状態だとこの先の話もよく分からないと思うので、「unity インスタンス」とか「インスタンスとは」でググってください) で、プレハブはこの実体となったGameObjectの「器」です。**(実体そのものではない)** 以下の特徴はプレハブの「器としての機能・特徴・権能」です。 * シーン上から実体を消しても、プレハブの中にある実体は消えない(=コンポーネント情報が残る)。 * プレハブの中身を変更すると、そのプレハブから作った実体の中身も変更される。 * プレハブはスクリプト上ではGameObjectと同じように振る舞える。 プロジェクトビューで右クリックして「Create > Prefab」とすると空っぽの立方体アイコンが出て来ますが、それがまさに「実体を持たない状態の器」としてのプレハブです。 プレハブ生成における「シーン上からプロジェクトビューへGameObjectをドラッグ&ドロップ」という動作は、「この実体を中身に入れた状態の器を生成する」という動作です。 プレハブの中に実体を入れないと意味が無い(器には中身が必要)為に、 「シーン上にあるGameObjectを入れる必要がある」と言えます。