【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参考記事↓