Unity-鼠标悬停改变物体层级

用最少的代码实现鼠标悬停时改变物体渲染层级

📝 前言

在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. 准备物体

  1. 在场景中创建一个2D物体(比如Sprite)

  2. 确保物体有Sprite Renderer组件

2. 添加脚本

  1. 创建脚本 HoverHighlight.cs

  2. 将脚本拖拽到物体上

  3. 设置Hover Order为想要的层级值(如11,我这里默认是10)

3. 添加碰撞体(必须)

由于使用OnMouseEnter/Exit,必须有碰撞体:

  • Add Component → Physics 2D → Box Collider 2D

  • 调整碰撞体大小覆盖物体

🎮 运行测试

点击运行按钮!

相关推荐
CDN36040 分钟前
游戏盾日志看不到攻击?日志开启与上报问题排查
游戏·网络安全·游戏引擎
山檐雾19 小时前
OctreeNode
unity·c#·八叉树
WarPigs21 小时前
Unity协程返回值的解决方案
unity·游戏引擎
WarPigs1 天前
Unity单例笔记
unity·游戏引擎
风酥糖2 天前
Godot游戏练习01-第24节-多人游戏暂停菜单,游戏优化
游戏·游戏引擎·godot
Allen74742 天前
ComfyUI 自动化生产 3D资产 工作流笔记
图像处理·opencv·unity·自然语言处理·3d模型生成·confyui
nnsix2 天前
Unity Windows11 打字中文显示不出来输入法的候选框
unity
SCLchuck3 天前
Godot 4 2D 物理引擎位置初始化踩坑:add_child() 和 position 到底谁先? (错误位置触发物理事件)
游戏引擎·godot·游戏开发·物理引擎
adogai3 天前
unity mcp接入 实现一句话生成游戏!
游戏·unity·游戏引擎
mxwin3 天前
Unity Shader 逐像素光照 vs 逐顶点光照性能与画质的权衡策略
unity·游戏引擎·shader·着色器