質問: prefabs[Random.Range(0, prefabs.Length)]; Instantiate(blocks, new Vector3(0, 13, 0), Quaternion.identity); これでブロックをランダムに指定した位置に生成しています。 今はブロックが生成されるたびにスコアを+1するようにしていますが、 それをブロックごとに違うスコアにしたいと思っています。 ランダムに選ばれたブロックは blocks に入っているので、 if(blocks.name=="Block1") のような感じで、出現したブロックごとに違うスコアを+するようにしようとすると エラーが出てできませんでした。 どうすればランダムに自動生成されたオブジェクトを取得して、 それごとの処理を実行できるんでしょうか? ご教授よろしくお願いします。
回答: 手っ取り早いのは以下の方法です。 ``` int rand = Random.Range(0, prefabs.Length); GameObject blocks = prefabs[rand]; Instantiate(blocks, new Vector3(0, 13, 0), Quaternion.identity); if (rand == 0) { //0番目のブロックが選ばれた時の処理 } ``` Instantiateした際、オブジェクトの名前は「プレハブの名前+(Clone)」になります。 (最新バージョンだと変わっているかもしれませんが) なのでInstantiateした後のオブジェクトをリネームしない限り、名前による判定は成功しないかと思います。 ただしブロックの名前が"Block1"ではなかった場合も、 if(blocks.name=="Block1")でエラーが起こることはありません(if文に入らず通過するだけです)。 恐らくその前後のコードに問題があるのだと思います。 自分で見直すか、エラーコードを追記してください。