Uniyで簡易的なColorPickerを作りました。

先日ラムダ式を使いたくてAction Classを見つけたのですが、
早速使ってみました。

using System;
using UnityEngine;
using UnityEngine.UI;

public class ColorPicker : MonoBehaviour
{
  //スライダーを三つ用意して使う
  [SerializeField] private Slider r;
  [SerializeField] private Slider g;
  [SerializeField] private Slider b;

  private Color rgb = new Color(0, 0, 0, 1);
  private Action<Color> changeRgbAction = (c) => { Debug.Log("no function"); };

  //ここで色が変わった時のコールバックをセットする
  public Action<Color> ChangeRGBAction
  {
      get{ return this.changeRgbAction; }
      set { this.changeRgbAction = value; }
  }

  private void Start()
  {
      this.r.onValueChanged.AddListener((r) =>
      {
          this.rgb.r = r;
          this.changeRgbAction(this.rgb);
      });
      this.g.onValueChanged.AddListener((g) =>
      {
          this.rgb.g = g;
          this.changeRgbAction(this.rgb);
      });
      this.b.onValueChanged.AddListener((b) =>
      {
          this.rgb.b = b;
          this.changeRgbAction(this.rgb);
      });
  }
}
// 使い方
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Test : MonoBehaviour {
	[SerializeField] private Image image;
	[SerializeField] private ColorPicker colorPicker;

    void Start()
    {
       //画像の色を変える
        this.colorPicker.ChangeRGBAction = (Color c) =>
       {
           this.image.color = c;
       };
    }

    void Update()
    {
    }
}

こんな感じになります。
f:id:pascal_tongue:20180309131943p:plain
f:id:pascal_tongue:20180309131951p:plain