Meiryo’s blog

やってみて詰まったことを備忘録として残すブログ

【Unity】スクリプトからSpriteRenderer.Colorの色を変えれなかった問題の解決

スクリプトから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;
        }
    }    
}