【Unity】マテリアルを一箇所だけスクリプトで置き換える方法

Unity

今回は特定のボタンを押したらマテリアルが置き換わるっていうのを作っていきたいと思います。

Unity

今回例として使うのは車のブレーキランプです。

通常はこのようにただのテールライトですが

Sキーを押すとこのようにブレーキランプが光るように作りたいと思います。

作り方

それでは実際に作っていきましょう。

1.マテリアル作成

光らない通常時のマテリアルと光った時のマテリアルを作りましょう。

2.マテリアルアタッチ

先ほど作った通常のマテリアルをオブジェクトにアタッチしましょう。

アタッチ方法はまずアタッチしたいオブジェクトをヒエラルキーから探します

次にインスペクタービューにあるMesh Rendererを開きアタッチしたい所にマテリアルを入れてください

今回は要素18を使います。ちなみにこれは後々使うので忘れないようにしましょう。

3.スクリプト作成

BrakeLampというスクリプトを作成してください。

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

public class BrakeLamp : MonoBehaviour
{
    // マテリアルをアタッチ(ReflectorLampRedって名前は自分の好きなマテリアル名に変えてね)
    [SerializeField] Material ReflectorLampRed;
    // こっちも好きな名前にしていいよ
    [SerializeField] Material ReflectorLampRedON;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        // ブレーキ もしSキーを押したら
        if (Input.GetKeyDown(KeyCode.S))
        {
            // マテリアルの配列をmaterialsという名前に与える
            Material[] materials = GetComponent<Renderer>().sharedMaterials;
            // materialsの18番をReflectorLampRedON([SerializeField] Material で名前変えたらここも変えないといけないよ)に置き換える
            materials[18] = ReflectorLampRedON;
            // sharedMaterials機能をmaterialsに与える
            GetComponent<Renderer>().sharedMaterials = materials;
        }
        // もしSキーが離れてる時は
        else if (Input.GetKeyUp(KeyCode.S))
        {
            // マテリアルの配列をmaterialsという名前に与える
            Material[] materials = GetComponent<Renderer>().sharedMaterials;
            // materialsの18番をReflectorLampRedON([SerializeField] Material で名前変えたらここも変えないといけないよ)に置き換える
            materials[18] = ReflectorLampRed;
            // sharedMaterials機能をmaterialsに与える
            GetComponent<Renderer>().sharedMaterials = materials;
        }
    }
}

そしたらこのスクリプトをコピペで貼り付けましょう。

解説はスクリプトを見てね!って感じです。

ただざっくりとした解説だから詳しく知りたい方は調べた方がいいかも

4.スクリプトをアタッチ

マテリアルが付いてるオブジェクトにアタッチしましょう。今回はCarBodyにアタッチします。

アタッチしたらマテリアルを当てはめましょう

これで完成です。

実行してみると無事動作してるはずです。

タイトルとURLをコピーしました