ぱふの自由帳

週2更新目指す技術ブログ。メインはUnity。最近、競プロ始めましたー!良ければフォローお願いします(`・ω・´)

【Unity】positionやColorの要素を変更するコードについて

はじめに

まずは下のコードを見て下さい。

// (1f, 1f, 1f, 1f)のColorのImageコンポーネントを持ったオブジェクトAがある
// このAのImageのColorを(0.5f, 1f, 1f, 0.1f)にしたい

Color tmp = A.GetComponent<Image>.color;
tmp.r = 0.5f;
tmp.a = 0.1f;
A.GetComponent<Image>.color = tmp;

// もしくは
Color tmp = A.GetComponent<Image>.color;
tmp = new Color(0.5f, 1f, 1f, 0.1f);
A.GetComponent<Image>.color = tmp;

中級者以上の方は分かりませんが、初心者の方ならこんな感じで書いているのではないでしょうか? このコードを書いていて、以下の悩みをお持ちの方に役立つ記事だと思います。

  • コードが長くなって見づらい
  • これを一発で行う関数が欲しい
  • どの要素を変更したのか見やすくしたい

知っておくと良い(?)前提知識

以下の知識は必須ではありませんが、知っていればコードの意味が理解できます。

  • 拡張メソッド
  • null許容型 (int? ←コレ)
  • 名前付き引数

ソースコードをぺたっとな。

public static class ImageExtension
{
    public static Image ChangeColor(this Image image, float? r = null, float? g = null, float? b = null, float? a = null)
    {
        var c = image.color;
        if (r.HasValue) c.r = r.Value;
        if (g.HasValue) c.g = g.Value;
        if (b.HasValue) c.b = b.Value;
        if (a.HasValue) c.a = a.Value;
        image.color = c;
        return image;
    }
}

【超初心者の方へ】
ImageExtension.csというファイルを作成して、そこにこのコードを貼れば大丈夫です。ファイルの作り方がわからない場合は...ググろう!!

使い方

”はじめに”で見本として使ったコードを書き換えてみますよー。

// (1f, 1f, 1f, 1f)のColorのImageコンポーネントを持ったオブジェクトAがある
// このAのImageのColorを(0.5f, 1f, 1f, 0.1f)にしたい

// 必要な要素だけ指定して変更できる
A.GetComponent<Image>().ChangeColor(r:0.5f, a:0.1f);

どうでしょう???
スッキリ&可読性が向上した気がしませんか?!

おわり

「おー。イイネ。」と思った方は是非導入してみて下さい〜。

......
ちなみにですが、このコードはUniQuという私が運営している初心者OKのUnity助け合いコミュニティで ”すずきかつーきさん (@divideby_zero)" からいただいたコードの一部をそのまま使用しています。

UniQuについて、気になった方は私のTwitterのDMからご連絡ください〜。
↓以下UniQu参考記事↓

pafu-of-duck.hatenablog.com