100日チャレンジ『100日で50弾!』第16回、パルスフェード弾です。2秒周期で透明度が変化します。まずはgifを。

Update()内で、次を実行します。
//-----------------------------
alpha = 1 - Mathf.PingPong(time, 1);
setAlphaMesh(go, alpha);
//-----------------------------
ここでtimeは弾生成以来の経過時間、goは弾のゲームオブジェクトです。PingPong(time, 1)はtimeが1(秒)変化すると、時間に応じて0から1までの徐々に増える値を返します。timeが1秒を過ぎると変える値はだんだん減ります。以下、0→1→0→1→…と繰り返されます。1から引いているのは、α値を1からスタートさせたかったからです(1→0→1→0→1→…と変化)。弾生成直後は見えていた方がいいかな、と。こうして、この場合周期(不透明~透明~不透明)は2秒になります。2行目では次の関数をコールしています。
//-----------------------------
//goにセットされているマテリアルのα値をaにする
//
void setAlphaMesh(GameObject go, float a) {
Material mat = go.GetComponent<MeshRenderer>().material;
Color col = mat.color;
col.a = a;
mat.color = col;
}
//-----------------------------
弾のプレファブを見たらMeshRendererがセットされており、その中にマテリアルが入っていました。そこで、上のようなコードでマテリアルを取り出すことになります。そして
col.a = a
でマテリアルのα値を引数で与えられたaにセットします。なお、このマテリアルはRendering ModeをFadeにしておきます(Opaqueだと透明度が変化しなかった)。なお、ここではどの弾も一様に2秒周期としましたが、もちろんその辺は自由にできます。
ザッとこの先の予定を考えています。今、45種類くらいまで思いついているので、なんとか50に届きそうな感じです。大きめの付箋を弾の種類分ノートに貼って、順番を考えたり「新しい工夫はないかな?」と悩んだりしています。疲れますが面白いです。