前提・実現したいこと
以前こちらでInstantiateの質問をさせていただいて、
理解したつもりだったのですが、意図したいコードを書くとエラーになってしまいました。
前提条件。
Cubeオブジェクトには、CubeScriptスクリプトコンポーネントとSampleスクリプトコンポーネントをアタッチしています。
エラー①
下記、cubeオブジェクトを生成して、生成したものにアタッチしているCubeScriptコンポーネントを取得できるはずと
思っているのですが、エラーになってしまいます。
C#
1 [SerializeField] 2 GameObject cube; 3 4 // Use this for initialization 5 void Start () { 6 CubeScript cubes = Instantiate<CubeScript>(cube); 7 }
エラーメッセージ
Assets/GameManager.cs(11,22): error CS1502: The best overloaded method match for `UnityEngine.Object.Instantiate<CubeScript>(CubeScript)' has some invalid arguments
Assets/GameManager.cs(11,46): error CS1503: Argument `#1' cannot convert `UnityEngine.GameObject' expression to type `CubeScript'
エラー②
下記、cubeオブジェクトを生成して、生成したものにアタッチしているSampleコンポーネントを取得できるはずと
思っているのですが、エラーになってしまいます。
C#
1 [SerializeField] 2 CubeScript cubes; 3 4 void Start () { 5 Sample sp = Instantiate<Sample>(cubes); 6 }
エラーメッセージ
Assets/GameManager.cs(11,15): error CS1502: The best overloaded method match for `UnityEngine.Object.Instantiate<Sample>(Sample)' has some invalid arguments
Assets/GameManager.cs(11,35): error CS1503: Argument `#1' cannot convert `CubeScript' expression to type `Sample'
エラーにならないコード。
C#
1 [SerializeField] 2 CubeScript cubes; 3 4 void Start () { 5 CubeScript cubes2 = Instantiate<CubeScript>(cubes); 6 }
上記はエラーになりませんが、このコードは下記のように書き換えることもできますよね?
C#
1 [SerializeField] 2 CubeScript cubes; 3 4 void Start () { 5 CubeScript cubes2 = Instantiate(cubes); 6 }
とすると、わざわざ<CubeScript>の記述の分だけ長くなるだけのような気がして、意味がないように思えるのですが、
いかがでしょうか?
Instantiateで<>を書く場合、()内と同じコンポーネントを指定しなければならないのでしょうか?
エラー①②のような書き方はできないのでしょうか?
<>を書くメリットが知りたいです。
ご教示お願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2018/08/15 15:55
2018/08/15 23:57
退会済みユーザー
2018/08/16 03:00 編集