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

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

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

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

Unity

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

Q&A

解決済

1回答

315閲覧

Unityで現在のMaterialのカラーを読み取ることは可能ですか

UDON3

総合スコア80

C#

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

Unity

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

0グッド

0クリップ

投稿2018/08/02 13:26

前提・実現したいこと

現在、ゲームオーバー時にオブジェクトの色を変えるという処理を行っているのですが、そのまま書き換えると色を変更したり、元に戻したりといったことができなくなってしまいます。そこで、初めに元のマテリアルカラーを読み取ろうと思っています。
Materialのカラーを変更する情報は多く見つかりましたが、現在のマテリアルカラーを読み取る方法がどうしても見つかりませんでした。
そこで、指定したゲームオブジェクトのマテリアルカラーを読み取る方法が知りたいです。

試したこと

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class SphereTaskGameOver : MonoBehaviour { 6 // Update is called once per frame 7 private float ColorLevel; 8 private bool ColorPlus; 9 Color[] Colors; 10 Material[] materials; 11 int i; 12 private void Start() 13 { 14 materials = GetComponent<Renderer>().materials; 15 i = 0; 16 foreach (Material material in materials) 17 { 18 Colors[i] = materials[i].color; 19 i++; 20 } 21 ColorLevel = 1; 22 } 23 void Update () { 24 if (Controller.GameOver == true) 25 { 26 if (ColorPlus) 27 { 28 ColorLevel += 0.01f; 29 } 30 else 31 { 32 ColorLevel -= 0.01f; 33 } 34 if (ColorLevel <= 0) 35 { 36 ColorPlus = true; 37 } 38 else if (ColorLevel >= 1) 39 { 40 ColorPlus = false; 41 } 42 materials = GetComponent<Renderer>().materials; 43 i = 0; 44 foreach (Material material in materials) 45 { 46 materials[i].color = Color.Lerp(Colors[i], Color.red, ColorLevel); 47 i++; 48 } 49 } 50 } 51} 52

以下のコードを試してみましたが出来ませんでした。

C#

1NullReferenceException: Object reference not set to an instance of an object 2SphereTaskGameOver.Update () (at Assets/Scouse/SphereTaskGameOver.cs:46)

エラーは案の定Nullのエラーでした。
{get;set;}となっていたので読み取りもできると思っていたのですが、出来ないのでしょうか

バージョン

最近更新したばかりで
2018.2.1f1です

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

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

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

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

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

guest

回答1

0

ベストアンサー

Colors配列の生成し忘れではないでしょうか?
このような感じでいかがでしょう。

C#

1 // 省略 2 3 private void Start() 4 { 5 materials = GetComponent<Renderer>().materials; 6 Colors = new Color[materials.Length]; 7 i = 0; 8 foreach (Material material in materials) 9 { 10 Colors[i] = materials[i].color; 11 i++; 12 } 13 ColorLevel = 1; 14 } 15 16 // 省略

投稿2018/08/02 22:01

Bongo

総合スコア10807

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

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

UDON3

2018/08/03 01:51

無事に解決できました、配列を生成するということをうっかり忘れていました。 ずっとColorの読み取りの部分のエラーだと思い込んでいました。 回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問