Button コンポーネントにはいろいろと color が設定できるので状態に合わせて Text の色も変えたかった。簡単な例としてカーソルをボタンにのせたときにテキストの色も変わるとか。ただまだまだ未完成のものになっているのでヒントくらいになればいいと思う。
いいやりかたとかあったらTwitterでこっそり教えて欲しいです。
Button の HighlightedColor を設定しておくとカーソルをそのボタンにのせたときにその Button の色が設定しておいた色に変わったりとか、押すと色が変わったりとかするのに中身の Text が白のままだったりしてダサく感じたのでいい感じに Text の色を変えたかった。
このスクリプトを Button オブジェクトにつけるだけ。HighlightedColor と PressedColor しか考えてない。
SelectedColor は概念が難しく感じたのでなんか適当な Color ( NormalColor など) と一緒にすることにした。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
[RequireComponent(typeof(Button))]
public class ButtonTextColorSetter : MonoBehaviour,IPointerClickHandler,IPointerEnterHandler,IPointerExitHandler
{
public Button button;
public Text text;
void Start()
{
button = GetComponent<Button>();
text = GetComponentInChildren<Text>();
}
public void OnPointerClick(PointerEventData eventData)
{
text.color = button.colors.pressedColor;
}
public void OnPointerEnter(PointerEventData eventData)
{
text.color = button.colors.highlightedColor;
}
public void OnPointerExit(PointerEventData eventData)
{
text.color = button.colors.normalColor;
}
}
これの問題点としてクリックした状態で画面が遷移しオブジェクトが無効になったとき(SetActive(false) とか) に再度オブジェクトを有効化したときにテキストの色が残ってしまう。ということで OnEnabled 関数あたりにこんな感じでいれればいいと思ったけど若干不完全かも。
private void OnEnable(){
text.color = button.colors.normalColor;
}あとはクリックしたくせにクリックした状態でボタン上からカーソルをどけたりとかしてボタンを押す動作をキャンセルする悪辣な存在もいるのでちょっとだるい。そのへんまでは対応してない。