
息を吐くように愚痴を言う
朝夕がめっきり涼しくなって秋の気配が濃くなってきましたが昼間は暑かったりして未だにポロシャツを着ている皆さんこんにちは。季節的には着ていたら可笑しいそうです。後輩に指摘されました。余計なお世話です。
シルバーウィークも終わり、11月にならないと祝日が無いばかりか、3連休も年内はない事を知り、且つ、PMには「年内は稼働をあげて(=残業して)作業してください」と宣告されて、例の100日後に〇〇する47歳の如く、モチベーションがゼロ底辺を彷徨う状況となっています。ええ、残業しても残業代はもらえないし。
一応、集英社のゲーム企画応募の方はプロモーション動画も企画書も完成して応募する事ができたのですが、次に待っている講談社向けの企画について作業する情熱が中々燃え上がってきません。
心を燃やせ、と言われても早々燃えないです。きっとゴミだったら燃えないゴミの方に分別されると思います。
間違い探し
とか言いながらも締め切りは差し迫っているので、作業を進める為、プロモーション用にパズルゲームを作っている最中です。

こんな感じの間違い探し(直し)ゲーム
左のジオラマと違うところをクリックして同じ状況に修正させるのですが、修正する「間違い」の中にはオーソドックスに「色違い」も存在します。
「色違い」だとmaterialのcolorを変更すれば良さそうですが、そうすると同じmaterialを使っている他のモデルにも影響が出るので、colorの変更は行わずmaterialそのものを変更する事になります。
textureを使用しているmaterialならtextureを変えれたmaterialを用意すれば良さそうですが、そうでなく下のように複数の色のmaterialで構成されているモデルの場合、狙った箇所だけmaterialを変更する必要が出てきます。

当初は
gameObject.GetComponent<Renderer>().materials[1] = mat;
上のコードのように配列中のIndexを指定して、ORANGEのmaterialを別の色のmaterialに変更すれば良いと思ったがこれでは動作しませんでした。
調べた結果、以下のように配列ごと入れ替えると動作します。
Material[] tmp = gameObject.GetComponent<Renderer>().materials;
tmp[1] = mat;
gameObject.GetComponent<Renderer>().materials = tmp;
これで実行すると

こんな感じ、上手い具合に狙った個所の色だけが変わるようになりました。