解决:Unity鼠标悬停高亮

需求:在项目开发过程中需要实现鼠标悬停游戏对象的时候,游戏对象高亮产生描边。

解决:使用unity官方商店中的Quick Outline插件

步骤一、下载unity插件

地址:Quick Outline | Particles/Effects | Unity Asset Store

该插件的完全免费的,直接加入自己的资源即可

步骤二、安装插件

在unity中找到窗口--包管理器--我的资产,然后就可以下载并导入插件

步骤三、插件使用

1. 添加脚本

只需要给你需要鼠标悬停高亮的物体添加Outline脚本

2.脚本配置项

插件的配置项主要就三个,Outline Mode、Outline Color、Outline Width。

Outline Mode模式共有五种,分别是

Silhouette Only:模型被遮挡的部分整体高亮;

Outline Hidden:模型被遮挡的部分轮廓高亮;

Outline All:整个模型的轮廓高亮;

Outline And Silhouette:整个模型轮廓高亮+被遮挡的部分整体高亮;

Outline Visible:模型未被遮挡的部分轮廓高亮;

3.脚本控制

该脚本实现高亮的原理是,初始化时禁用Outline脚本,然后创建从摄像机向鼠标的射线,如果射线碰撞到游戏对象,检查游戏对象是否有Outline脚本,如果有该脚本就激活该脚本。

注:还需要给游戏对象添加碰撞体,否则射线无法与游戏对象发生碰撞!!!

using UnityEngine;

// 鼠标悬停高亮
public class HoverHightlight : MonoBehaviour
{
    private Outline outline;
    void Start()
    {
        outline = GetComponent<Outline>();
        if (outline != null)
        {
            outline.enabled = false;
        }
    }

    void Update()
    {
        DetectMouseHover();
    }

    private void DetectMouseHover()
    {
        // 获取鼠标位置并发射射线  
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;

        // 检测射线是否与任何物体相交  
        if (Physics.Raycast(ray, out hit))
        {
            // 检查射线检测到的物体是否为当前游戏对象
            if (hit.transform == transform)
            {
                if (outline != null)
                {
                    outline.enabled = true;
                }
            }else
            {
                if (outline != null)
                {
                    outline.enabled = false;
                }
            }
        }
        else
        {
            if (outline != null)
            {
                outline.enabled = false;
            }
        }
    }
}

Outline脚本挂载后运行脚本就可以实现高亮,所以我的思路是通过激活/禁用脚本实现的,大家也可以自己写思路控制即可。

 补充:HighlightingSystem插件也可以实现类似效果,不过没有测试过。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值