Unity上でPlayボタンを押すとオブジェクトのAlbedoが変わるスクリプト


やりたいこと

Fusion360で作成したオブジェクトと、Substance Painterで3DペイントしたテクスチャをUnityに取り込んで、Playボタンを押すとテクスチャが適用されるスクリプトを作成します。

流れ

  1. Fusion360でオブジェクトを作成して、FBXでエクスポートする
  2. RizomUVでUV展開する
  3. Substance Painterで3Dペイントして、Unity用にエクスポートする
  4. Unityでオブジェクトとテクスチャをインポートする
  5. Albedoを適用するスクリプトを作成する ← 今回の投稿の対象
  6. スクリプトとオブジェクトを紐づける ← 今回の投稿の対象
  7. スクリプトとテクスチャ画像を紐づける ← 今回の投稿の対象
  8. 実行ボタンを押すと、オブジェクトのAlbedoが変更される ← 今回の投稿の対象
  9. 実行ボタンを押すと、Albedoが変わる ← 今回の投稿の対象

詳細

3Dモデルやテクスチャの取込方法については、以下の投稿を参考にしてください。
Substance PainterでエクスポートしたテクスチャをUnityに取り込む

5. Albedoを適用するスクリプトを作成する

Hierarchyウィンドウの取り込んだオブジェクトをクリックし、InspectorウィンドウのAdd Component -> New Scriptを選択します。名称をtexture_changeに変更し、Create & addをクリックします。スクリプトが生成されました。

Assets内に生成されたスクリプトtexture_changeをダブルクリックし、Visual Studioを起動、以下のソースに変更し、保存します。

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

public class texture_change : MonoBehaviour
{
    // Start is called before the first frame update
    // スクリプトから画像を扱う場合に Texture または Spriteという形式に変換する必要がある
    // クラス変数として Texture型のクラス変数 wood_dark_AlbedoTransparencyを定義する
    public Texture wood_dark_AlbedoTransparency;

    void Start()
    {
        GetComponent<Renderer>().material.mainTexture = wood_dark_AlbedoTransparency;
    }

    // Update is called once per frame
    void Update()
    {

    }
}

6. スクリプトとオブジェクトを紐づける

5で作成したスクリプトを3Dオブジェクトに関連付け(アタッチ)します。スクリプトを選択し、3Dオブジェクト(この例ではBody1)にドラッグ&ドロップします。

7. スクリプトとテクスチャ画像を紐づける

Unityでは変数のアクセス修飾子をpublicにすると、インスペクター上で変数の紐づけを行うことができます。
Hierarchyウィンドウのスクリプトを紐づけた3Dオブジェクト(この例ではBody1)をクリックします。
Inspetorウィンドウを見ると、スクリプトに記載した変数が表示されています。変数の右の丸をクリックし、表示したいAlbedo画像を選択します。

8. 実行ボタンを押すと、オブジェクトのAlbedoが変更される