Unity5のColor構造体は、0から1の範囲で、Color32構造体が0から255の範囲を取ります。

Unity5では、UnityEngine.Color構造体とUnityEngine.Color32構造体があります。(公式) Color構造体は、floatを引数に取ります。Color32構造体はbyteで、0-255を引数に取ります。Color構造体は、0f~1.0fの値をれるもので、0f-255.0fの値を入れないように注意しましょう。

public Color (float r, float g, float b, float a);

public Color32 (byte r, byte g, byte b, byte a);

スクリプトで使う場合は、ColorかColor32か意識しましょう。

上記は、GUIのTextの色を変更するC#スクリプトです。またOutlineコンポーネント、Shadowコンポーネントの記述もあり、Outlineもランダムで変更するようにしています。

ここで、注意ですが、UnityのColor構造体は、0f~1fの値の範囲チェックしないので、new Color(255f, 255f, 0f, 0f)などのようにも記述できてしまいます。他のプログラミング言語で似たようなColorクラスなどがあって、安易に0から255の値を入れてしまうと、コンパイルエラーは出ませんがColor構造体は、1以上を1とみなすだけなので、プログラマーの意図とは異なる挙動になってしまいます。

私は、ちゃんと確認せず、Colorは0から255を取ると思っていたので、この問題解決に結構苦労しました。

OutlineとShadowの関係

001

Outlineで、テキストに枠を付けることができます。またShadowで文字の影を作れます。OutlineはShadowを継承しています。そのため以下の画像のように、TextにOutlineコンポーネントとShadowコンポーネントを用意した場合は、GetComponent<Shadow>()で、取得しようとしたときに、Outlineコンポーネントが所得されるようです。

002

回避方法としては、GetComponents<Shadow>()で、Shadow[]を取得するか、Unityエディターで順番を入れ替えることです。(順番の入れ替えについては私は検証していませんが、おそらくできるでしょう。)

 

このプロジェクトの配布

Unity5.4で作成

http://hajimete-program.com/games/SandboxChangeTextColor.zip

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA