質問: prefabで複数のオブジェクトをシーンにおいたとして、それらのスケールや回転などのtransform系統はそれぞれのオブジェクト同士で干渉しないため、一つだけ変えたとしてもprefabに直接影響せず、そのオブジェクトだけを変更させることができますよね。 でも色を変えたい時、そのオブジェクトについているmaterialのRGBを変更してしまうのでprefab自身のmaterialも同時に変更され、結果的にprefabからシーンに追加したオブジェクト全ての色が変わってしまいます。 これを避ける方法はないのでしょうか? 具体的には、prefabから3つオブジェクトを生成したとしてそのうちの一つだけ色を変えたい、ということです。 想像では、materialをアタッチしていないprefabをシーンに追加して、その後にそのオブジェクト専用のmaterialを作ってアタッチすれば干渉しないで済むかなぁと思っています。 ただ、今作成しているプロジェクトがprefabを360000回シーンに追加するというものなのでそれぞれに対してmaterialを作っていたらエラー吐きそうな気がします。(そもそもmaterialの生成の仕方がわからない) よろしくお願いします。
回答: `for`ループで100個のオブジェクトを生成し、それぞれに別々の色を設定するスクリプトです。 GameObjectをインスタンス化すれば、`Material`もそれぞれインスタンス化されるので別々の色を割り当てられますが、シーン実行時の話ではなく、エディタ上での話でしょうか? ``` using UnityEngine; using System.Collections; public class TestScript : MonoBehaviour { public GameObject prefab; void Start () { for(int i=0;i<100;i++){ var _obj = (GameObject)Instantiate(prefab,new Vector3((float)i,0f,0f),Quaternion.identity); var _renderer = _obj.GetComponent(); _renderer.material.color = new Color((float)i/100f,0f,0f,1f); } } } ```