Unity 2D可点击精灵实现、鼠标悬停检测及C#场景切换方案
实现Unity启动界面按钮点击与鼠标悬停检测
一、按钮点击切换场景
前置准备
首先确保你的Level 1场景已添加到Build Settings:
- 打开
File > Build Settings - 将
Level 1场景拖拽到Scenes In Build列表中,否则场景切换会失败
编写按钮脚本
创建名为StartButton.cs的C#脚本,挂载到启动界面的按钮对象上:
using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.UI; public class StartButton : MonoBehaviour { private Button _startButton; void Awake() { _startButton = GetComponent<Button>(); _startButton.onClick.AddListener(OnStartClicked); } void OnStartClicked() { // 此处场景名称需与Build Settings中的完全一致(含大小写) SceneManager.LoadScene("Level 1"); } }
注意事项
- 确认按钮对象已添加
Button组件 - 若按钮无响应,检查是否存在
EventSystem对象(创建UI时默认生成,缺失则右键UI > Event System添加)
二、鼠标悬停检测
针对UI按钮的悬停
实现IPointerEnterHandler和IPointerExitHandler接口,挂载到按钮对象上:
using UnityEngine; using UnityEngine.EventSystems; public class ButtonHover : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler { public void OnPointerEnter(PointerEventData eventData) { // 悬停时的逻辑:比如放大按钮、改变颜色 transform.localScale = new Vector3(1.1f, 1.1f, 1.1f); Debug.Log("鼠标悬停在开始按钮上"); } public void OnPointerExit(PointerEventData eventData) { // 离开时恢复原状态 transform.localScale = Vector3.one; Debug.Log("鼠标离开开始按钮"); } }
- 确保按钮对象有
Graphic Raycaster组件(UI对象默认自带)
针对非UI的2D对象(如Sprite)
给目标对象添加BoxCollider2D(或其他2D碰撞体),然后编写脚本:
using UnityEngine; public class SpriteHover : MonoBehaviour { void OnMouseEnter() { // 悬停逻辑:比如改变Sprite颜色 GetComponent<SpriteRenderer>().color = new Color(0.8f, 0.8f, 0.8f); } void OnMouseExit() { GetComponent<SpriteRenderer>().color = Color.white; } }
- 确认主相机已添加
Physics2D Raycaster组件
常见问题排查
- 场景切换失败:检查Build Settings中是否包含目标场景,场景名称拼写是否完全匹配
- 悬停无响应:UI对象需确保有
EventSystem和Graphic Raycaster;非UI对象需有启用的2D碰撞体,相机需添加Physics2D Raycaster - 脚本不生效:确认脚本已正确挂载到目标对象上,无编译错误
内容的提问来源于stack exchange,提问作者TK846
相关产品推荐
相关产品推荐

