[Unity 3D] スクリプトでマテリアルを操作!動的にマテリアルを変更する方法。(URP環境)

(2024/09/07)

開発環境
Unityのバージョン:2022.3.32f1(URP環境)

Unityでゲームオブジェクトの見た目を変更したい場合、マテリアルを操作する必要があります。 スクリプトからマテリアルを変更することで、ゲーム中にオブジェクトの色を変えたり、ダメージを受けた時に見た目を変化させたり、プレイヤーの選択に応じて見た目をカスタマイズしたりといった、動的な表現が可能になります。

既存のマテリアルを設定する方法

すでに作ってあるマテリアルをスクリプトからオブジェクトにアタッチするには、Rendererコンポーネントを取得する必要があります。

using UnityEngine;

public class Sample : MonoBehaviour
{
    public Material newMaterial;
    private Renderer objectRenderer;

    void Start()
    {
        // Rendererコンポーネントを取得
        objectRenderer = GetComponent();
        // オブジェクトのマテリアルをnewMaterialに変更
        objectRenderer.material = newMaterial;
    }
}

上記のコードをマテリアルを変更したいオブジェクトにアタッチし、インスペクターで「New Material」の欄に、 変更したいマテリアルをドラッグ&ドロップした状態で、エディターを再生すると、オブジェクトのマテリアルが変更されます。

新しいマテリアルを設定する方法

スクリプトから新しいマテリアルを生成して、それをオブジェクトにアタッチするには、new Material(Shader.Find("Universal Render Pipeline/Lit"))を使います。

using UnityEngine;

public class Sample : MonoBehaviour
{
    private Renderer objectRenderer;

    void Start()
    {
        // Rendererコンポーネントを取得
        objectRenderer = GetComponent();

        // 新しいマテリアルをシェーダーを指定して作成 
        Material newMaterial = new Material(Shader.Find("Universal Render Pipeline/Lit"));

        // マテリアルの色を赤色に設定
        newMaterial.color = Color.red;

        // 新しいマテリアルをオブジェクトにアタッチ
        objectRenderer.material = newMaterial;
    }
}

上記のコードをマテリアルを変更したいオブジェクトにアタッチし、 エディターを再生するとそのオブジェクトに赤色のマテリアルがアタッチされます。