質問: Instantiate(mycube); ``` また、不思議に思えたのは、シーン上にCubeとSphereのゲームオブジェクトを用意して、 その両方にMyCubeコンポーネントをアタッチして、上記コードを実行すると、 ちゃんとCubeの方のゲームオブジェクトが複製されたことです。 MyCubeコンポーネントは、Sphereのゲームオブジェクトにもアタッチされてるので、 Sphereのゲームオブジェクトが複製されてもおかしくはないはずなのですが、 ちゃんとコンポーネント取得元のゲームオブジェクトのCubeが複製されるのは何故なのでしょうか? 上記のコードで言うと、mycubeがCubeにアタッチしているという情報を持っているのでしょうか? その場合、mycubeからアタッチ先のゲームオブジェクトを取得するコードを教えていただきたいです。
回答: > > Resources.Loadのコードなんですが、ジェネリックに関するマニュアルが見つかりませんでした。 > > このようなResources.Loadの書式のマニュアルがあれば教えていただきたいです。 > > > 「Unity スクリプトリファレンス:Resources.Load」の下の方にある「public static T Load(string path);」が該当します。 例が無くて分かりにくいんですが、 「Unity スクリプトリファレンス:GameObject.GetComponent」の「ジェネリック版」のところと 「Unity スクリプトリファレンス:ジェネリック関数」を見ると同じことだなーと分かります。 > > Instantiateの引数にコンポーネントを与えると、そのコンポーネントがアタッチしているゲームオブジェクトを複製して、戻り値は、その引数に与えたコンポーネントを取得しているように見えましたが、合っていますか? > > > 厳密にはちょっと違って、(同名だとわかりにくいんで一部変更しています) `Resources.Load( "TestObject" )` →Resourcesフォルダ内のTestObjectという名前のオブジェクトに付いているTestComponentコンポーネントが返る `var test = Instantiate( Resources.Load( "TestObject" ) );` →**複製した後の**TestObject(つまり「TestObject(Clone)」)に付いているTestComponentコンポーネントがtest変数に入る →ただしシーン上では「TestObjectを複製したGameObject」が出来る という動きです。 `MyCube mycube = GameObject.Find ("Cube").GetComponent ();` このコードと同じように、Resources.Loadの方も""で囲われた部分がオブジェクト名を指す為、 同じスクリプトが付いているオブジェクトが複数あっても特定のオブジェクトを生成します。 (Resourcesフォルダ内にTestObjectという名前のオブジェクトが無い場合、TestObjectオブジェクトがあってもTestComponentが付いていない場合はnullが返ります)