Unity按钮Hover动画场景启动自动播放,HoverOff无法触发求助
问题解决思路及步骤
一、解决场景启动自动播放Hover On动画的问题
- 检查Animator Controller默认状态
打开Animator窗口,确认Entry节点的默认过渡目标是Hover Off而非Hover On。如果当前连到了Hover On,右键断开原有连接,重新把Entry连到Hover Off状态。 - 关闭动画片段的Play On Awake
在Project面板找到Hover On动画文件,在Inspector面板中取消勾选Play On Awake选项,避免场景启动时自动播放该动画。 - 优化脚本初始化逻辑
把Animator组件缓存到成员变量,避免重复调用GetComponent:using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.EventSystems; public class hoverscript : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler { public RectTransform NewGameMenuButton; private Animator btnAnimator; void Start() { btnAnimator = NewGameMenuButton.GetComponent<Animator>(); btnAnimator.Play("Hover Off"); } public void OnPointerEnter(PointerEventData eventData) { btnAnimator.Play("Hover On"); } public void OnPointerExit(PointerEventData eventData) { btnAnimator.Play("Hover Off"); } }
二、解决Hover Off动画无法触发的问题
- 确认脚本挂载对象正确
该脚本必须挂载在按钮对象本身(或按钮的直接父对象),且按钮的Interactable属性需保持开启状态。 - 检查Animator状态过渡设置
打开Animator Controller:- 确保从
Hover On状态到Hover Off状态存在过渡连接; - 关闭过渡的
Has Exit Time选项(否则需等Hover On动画完全播放完才会切换到Hover Off); - 更推荐用参数控制状态切换:添加布尔参数
isHovering,设置过渡条件:- Hover Off → Hover On:
isHovering == true - Hover On → Hover Off:
isHovering == false
对应脚本修改为:
public void OnPointerEnter(PointerEventData eventData) { btnAnimator.SetBool("isHovering", true); } public void OnPointerExit(PointerEventData eventData) { btnAnimator.SetBool("isHovering", false); } - Hover Off → Hover On:
- 确保从
- 检查UI交互基础组件
- 确保按钮所在的Canvas带有
Graphic Raycaster组件; - 场景中存在
EventSystem对象(若没有,右键菜单选择UI → Event System创建); - 按钮的
Graphic组件(如Image)未被禁用。
- 确保按钮所在的Canvas带有
内容的提问来源于stack exchange,提问作者okthenasdfghkl
相关产品推荐
相关产品推荐

