質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

9310閲覧

Unityでプレハブを複数生成し、各マテリアルを別々のものにする方法を教えて下さい

owenwen

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2017/04/24 04:37

編集2017/04/24 05:29

Unityを使い始めて数日の者なのですが……

現在Instantiateを使って任意の数だけプレハブを出現、
それぞれのマテリアルを別のものにして色などが異なるものを同時に出現させたいのですがどうすれば良いのか分かりません。
良い方法があれば教えていただきたいです、よろしくお願いします。

~追記~
出現させるものはFBXの読み込んだモデルです。

int Max = 10; for(int i = 0; i < Max; i++){ z[i] = i; Vector3 pos = new Vector3(x[i], y[i, z[i]); test[i] = Instantiate(test, pos, transform.rotation = Quaternion.Euler(0, rotate[i], 0)); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

未熟者ですが回答させていただきます。
マテリアルを変えるのは

C#

1(GameObject).GetComponent<Renderer>().material = (Material);

で変えることができます。
この分をたくさん続けるのは長くて面倒なので
こうすることもできます。

C#

1Renderer renderer = (GameObject).GetComponent<Renderer>(); 2renderer.material = (Material1); 3renderer.material = (Material2); 4renderer.material = (Material3);

あなたのスクリプトでは生成したオブジェクトが収納されているtest[]の色を変えたいので(GameObject)をtest[i]に変えます。
そして次にマテリアルを準備します。
今度はマテリアルのリストを作りましょう。

C#

1int Max = 10; 2public Material[] mat; 3for(int i = 0; i < Max; i++) { 4 z[i] = i; 5 Vector3 pos = new Vector3(x[i], y[i], z[i]); 6 test[i] = Instantiate(test, pos, transform.rotation = Quaternion.Euler(0, rotate[i], 0)); 7 test[i].GetComponent<Renderer>().material = mat[i]; 8}

イメージ説明
※スクリプトの名前をtestにしてしまったので変数の名前が一部違います

投稿2017/04/25 14:19

inchi

総合スコア29

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

owenwen

2017/04/26 01:45

回答ありがとうございました! 8割自己解決したまま投稿を消すのを忘れてしまっていたのですが参考にさせていただきますm(__)m
guest

0

モデル内の下層ファイルにマテリアル設定があったためうまくできなかったみたいです。

C#

1// ゲームオブジェクトを取得 2GameObject meshObject = test[i].transform.Find("…/…/…").gameObject; 3 4// メッシュレンダラーを取得してマテリアルを書き換え 5materials[i] = Resources.Load("Materials/" + i, typeof(Material)) as Material; 6SkinnedMeshRenderer meshRenderer = meshObject.GetComponent<SkinnedMeshRenderer>(); 7meshRenderer.material = materials[i];

と処理したら正常に動くようになりました。
何を言っているかあまりわからないかもしれませんがメモ的な……

投稿2017/04/26 01:57

owenwen

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問