Unity通过脚本添加组件实现鼠标滑过3D物体高亮(附Demo)

    场景中3D物体比如Cube的高亮,是通过 HighlightSystem 的插件来实现的,对于插件内部的代码不需要做任何修改,我们只需要知道应该如何配置以及插件内有哪些方法可以调用即可。

    作为一个新手,最容易碰到的问题是,明明很多博客已经提供了配置方案以及代码解释,但是自己配置的时候总是不知道哪里出点问题导致效果出不来,所以,这边我配好了一个 Demo 提供出来。是一个 .unitypackage 包,如果不知道Unity如何导入这类插件包,我下面会有讲解。

目录

1.  实现效果

2. Demo 运行

3. 到底配置了哪些组件?

4. 点击实现

# 附件


1.  实现效果

最终的效果是这样,我给右边两个 cube 添加了高亮脚本,鼠标放上去,cube 高亮。  

2. Demo 运行

新建空项目后,Project视图,Assets目录右键 > Import Package > Custom Package。弹出系统窗口,选择 UnityHighlighter.unitypackage 文件,然后全选所有压缩包中文件点击确定,demo就被导入进项目了。

demo导入后,如果天空盒显示有问题,则进入到天空盒路径,双击 Skybox18,然后将左侧的5张图拖到右侧的前5个Texture中,前后左右上分别对应图片 Sky10_01, 03, 02, 04, 05,图片拖好了以后,背景天空盒便显示正常。

双击场景 HighlighterScene,然后点击运行项目,鼠标划到右侧两个 cube 上便能看到高亮的效果。

3. 到底配置了哪些组件?

要想使某个3D模型高亮,需要配置一定的组件,这边来一一列举出来,对照着手动配置的话就能实现效果。

1)首先给 3DCamera 添加 HighlightingRenderer 脚本,这里的 Camera 就是照出Cube的相机;

2)给 Cube1 添加脚本 HighLightConfig,这里我已经把所需要的组件全部都通过脚本的方式添加进来,这样就不必再手动去一个个组件拖过去了。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using HighlightingSystem;

[RequireComponent(typeof(Button3D))]
[RequireComponent(typeof(FlashingHighlighter))]
[RequireComponent(typeof(MouseOver3D))]
[RequireComponent(typeof(Highlighter))]
[RequireComponent(typeof(ClickModel))]
public class HighLightConfig : MonoBehaviour
{
    Button3D button3D;
    ClickModel clickModel;
    MouseOver3D mouseOver3D;
    FlashingHighlighter flashingHighlighter;
    Highlighter highlighter;

    void Start()
    {
        button3D = gameObject.GetComponent<Button3D>();
        clickModel = gameObject.GetComponent<ClickModel>();
        mouseOver3D = gameObject.GetComponent<MouseOver3D>();
        flashingHighlighter = gameObject.GetComponent<FlashingHighlighter>();
        highlighter = gameObject.GetComponent<Highlighter>();
        Debug.Log("========拿到高亮物体:"+gameObject.name+", button3D:"+button3D+", clickModel:"+clickModel);
        if (button3D && clickModel)
        {
            button3D.interactable = true;
            button3D.onClick.AddListener(clickModel.OnClick3D);
        }
        if(mouseOver3D && flashingHighlighter)
        {
            flashingHighlighter.highlighter = highlighter;
            mouseOver3D.interactable = true;
            mouseOver3D.onMouseOver.AddListener(flashingHighlighter.OnHover);
        }        
    }
}

这里添加了5个组件,然后给点击、hover加上监听,如果是手动添加组件,则注意这三个地方要把对应的对象加进去。

4. 点击实现

cube点击后具体实现在 ClickModel > OnClick3D()

鼠标划过方法在 FlashingHighlighter > OnHover(),这边文件可以配置高亮的颜色、常量、隐藏等,具体效果实现在 Highlighter 库中,有兴趣可以详细探索下,这里不作介绍。

public class FlashingHighlighter : MonoBehaviour
{
    public Highlighter highlighter;
    public Color constantColor = new Color(52.0f / 255.0f, 255.0f / 255.0f, 2.0f / 255.0f, 255.0f / 255.0f);
    public Color hoverColor = new Color(209.0f / 255.0f, 255.0f / 255.0f, 0.0f / 255.0f, 255.0f / 255.0f);



    public void OnHover()
    {
        if (highlighter != null && UIAssemble.Instance.enterModule==1)
        {
            highlighter.Hover(hoverColor);
        }
    }
    public void Show()
    {
        if (highlighter != null)
        {
            highlighter.ConstantOnImmediate(hoverColor);
        }
    }
    public void Hide()
    {
        if (highlighter != null)
        {
            highlighter.ConstantOffImmediate();
        }
    }
}

写在最后:

   相比其他比如 java 、安卓,Unity这边的资料感觉好欠缺,整这个demo的时候,我也是忘了哪里没配好,效果出不来。最后还是耐着性子整理出来,希望能帮到需要的朋友,少踩点坑吧。

 

# 附件

链接:https://pan.baidu.com/s/1_gbTWRvL3Rvf8WMLBxPKCg 
提取码:c47o

  • 17
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值