Unity ColorUsageAttributeで色の編集+色の型とHDR

Unity エディタの Inspector ウィンドウでは、スクリプトの持つ変数を編集できます。
以前の記事で、基礎的な変数は public アクセス修飾子を指定するだけで Inspector ウィンドウで編集できることを紹介しました。

UnityのInspectorウィンドウにSpeedの項目が追加されました。
UnityのInspectorウィンドウにSpeedの項目が追加されました。

このシリーズではスクリプトの変数の前に書き込むだけで、 Inspector ウィンドウでの編集 GUI をカスタマイズできる PropertyAttribute について紹介していきます。

今回は色を設定する ColorUsageAttribute を紹介します。色の型HDR についても紹介します。

色情報を持つ Color 型と Color32 型の違い

Unity の C# のプログラムで色情報を持つ場合、 Color 型や Color32 型を用います。
どちらも RGBA の 4 つの値で色( A は不透明度)を表現しますが、 Color 型は 0.0 ~ 1.0 の範囲で、 Color32 型は 0 ~ 255 の範囲で値を管理します。
Color を使うな.Color32 を使え. – デニッキ!」様の情報によると、 Color32 の方が編集が行いやすく処理速度も速いようです。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class StudyPropertyAttribute : MonoBehaviour
{
	public Color MyColor;
	public Color32 MyColor32;
}

上記のように書くと、ColorUsageAttribute を使わなくても Inspector で色を設定するためのフィールドが追加されます。

Unity Inspector ウィンドウの Color と Color32 の編集フィールド

Debug.Log 関数を使い、 Color, Color32 型の変数の値を出力すると、
Color 型の値は「RGBA(1.000, 0.514, 0.957, 0.000)」と小数で出力され
Color32 型の値は「RGBA(126, 238, 93, 0)」と整数で出力されました。

Unity Color, Color32 型の変数の値の出力結果

ColorUsageAttribute の適用

色情報の編集インターフェースをさらに細かく設定したい場合は、 ColorUsageAttribute をメンバ変数宣言の前に付加しましょう。

ColorUsageAttribute には 3 つのコンストラクタがあるので順に紹介します。

public ColorUsageAttribute (bool showAlpha);

bool ShowAlphaColor フィールドと Color ダイアログアルファチャンネル (RGBA の A) の情報を表示するかしないかを設定します。 true で表示、false で非表示になります。
アルファチャンネルは変更しない場合は false にするとミスが減るでしょう。

以下のコードで、 true と false の場合を比較します。

[ColorUsageAttribute(true)]
public Color ColorUsageAttribute1A;

[ColorUsageAttribute(false)]
public Color ColorUsageAttribute1B;

showAlpha 引数が true の Color フィールドをクリックすると Color ダイアログの中にアルファチャンネルが表示されていて編集できます。
false の場合は、アルファチャンネルの項目が表示されません

Unity ColorUsageAttribute showAlpha 引数による違い(Color フィールド)
Unity ColorUsageAttribute showAlpha 引数による違い

public ColorUsageAttribute (bool showAlpha, bool hdr);

bool hdrHDR (High Dynamic Range) カラーとして扱う場合は true、ノーマル LDR カラーとして扱う場合は false を指定します。デフォルト値は false です。

HDR (High Dynamic Range) とは?

Unity のカラーの設定値は 0.0 ~ 1.0 ですが、 HDR カラーでは 0.0 ~ 1.0 範囲外の値で表現することができ、よりリアルな画像処理ができます。
最終的には出力先のデバイスに合わせて 0.0 ~ 1.0 の範囲に変換されますが、その間の中間処理では大きな値を使った演算が行えます。
メリットはよりリアルな画像・映像を描写できること、デメリット容量が増え処理時間が増えること、対応していないハードウェアもあることです。

HDR 設定の有無の違い

次のようなコードを書き、 Inspector ウィンドウを表示しました。

[ColorUsageAttribute(true, true)]
public Color32 ColorUsageAttribute2A;

[ColorUsageAttribute(true, false)]
public Color32 ColorUsageAttribute2B;

hdr = true に設定した場合、カラーフィールドには HDR とテキストが表示され、クリックすると HDR Color ダイアログが表示されます。

Unity ColorUsageAttribute hdr 引数による違い(Colorフィールド)

Color ダイアログとは違い Intensity の値を選択できます。
Intensity は色の露出の度合を表し数値が 1 増えるにつれて 2 倍になります。

Unity ColorUsageAttribute hdr を true にした際の HDR Color ダイアログ

public ColorUsageAttribute (bool showAlpha, bool hdr, float minBrightness, float maxBrightness, float minExposureValue, float maxExposureValue);

3 番目のコンストラクタは公式マニュアルObsolete がついていて、推奨されていません

showAlpha, hdr の引数は前述のとおりです。

公式マニュアルの説明によると、minBrightness, maxBrightness は色を選択する際の HDR カラーコンポーネント値 (0 ~ 8) の最小値と最大値を設定します。
minExprosureValue, maxExposureValue は露出値の最小値と最大値を設定します。

次のコードを書いて Inspector ウィンドウで表示しました。

[ColorUsageAttribute(true, true, 1, 7, 3, 5)]
public Color32 ColorUsageAttribute3A;

次のように色を設定するフィールドが表示されました。

Unity ColorUsageAttribute 3番目のコンストラクターを設定した例(Colorフィールド)

HDR Color ダイアログで色の範囲の制限があるかと思いましたが特に違いはわかりませんでした。

Unity ColorUsageAttribute 3番目のコンストラクターを設定した例(HDR Color ダイアログ)

Obsolete のため Console ウィンドウには次のような警告が出力されました。

Assets\Scenes\Script\StudyPropertyAttribute.cs(22,6): warning CS0618: 'ColorUsageAttribute.ColorUsageAttribute(bool, bool, float, float, float, float)' is obsolete: 'Brightness and exposure parameters are no longer used for anything. Use ColorUsageAttribute(bool showAlpha, bool hdr)'

この警告文の後半のメッセージを読むと、「Brightness and exposure parameters are no longer used for anything. (Google 翻訳) 明るさと露出のパラメーターは何にも使用されなくなりました。」と表示されているため、Brightness と Exposure のパラメータは作用していないようです。

まとめ

今回は Unity色情報を扱う Color, Color32 型、 HDR 、Inspector ウィンドウの色を設定する GUI をカスタマイズする ColorUsageAttribute について紹介しました。

参照サイト Thank You!

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました