文章目录
前言
在游戏或应用中,给用户的界面添加一些小的互动效果能让它们更加吸引人。比如,当策划要求你这样做的时候 ,当用户将鼠标悬停在文字上时,文字颜色改变,这样的效果会让界面看起来更有趣。本文将教你如何在Unity中实现这个效果,将写好的脚本挂载到按钮上即可。
一、Text
csharp
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;
public class TextColorChange : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
public Color normalColor = Color.blue; // 默认颜色
public Color hoverColor = Color.white; // 悬停时颜色
private Text textComponent;
private void Start()
{
textComponent = GetComponentInChildren<Text>();
if (textComponent == null)
{
Debug.LogError("没有找到Text组件,请确保文本对象是Button的子对象,并且拥有Text组件。");
}
else
{
textComponent.color = normalColor;
}
}
public void OnPointerEnter(PointerEventData eventData)
{
if (textComponent != null)
{
textComponent.color = hoverColor; // 悬浮时将字体颜色改为悬停颜色
}
}
public void OnPointerExit(PointerEventData eventData)
{
if (textComponent != null)
{
textComponent.color = normalColor; // 离开时将字体颜色还原为默认颜色
}
}
}
二、TMP_Text
csharp
using UnityEngine;
using TMPro;
using UnityEngine.EventSystems;
public class TMPTextColorChange : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
public Color normalColor = Color.blue; // 默认颜色
public Color hoverColor = Color.white; // 悬停时颜色
private TMP_Text textMeshPro;
private void Start()
{
textMeshPro = GetComponentInChildren<TMP_Text>();
if (textMeshPro == null)
{
Debug.LogError("没有找到TMP_Text组件,请确保文本对象是Button的子对象,并且拥有TMP_Text组件。");
}
else
{
textMeshPro.color = normalColor;
}
}
public void OnPointerEnter(PointerEventData eventData)
{
if (textMeshPro != null)
{
textMeshPro.color = hoverColor; // 悬浮时将字体颜色改为悬停颜色
}
}
public void OnPointerExit(PointerEventData eventData)
{
if (textMeshPro != null)
{
textMeshPro.color = normalColor; // 离开时将字体颜色还原为默认颜色
}
}
}
二、颜色转换
如果要使用配置加载,或者用类似#xxxxx的颜色格式进行配置的话,使用以下逻辑封装成适合的方法。
csharp
Color sample;
ColorUtility.TryParseHtmlString("#3790E7", out sample);
textMeshPro.color = sample;
Text.color = ColorUtility.TryParseHtmlString("#3790E7", out var color) ? color : Color.blue;
总结
使用这些脚本,你可以轻松地在Unity中实现鼠标悬停时改变文字颜色的效果。