アカデメイア実験室のラボノートには勉強したことのメモを書いていきます。
目標はUnity Learnで3Dを学んで面白そうな何か作ってみることです(雑)
最終的には記事にも価値が出るようなものにしたいですが、何しろ不慣れなので、当面は行動記録として「投稿すること」を優先しようと思います。
こうしたほうがいいぞ!とかあればTwitterで絡んでください。
今日の内容は3DGameを作る(C#編9)です
今回は「一気にステージの雰囲気を変えるスクリプト」です。
以前、番号で別に指定したプレハブを、IntArrayに基づいて配置するプログラムを作りました(link)。
ステージごとに色やツヤ、柄を変えたいと思ったのですが、このプログラムをそのまま使うと、番号やプレハブが面ごとに15ずつとか増えるので、これを一斉に変更したい、と考えました。動作で言えば、VRChatで服を着替えるイメージです。シェーダーやマテリアルの差し替えなんかをしてもよかったのですが、結構いろいろマテリアルがあるので、それも面倒です。ポストプロセスは、全体に掛かってしまうので、一部除外したい場合には使えません。今回はオブジェクトの"シェーダーの種類"は全部そろってるので、簡単に「パラメータを変える」ことで雰囲気を変えようと考えました。夕日ならオレンジ微発光とか、近未来ならメタリックとか、ですね。
やりたいこと
おなじシェーダーを使っているオブジェクトのパラメータを一斉に変えたい
条件
・おなじシェーダーを使っているオブジェクトを対象とする
・とりあえずは一旦StandardシェーダーのColor,Float,Texture系に限定
・パラメータ値が共通では無かったら知りたい
・影響を受けないオブジェクトを指定したい
・プリセットを設定したうえで、ゲーム中に他のクラス(場面管理クラス)から呼び出したい
というわけで作りました。
いくつかは動作未確認ですが、最低限の動作はできています
右図:インスペクター上の画面
下図、右隅のオブジェクトは除外、ピンク発光+Tex変更を適用した様子
もうちょっと一般化して配布出来たらいいなと考えています。
今日はここまで。