【UE5】WidgetBluePrintでカラーピッカーを作ろう

今回はUrealEngineのWBPでブループリントだけで動くカラーピッカーを作ります。

カラーピッカー用の画像を作る

カラーピッカーの彩度/明度選択や色選択で使用する部分の画像を作っていきます。

今回はIllustratorで作成しましたが同じ性質のものであれば問題ありません。

・彩度/明度選択部分

彩度/明度選択部分見た目にはこのようなものを使用しています。

これを色選択で選択した上にマスクのようにかぶせることで、彩度/明度選択を作っています。

・色選択バー

色選択バーは以下のようなものを使用しています。

このバーのグラデーションは以下のような内訳になっています。

このようなグラデーションを作ると、原色のグラデーションを作ることができます。

バーのつまみや彩度/明度選択のホイールは必要に応じて準備します。

カラーカーブを作る

次に、UnrealEnginの方で、色のもとになるカラーのカーブを作成します。

その他→カーブ を選択してください。

その中の、CurveLinearColorを選択します。

作成したカーブを以下のように編集していきます。

0~6の間に上のバーと同じようにグラデーションを作っていきます。

リニアカラーカーブは数値を入れると対応したカラー情報を出してくれるため、これで今の色を取得します。

UIを配置する

WBPにボタンや画像などを配置していきます

・Color Selector …ボタン Illustratorで作成した白黒の透明な画像を見た目に使用します

・Back Color…Image ここに右隣のバーで選択した色が入ります。Color Selectorと同じサイズです

・Origine Color Bar …スライダー Illustratorで作成したグラデーション画像を見た目に使用します。垂直方向にして使用しています。初期ValueとMin Valueは0、Max Value          は6です。

・Result Color …Image 一番右の真っ白な画像です。ここに最終カラーを出力します。

・MouseCursor…Image 選択中の場所を示すものです。なくても大丈夫です

Color SelectorとBack Color の構造はこのようになっています。

Color Selectorの一部が透明なので下のBackColorの色が透けて見える構造です。

BPを組む

UIを動かすブループリントを組んでいきます。

まず、Color Selector ボタンが押された時と離れた時を検知します。

次にリニアカラーカーブの変数を作成し、そこに先ほど制作したカラーカーブをデフォルトで設定します。

デフォルト値に先ほど作成したカーブを入れる

スライダーに値が入力されたとき、カーブの対応する色をGet Linear Color Valueで取得するようにします。

取得した値をBackColorの色にセットします。後で使うので変数を作成しOrigineColorとしてセットしておきます。

次に実際に色を取得する部分を作っていきます。

マウスから出てくる数値と彩度/明度、そしてRBGカラーの値の関係はこのようになっています。

なので、左のマウスカーソルの位置の値を右のRBGの上下の増える方向に変換する方が取り扱いが楽になります。

カスタムイベントを作成して、明度と彩度を求めていきます。

マウスポジションの位置からマウスがColor Selectorのどれぐらいの位置にいるのかを求めていきます。

取得した座標を画像のサイズの値が上限になるようClampで丸め、丸めた値を画像サイズで引くことで反転させます。そして最後に画像サイズで割ることで、マウスカーソル位置の彩度/明度の割合を知ることができます。

求めた彩度/明度は変数としてセットしておきます。

求めた値から、最終的な色を求めていきます。

まずは前半の彩度を求める部分です。

スライダーで求めたリニアカラーの値をマックス値の1から引いて、あとどれだけ足すと白になるかを求めます。

次に彩度の割合を先ほどの値に掛けていきます。

最後に掛けた値をもとの色に足していきます。

これで彩度が調整されたカラーが完成します。新しい変数を作ってセットしておきます。

次に明度の調整です

先程彩度を調整したカラーに明度の割合を掛けて完了です。

完成した色はResult Colorの見た目にセットします。

後はTickとスライダー変更後に色を変えるイベントを呼び出すだけです

できました!

完成した値をマテリアルで使用したり、キャラクターの色変えに使ったりといろいろ使えそうですね!

おまけ マウスカーソル編

Color Selector内で追従するマウスカーソルはこのように作ることができます。

明度/彩度と同じようにマウスの座標を取得し、Color Selectorからはみ出さないようClampしてカーソルの位置をSet Render Translationで設定しています。あとはこのイベントをTickで呼び出します。

追従してくれるカーソルができました!

エンジニアリング事業部からの最新情報をお届けします