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

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

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

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

Unity

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

Q&A

解決済

1回答

849閲覧

【Unityスクリプト】マウス左クリックしたときに複数のオブジェクトマテリアルの色を変更

DY2peace

総合スコア20

C#

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

Unity

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

0グッド

0クリップ

投稿2020/08/21 12:15

編集2020/08/21 12:24

前提・実現したいこと

初歩的な質問で申し訳ございません。
FBXデータにて、一部品に複数のマテリアル色が備わっているモデルを左クリックで選択したときにすべてのマテリアルを赤色に変更したいと考えております。
マテリアル色の割り当て数に限らず、全部の色を赤色に変えたいと思っています

イメージ説明

発生している問題・エラーメッセージ

 一番上のマテリアルだけ、色が変更されます。下に並んでいるすべての色を一緒に変更したいです。

該当のソースコード

C#

1ソースコード 2//オブジェクトにコライダーを割り当てて、『default_color』を初期色、『select_color』で赤色に設定しています。オブジェクトにマウスが乗っていないところでクリックすると、元に戻るようにするためです。 3void Start() 4 { 5 beRay = false; 6 default_color = GetComponent<Renderer>().material.color; 7 select_color = Color.red; 8 mat = this.gameObject.GetComponent<Renderer>().material; 9 } 10 11void Update(){ 12 if(Input.GetMouseButtonDown(0)) 13 { 14 RayCheck(); 15 } 16 if (Input.GetMouseButtonUp(0)) 17 { 18 beRay = false; 19 } 20} 21 22private void RayCheck() 23 { 24 this.gameObject.GetComponent<Collider>().enabled = true; 25 mat.color = default_color; 26 27 Ray ray = new Ray(); 28 RaycastHit hit = new RaycastHit(); 29 ray = Camera.main.ScreenPointToRay(Input.mousePosition); 30 31 if (Physics.Raycast(ray.origin, ray.direction, out hit, Mathf.Infinity) 32 && hit.collider == gameObject.GetComponent<Collider>() 33 ) 34 { 35 beRay = true; 36 mat.color = select_color; 37 } 38 39 else 40 { 41 this.gameObject.GetComponent<Collider>().enabled = false; 42 43 beRay = false; 44 hit.collider.gameObject.GetComponent<ChangeColor>(); 45 mat.color = default_color; 46 } 47 } 48

お手数をおかけいたしますが、どなたかご教示いただけると幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

※完全な動作確認できておらず、間違っていたら申し訳ありません。

以下の様に、"material"ではなく"materials"(最後に"s"がつく方)を利用したら複数のマテリアルが取れた気がします。
なので、配列で取得した物に対してカラー設定したら変わりませんでしょうか。
(以下はCubeで試したので1つしかマテリアル取れてませんが。。)

C#

1void Start() 2{ 3 Material[] mats = cube.GetComponent<Renderer>().materials; 4 foreach (Material mat in mats) { 5 mat.color = Color.red; 6 } 7}

投稿2020/08/21 13:17

tsuki01

総合スコア1751

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

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

DY2peace

2020/08/22 00:55

ありがとうございました。無事問題を解決できました。materialsは、自分でも気づかなかったと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問