マテリアルの値をスクリプトで変える方法_1 (マテリアルは同じだが、個別に変える方法)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class emission : MonoBehaviour {

	//オブジェクトを指定
	public GameObject obj_1;
	//データ型Colorを入れるcolor変数
	private Color color;
	//データ型Rendererを入れるrand変数
	private Renderer rend;

	// Use this for initialization
	void Start () {
		//obj_1のRendererComponentを取得
		rend = obj_1.GetComponent<Renderer>();
	}
	
	void Update () {

		//もしspaceを押したら
		if (Input.GetKeyDown (KeyCode.Space)) {
			//指定したオブジェクトのマテリアルの色を変更
			rend.material.SetColor("_EmissionColor", color = new Color(1f, 0.0f, 0.0f, 0.0f));
			rend.material.SetColor("_Color", color = new Color(1f, 0.0f, 0.0f, 0.0f));
			//resetコルーチン呼び出し
			StartCoroutine (reset());
		}
	}

	public IEnumerator reset(){
		//1フレーム待つ
		yield return null;
		//指定したオブジェクトのマテリアルの色を戻す
		rend.material.SetColor("_EmissionColor", color = new Color(0.0f, 0.0f, 0.0f, 0.0f));
		rend.material.SetColor("_Color", color = new Color(1.0f, 1.0f, 1.0f, 1.0f));
	}
}


下記のスクリプト説明
public GameObject obj_1;でマテリアルの値を変えたいオブジェクトを指定して
void startでそのオブジェクトのRendererComponentを取得してrendに入れる
もしspaceを押したらそのマテリアルの値を変更して
コルーチンを呼び出し、1フレ後に色を戻している。

マテリアルの色を変更するには下記の4つの仕組みで構成されている
■Renderer
レンダラー、そのオブジェクトのレンダラーにアクセスする(それぞれのオブジェクトのマテリアルの値を変更するにはこれが必須)
■material.SetColor
マテリアルを変更する合図
■"_EmissionColor"
マテリアルの、どの値を変更するか指定
■ color = new Color(1f, 0.0f, 0.0f, 0.0f)
値をどのように変えるかを指定


ここのRendererに関しては最初に
public GameObject obj_1;
private Renderer rend;
みたいに変数を定義したあげて

void startで
rend = obj_1.GetComponent();
こんな感じでrend変数にマテリアルの値を変更させたいオブジェクトのRendererコンポーネントを入れてしまうと良い
こうすればrendに指定したオブジェクトのRendererがコンポーネントが入っているので
rend.material.SetColor("_EmissionColor", color = new Color(1f, 0.0f, 0.0f, 0.0f));
上記のように書けばマテリアルが更新される

変更させる値の種類が"_EmissionColor"となっているが
他の値を変更させたい場合
マテリアルのinspector > 歯車アイコンをクリック > Edit Shader,,,
f:id:shinobigiken:20170724075934p:plain

するとshaderのpropertiesが出てくる
ここの名前を見て、例えばemissionの値をいじりたかったら”_EmissionColor”
Albedoの値を変化させたい場合は”_Color”にする
Albedoのテクスチャを貼りたい場合は”_MainTex”
f:id:shinobigiken:20170724080033p:plain