スプライトをクリックすると色を変更する、あるいはスプライト以外をクリックすると色が元に戻る、といった操作を、ここではSpriteRendererコンポーネントのcolorプロパティを変更して実装しています。
元の色に対してカラーフィルターをかけるイメージです。
成果物
クリックしたオブジェクトの色を変更します。
クリックしたスプライトの色を変更
スプライトの色を変更
SpriteRenderer.color = 色;
※色はColor.redなどの定形色か、new Color(RGBA)で色を指定
SpriteRenderer.color = 色;
※色はColor.redなどの定形色か、new Color(RGBA)で色を指定
なんとなく脱出ゲーム風の画面を作ってみました。この「カギ」をクリックした時に、色を変更させてみたいと思います。
オブジェクトのSpriteRendererにある「色」を確認してみます。初期値ではRGBでそれぞれ255の「白」が割り当てられています。(Aは透明度)
色味をいじってカラーフィルターをかけ、初期状態で選んでない感を出してみます。
スクリプトをカギにアタッチし、
カギのレイヤーの順序を上げて背景より前に設置し、コライダーを設置しておきます。
スクリプトを開き、OnMouseDown(クリック時に実行)でさっきのSpriteRendererの「色」を白に戻す命令を書いてみます。
コードで言うと、this.GetComponent<SpriteRenderer>().color = Color.white;となります。whiteは定形色で、このように文字色で指定するとRGBが255の「白」の意味になります。
コードで言うと、this.GetComponent<SpriteRenderer>().color = Color.white;となります。whiteは定形色で、このように文字色で指定するとRGBが255の「白」の意味になります。
この状態で実行すると、カギをクリックした時にカギの色が変更されます。
自分以外をクリックした時に色を元に戻す
アイテム増やしてみました。
「選択しているアイテム」感を出すべく、クリックしたオブジェクトはカラーフィルターを解除して、同時にもう片方のオブジェクトにフィルターをかけるスクリプトを組んでみたいと思います。
「選択しているアイテム」感を出すべく、クリックしたオブジェクトはカラーフィルターを解除して、同時にもう片方のオブジェクトにフィルターをかけるスクリプトを組んでみたいと思います。
コード内でpublic GameObject other;を宣言し、
カギのインスペクタで、変数otherに追加したメモをセットします。
メモにも同じスクリプトをアタッチして、
こっちではotherにカギをセットします。
これでカギにとってはメモがother、メモにとってはカギがotherという状態になります。
これでカギにとってはメモがother、メモにとってはカギがotherという状態になります。
さっきの「選択されてない時の色」を参照し、
thisの色を変更するスクリプトの下に、other.GetComponent<SpriteRenderer>().color = new Color(207, 255, 151, 255);を追加します。本来これでOKですが、
実はこのスクリプト、2019だとうまく動きません。なぜか二番目の数字(RGBのG)に0以外の数値を指定すると色変更されないというバグがあるようで、
その証拠にGだけ0にした同じコードを実行すれば、
ちゃんと動きます。
別に紫でもいいんですが、一応元の色にこだわりたいと思います。参照しているカギの色の表示をRGBの255から0~1fに変更し、
表示される数字をコピペして、
最後にfを付けて、new Color(0.8124341f, 1f, 0.5896226f, 1f);という表記にします。
色としては同じです。
色としては同じです。
これを実行すると、クリックしたオブジェクトはカラーフィルターが外れ、選択されていないオブジェクトはフィルターがかかることが確認できます。
(ただ別問題として、フィルターかかってるほうが選択してる感ある感じもしないでもないです)
(ただ別問題として、フィルターかかってるほうが選択してる感ある感じもしないでもないです)
//Unity C#
public GameObject other;
void OnMouseDown()
{
//アタッチしたオブジェクトはカラーフィルターを解除
this.GetComponent<SpriteRenderer>().color = Color.white;
//他のオブジェクトはカラーフィルターを設定
other.GetComponent<SpriteRenderer>().color = new Color(0.8124341f, 1f, 0.5896226f, 1f);
}
※ちなみに完成品では結局別の色にしてます。
やりたいことから逆引きするUNITYの使い方まとめ
Unityをやりたいことから学習していけるよう、機能・用途別にまとめたページです。C#の命令別の逆引きは現時点で作っていません。2019の時期に書き始めているので、それより前のバージョンについては言及しません。
コメント