用最少的代码实现鼠标悬停时改变物体渲染层级
📝 前言
在2D游戏开发中,经常需要让物体在鼠标悬停时"浮"到最前面,比如卡牌游戏中的手牌高亮、RTS游戏中的单位选择等。今天我们就用最简单的代码实现这个效果:鼠标悬停时改变物体的Sorting Order,离开时恢复。
🎯 最终效果
-
鼠标进入物体 → 物体的Sorting Order变为指定值(如11)
-
鼠标离开物体 → 物体的Sorting Order恢复原值
-
无需移动物体,只改变层级,实现最简单的高亮效果
💻 最简代码实现
cs
using UnityEngine;
public class HoverHighlight : MonoBehaviour
{
public int hoverOrder = 11; // 悬停时的层级
private SpriteRenderer spriteRenderer;
private int originalOrder;
void Start()
{
spriteRenderer = GetComponent<SpriteRenderer>();
if (spriteRenderer != null)
{
originalOrder = spriteRenderer.sortingOrder;
}
}
void OnMouseEnter()
{
if (spriteRenderer != null)
{
spriteRenderer.sortingOrder = hoverOrder;
}
}
void OnMouseExit()
{
if (spriteRenderer != null)
{
spriteRenderer.sortingOrder = originalOrder;
}
}
}
🔧 设置步骤
1. 准备物体
-
在场景中创建一个2D物体(比如Sprite)
-
确保物体有Sprite Renderer组件
2. 添加脚本
-
创建脚本
HoverHighlight.cs -
将脚本拖拽到物体上
-
设置Hover Order为想要的层级值(如11,我这里默认是10)
3. 添加碰撞体(必须)
由于使用OnMouseEnter/Exit,必须有碰撞体:
-
Add Component → Physics 2D → Box Collider 2D
-
调整碰撞体大小覆盖物体
🎮 运行测试
点击运行按钮!

