はじめに
マテリアルのテクスチャを、スクリプトから他のテクスチャ画像に切り替える方法について紹介します。
マテリアルとは
マテリアル(Material)は、オブジェクトの見た目や質感を決めるものです。色、反射率、透明度、光沢、エミッションなどの属性を持つことができます。マテリアルは、シェーダーと呼ばれるプログラムと組み合わせて使用され、オブジェクトがどのように光を反射し、どのような影響を与えるかを制御します。
テクスチャとは
一方、テクスチャ(Texture)は、オブジェクトの表面に貼り付けられる2D画像のことです。テクスチャは、色や模様、汚れなどのディテールを追加することができます。テクスチャは、マテリアルの一部として使用され、オブジェクトの特定の部分に適用することができます。
スクリプトでテクスチャの取得と変更
以下は、スペースキーを押したらテクスチャの取得と変更を行うスクリプトの例です。
まずは、レンダラーコンポーネントのマテリアルを取得します。あとは、GetTextureで取得、SetTextureで変更することができます。
using UnityEngine;
public class ChangeTexture : MonoBehaviour
{
[SerializeField] Texture tex = default;
Texture texture;
Material material;
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
material = this.GetComponent<MeshRenderer>().material;
// テクスチャの取得
texture = material.GetTexture("_MainTex");
// テクスチャの変更
material.SetTexture("_MainTex",tex);
}
}
}
“_MainTex”は、参照するマテリアルのテクスチャプロパティを指しています。マテリアルのインスペクターの右上の設定をクリックして、Edit Shader…を開くと、確認することができます。



テクスチャに限らず、他の色々なプロパティも参照できるよ!
実行結果
上記のスクリプトをオブジェクトにアタッチして、変更後の画像もドラッグ&ドロップ入れます。

実行してスペースキーを押すと、テクスチャが変わりました

おわりに
テクスチャ画像の取得と変更方法でした!
.materialを使う際の注意点として、元のマテリアルをコピーして自動的にマテリアルを新規作成しています。自動的に作成されたマテリアルはゲームオブジェクトを削除しても残り続けるため、そのままにしておくとメモリリークを引き起こしてしまいます。
対策方法は、以下の記事をご覧ください。