いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

Quadをフェードイン/統計検定2級

●Quadをフェードイン
Quadに画像(png。背景は透過)を入れたマテリアルをセットしてあります。シェーダーはStandard、RenderingModeはFadeです。シューティングゲームで取得するアイテムに使いますが、アイテムの動き方によっては裏面がこちらを向くことになり、対応せずにそのままにしていると画像が見えないことがあるのです(裏からは見えない。裏面のカリング)。そういう仕組みなので仕方ありませんが、するとなんとかしなければなりません。前からよくやっているのが同じQuadをもう1枚用意し、裏返してピッタリ貼り合わせることです。なんだか泥臭い気もしますが……。さらに空間にいきなりアイテムが「ポコッ」と現れたら不自然ですから、出現するときは透明に、1秒くらいでジワッと見えるようにします。以下のスクリプトをアイテムにアタッチしてやっていました。
//------------------------------
mr = GetComponent<MeshRenderer>();
// 最初は透明
UnityEngine.Color c = mr.material.color;
c.a = 0f;
mr.material.color = c;
// フェードイン
mr.material.DOFade(1f, 2f);
//------------------------------
で、今回も同じ手を使おうとしたら、なぜかフェードインしません。急にα=1で出現するのです(最初から全力で見えている!)。Unityもバージョンや新しいプロジェクトの作り方によって、前に使えたコードが動かなくなることなど珍しくありませんが、2枚のQuadに共有されているマテリアルを操作しているのだから同時にフェードアウトしそうに思えるんですが……。そうしたらChatGPTが次のコードを教えてくれました。
//------------------------------
var mrs = GetComponentsInChildren<MeshRenderer>();
foreach (var mr in mrs) {
    //マテリアルをインスタンス化
    mr.material = new Material(mr.material);
    UnityEngine.Color c = mr.material.color;
    c.a = 0f;
    mr.material.color = c;
    mr.material.DOFade(1f, 2f);
}
//------------------------------
 GetComponentsInChildren<MeshRenderer>()は自分自身もリストアップします。両面それぞれが自分の分と、あれば子の分のマテリアルをあらためて作り、それぞれがα値を変更するというわけです。このコードではマテリアルが3個生成されます。それぞれでDOFade()も実行されるわけですが、実害はなさそうです(よくはないですが)。動画は次。

youtu.be

それと、こうして作ったマテリアルはあとで削除しなくても問題ないのか聞いたら、アイテムの出現も頻繁ではないしUpdate()内の話でもないので大丈夫だ、と。気になるなら削除せよ、ということなので、以下のコード。
//------------------------------
void OnDestroy() {
    foreach (var mr in GetComponentsInChildren<MeshRenderer>()) {
        if (mr.material != null) {
            Destroy(mr.material);
        }
    }
}
//------------------------------
実は裏面のカリングを止める(裏からも見えるようにする)方法があり、簡単そうです。これを使うことにすればQuadは1枚、両面が見える、とういうことになり、これが一番だと思います。いずれ試してみます。

●統計検定2級
早速テキストと問題集を購入しました。問題集を中心に勉強し始めました。『統計学基礎』(日本統計学会編)、『統計検定2級公式問題集CBT対応版』です。前にも書いたとおり、特にぼくたちの世代は統計のまとまった勉強をしていない人が多いと思われます。指導要領にもどんどん入ってきているし、勉強しておくのはいいことでしょう。この問題集をひとおりできるようになれば受かるらしいです。問題・解答で150ページほどあり、40ページほど読みました。知っていることも多く、まだ楽です。推定や検定あたりは大変そうです。
新しいことを勉強しようとするときはワクワクするものですよね。何ヶ月かで合格までいくつもりです。