解决MRTK3中CompressableButtons图标注视时颜色重置为白色的问题
问题原因
NearMenu的UX.Button组件在注视(高亮)状态下,会自动应用预设的状态颜色样式,覆盖你手动设置的图标颜色,导致注视时变回白色。
解决方案
方法1:直接修改按钮状态颜色配置
- 选中目标NearMenu按钮,找到
UX.Button组件 - 展开Icon选项组,找到Color下的各状态颜色设置(Normal、Highlighted、Pressed等)
- 将Highlighted(注视触发的高亮状态)的颜色设置为你需要的自定义颜色,和Normal状态保持一致即可,这样注视时就不会变色
方法2:代码强制锁定图标颜色
如果需要动态修改颜色,且不想依赖状态配置,可以通过监听按钮状态变化,每次切换时强制重置颜色:
using UnityEngine; using TMPro; public class LockIconColor : MonoBehaviour { public Color targetColor; private TextMeshPro _iconText; private UX.Button _uxButton; void Awake() { _uxButton = GetComponent<UX.Button>(); _iconText = _uxButton.Icon.Char.GetComponent<TextMeshPro>(); // 初始设置颜色 UpdateIconColor(targetColor); // 监听状态变化,强制重置颜色 _uxButton.OnStateChanged.AddListener(_ => UpdateIconColor(targetColor)); } // 外部调用此方法动态修改颜色 public void UpdateIconColor(Color newColor) { targetColor = newColor; if (_iconText != null) _iconText.color = targetColor; } }
- 将脚本挂载到每个需要固定颜色的NearMenu按钮上
- 在Inspector面板设置
targetColor为目标颜色,后续动态修改时调用UpdateIconColor方法即可
方法3:禁用状态颜色自动切换
如果不需要按钮的状态颜色变化效果,可以直接关闭自动切换:
- 在
UX.Button组件的Icon选项组中,取消勾选Use State Colors(若有此选项) - 之后图标颜色会保持你手动设置的固定值,不会随交互状态改变
内容的提问来源于stack exchange,提问作者Hai Kazuma Desu
相关产品推荐
相关产品推荐

