前提・実現したいこと
たびたび申し訳ございません。
FBXデータにて、一部品に複数のマテリアル色が備わっているモデルを左クリックで選択したときにすべてのマテリアルを赤色に変更することはできたのですが、今度は最初に設定されていた色に全部もとに戻す方法を調べております。
↓オブジェクトを左クリックで選んだとき
↓マテリアルすべてが赤くなったことを確認
発生している問題・エラーメッセージ
オブジェクトがないところ、もしくは別のオブジェクトを選択したとき、一番上にマテリアル設定されている色に全部同色になってしまう問題があります。
該当のソースコード
複数マテリアルを赤くする方法は以下のように設定しました。
C#
1 public bool beRay; 2 public Color default_color; 3 public Color select_color; 4 public Material mat; 5 6 7void Start() 8 { 9 beRay = false; 10 default_color = GetComponent<Renderer>().material.color; 11 select_color = Color.red; 12 mat = this.gameObject.GetComponent<Renderer>().material; 13 } 14 15void Update() 16 {if(Input.GetMouseButtonDown(0)) 17 {RayCheck();} 18 if (Input.GetMouseButtonUp(0))//マウス左クリックを押してないとき⇒役立っている? 19 {beRay = false;} 20 21private void RayCheck() 22 { 23 this.gameObject.GetComponent<Collider>().enabled = true; 24 25 Material [] mats = this.gameObject.GetComponent<Renderer>().materials; 26 foreach (Material mat in mats) { 27 mat.color = default_color; 28 } 29 Ray ray = new Ray(); 30 RaycastHit hit = new RaycastHit(); 31 ray = Camera.main.ScreenPointToRay(Input.mousePosition); 32 33 if (Physics.Raycast(ray.origin, ray.direction, out hit, Mathf.Infinity) 34 && hit.collider == gameObject.GetComponent<Collider>() 35 ) 36 ) 37 { 38 beRay = true; 39 foreach (Material mat in mats) { 40 mat.color = select_color; 41 } 42 } 43 44 else 45 { 46 this.gameObject.GetComponent<Collider>().enabled = false; 47 48 beRay = false; 49 hit.collider.gameObject.GetComponent<ChangeColor>(); 50 51 foreach (Material mat in mats) { 52 mat.color = default_color; 53 } 54 } 55 }
試したこと
『default_color』を初期マテリアル色として考えています。void start のところで、前質問で教えていただいた
foreachを使って、default_color = 初期複数マテリアル色の取得とやりたかったのですが、やり方がよくわかりませんでした。
たびたびご迷惑をおかけいたしますが、どなたかご教示いただけると幸いです。
以上です
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/23 22:32