スクリプトからSpriteRendererの色を
指定して変えたかったのですが
うまくいきませんでした。
何がだめだったのか調べて解決法を
見つけたので残しておきます。
リンク
起きたこと
左の灰色のSpriteを
右のオレンジ色に変えたいです。
右のオレンジ色は
R = 255、G = 100、B = 0なので
このRGB値で設定します。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ColorChanger : MonoBehaviour { private SpriteRenderer SpriteRenderer { get; set; } void Start() { SpriteRenderer = GetComponent<SpriteRenderer>(); } public void ChangeColor() { SpriteRenderer.color = new Color(255f, 100f, 0f); } }
ボタンを押すとChangeColorメソッドが
実行されるように設定して
ボタンを押します。
すると
オレンジになってほしかったのですが
何故か黄色に・・・
確認してみるとスクリプトで指定した
RGB値と全然違う値が
設定されていました。
原因
Colorクラスのドキュメントを見に行くと
どうやらRGB値は0~1の値で設定しなければ
ならないということがわかりました。
解決法
RGB値を0~1の値に変換するの
どうすれば良いんだ?とか
他に使えるものがないか?とか
思いながら調べていたら
全く同じ問題に当たった人を
発見。
RGB値を設定するには
①指定した値を255で割る
//例 SpriteRenderer.color = new Color(255f/255f, 100f/255f, 0f/255f);
②Color32クラスを使う
//例 SpriteRenderer.color = new Color32(255, 100, 0, 255);
の2つの方法がありました。
②の場合は引数の4つ目に
透明度も指定しなければならないので
注意です。
コードを修正したらちゃんと指定した
RGB値の色に変わりました。
おまけ:カラーコードでの色の指定の仕方
カラーコードでも色の指定はできます。
コードを色に変換するには
ColorUtility.TryParseHtmlStringを
使います。
public void ChangeColor() { var colorCode = "#FF6300"; if (ColorUtility.TryParseHtmlString(colorCode, out Color color)) { SpriteRenderer.color = color; } } }
リンク