ボタンの色を変えるには、色を ColorBlock に設定します。Material ではありません。
csharp
1using UnityEngine;
2using UnityEngine.UI;
3
4public class ChangeButtonColor : MonoBehaviour
5{
6 [SerializeField] Button _targetButton = default;
7 [SerializeField] Color _normalColor = Color.black;
8 [SerializeField] Color _hilightedColor = Color.yellow;
9 [SerializeField] Color _pressedColor = Color.green;
10 [SerializeField] Color _selectedColor = Color.red;
11 [SerializeField] Color _disabledColor = Color.grey;
12
13 void Start()
14 {
15 // _targetButton を設定し忘れている場合は適当に一つ持ってくる
16 if (!_targetButton)
17 {
18 _targetButton = GameObject.FindObjectOfType<Button>();
19 }
20 }
21
22
23
24
25 public void ChangeColor()
26 {
27 if (_targetButton.transition == Selectable.Transition.ColorTint)
28 {
29 Debug.Log("Change Button Color");
30 ColorBlock colorBlock = new ColorBlock();
31 colorBlock.normalColor = _normalColor;
32 colorBlock.highlightedColor = _hilightedColor;
33 colorBlock.pressedColor = _pressedColor;
34 colorBlock.selectedColor = _selectedColor;
35 colorBlock.disabledColor = _disabledColor;
36 colorBlock.colorMultiplier = _targetButton.colors.colorMultiplier;
37 _targetButton.colors = colorBlock;
38 }
39 else
40 {
41 Debug.LogError($"{_targetButton.name} の Transition を Color Tint に設定してください。");
42 }
43 }
44}
ただし、ボタンの Transition がデフォルトの Color Tint である時だけです。デフォルトから変えているとは思いませんが念のため触れておきます。