原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

【Unity】複数のオブジェクトの色を一気に変える

三連休だった

スパイダーマンになってNYの平和を守ったと思ったら、次は核戦争後の荒野を彷徨う事になってオンラインゲームなのに他のプレイヤーと滅多に出会わないという斬新な世界を旅する三連休を過ごしたのですが、あまりに休日ニートが過ぎたのか、車の定期点検にディーラに持ち込んだら担当者に「走行距離が全然伸びていないので、ほとんど新車同然ですね(ニヤニヤ)」みたいな感じで、褒められているんだか貶されているんだか分からない言葉を浴びたりしたので少しは外に出ようと誓った秋の夜。

 

一気に色が変わる

さて、製作中の「Dull Things No Life」ですが、ゲーム自体は典型的なエンドレスランゲームなので、迫ってくる障害物を右に左に上に下に避けて進んでいくだけ、という単純な内容となっています。

 

なので他の類似アプリと違いをだす為にアレコレと演出を考えているわけですが、最近思いついた演出が「周りの背景や障害物の色が一気に変わる」というやつ、シューティングゲームなどで偶に見かける演出です。

 

周りの背景の色を変える、とはスカイボックスやプレイヤー機を囲んでいる壁のMaterialをスクリプトで変えるだけなので特に問題ないのですが、悩んだのは「障害物の色を変える」こと。
つまり、大量に動いているオブジェクトの色を一気に変えないといけない

 

オブジェクトの色を変える

「Dull Things No Life」では障害物として動いているオブジェクトのMaterialは全て同じものを使用するように作っています。
これは性能対策としてBatch数を減らすためです。

 

ただ、Unityではオブジェクトに対して

GetComponent<Renderer>().material.color = 色;

を行うことでオブジェクトの色を変更する事が出来ますが、これを行うと内部処理でオブジェクト毎にMaterialが一つ追加されます。つまりBatch数が増えるという意味で、これでは性能対策をした意味がなくなります。

 

Materialのcolorを変更したいけどBatch数は増やしたくない。

 

そんなことで悩んでいたのですが、毎度お世話になっているテラシュールブログに解決方法が記載されていました。

 

tsubakit1.hateblo.jp

SharedMaterialを使う

テラシュールブログによればRendererのsharedMaterialで共通Materialにアクセスすることができるようです。


つまり、同一Materialを参照しているオブジェクト全てに対して変更内容を適用できるということで、共通Materialを変更するので内部処理で新たにMaterialを追加することもありません

 

使い方はmaterialと同じように

GetComponent<Renderer>().sharedMaterial.color = 色;
とするだけです。めっちゃ楽。

 

早速、取り込んでみたらこんな感じなりました。
(sharedMaterialの変更と同時に、スカイボックスと壁のMatrialを変更しています)

 

f:id:Karvan:20181127235051g:plain

 

まぁ、ソコソコ面白い演出になっているのではないでしょうか。

 

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。