Unity实现游戏里鼠标悬停在物体处显示UI提示(介绍、名称等信息)的一种方法(可配置的xml文件形式)

Unity实现鼠标悬停物体处显示UI提示

思路

这里主要是通过xml文件的形式保存物体的信息,再编写代码去解析这些个物体的信息,如xml中的一个节点MouseOver节点保存了一个物体的路径和物体的名称,那么解析的时候我们就可以通过GameObject.Find()方法找到这个物体,并给它添加鼠标事件,当鼠标悬停在物体处时,触发鼠标事件函数,就可以显示该物体的名称了,这里使用到了Unity中三个鼠标事件函数:OnMouseEnter()、OnMouseOver()和OnMouseExit()。

搭建demo场景和配置xml文件

在这里插入图片描述
添加一张Image作为底图,并添加一个Text文本作为子物体用来显示物体的信息的。Image初始时设置为隐藏,即在Inspector取消勾选;GameObject下存放三个物体,必须要添加碰撞体,可视物体情况选择添加不同的碰撞体,否则无法触发鼠标事件!

xml文件节点格式如下:
在这里插入图片描述
Path鼠标表示该物体在Hierarchy上的路径,InnerText表示该物体名称。

脚本实现

ModelEventListen脚本:

using UnityEngine;
using System;
public class ModelEventListen : MonoBehaviour
{
    //鼠标事件的委托
    public Action<GameObject> onEnter;
    public Action<GameObject> onOver;
    public Action<GameObject> onExit;
    /// <summary>
    /// 鼠标停留
    /// </summary>
    public void OnMouseOver()
    {
        if (onOver!=null)
        {
            onOver(gameObject);
        }
    }
    /// <summary>
    /// 鼠标停留
    /// </summary>
    public void OnMouseEnter()
    {
        if (onEnter!=null)
        {
            onEnter(gameObject);
        }
    }
    /// <summary>
    /// 鼠标移出
    /// </summary>
    public void OnMouseExit()
    {
        if (onExit!=null)
        {
            onExit(gameObject);
        }
    }
    /// <summary>
    /// Get方法,给物体添加鼠标监听的脚本
    /// </summary>
    /// <param name="obj"></param>
    /// <returns></returns>
    public static ModelEventListen Get(GameObject obj)
    {
        if (obj == null) return null;
        ModelEventListen listener = obj.GetComponent<ModelEventListen>();
        if (listener==null)
        {
            listener = obj.AddComponent<ModelEventListen>();
        }
        return listener;
    }

}

Panel_MouseOver脚本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Xml;
using UnityEngine.UI;
public class Panel_MouseOver : MonoBehaviour
{
    static Transform showImg;//显示的UI底图

    private void Start()
    {
        showImg = transform.Find("Image");
        string filePath = "file://"+Application.dataPath + "/XML/MouseOver.xml";//xml文件路径
        StartCoroutine(LoadingXml(filePath));
    }
    IEnumerator LoadingXml(string path)
    {
        yield return null;
        using (WWW www=new WWW(path))
        {
            yield return www;
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(www.text);
            for (int i = 0; i < doc.FirstChild.ChildNodes.Count; i++)
            {
                new MouseOver(doc.FirstChild.ChildNodes[i]);//遍历为每个节点的物体添加鼠标事件
            }
        }
    }
    public class MouseOver
    {
        private string showText;

        public MouseOver(XmlNode node)
        {
            GameObject obj = GameObject.Find(node.Attributes["Path"].InnerText);
            if (obj != null)
            {
                //为物体添加鼠标监听函数的脚本,并注册回调函数
                ModelEventListen.Get(obj).onEnter = OnEnter;
                ModelEventListen.Get(obj).onOver = OnOver;
                ModelEventListen.Get(obj).onExit = OnExit;
            }
            showText = node.InnerText;
        }
        //鼠标进入事件
        private void OnEnter(GameObject obj)
        {
            //判断是否点击到UI上,点击到UI返回
            if (UnityEngine.EventSystems.EventSystem.current.IsPointerOverGameObject()) return;
            showImg.gameObject.SetActive(true);//显示UI提示框
            showImg.GetComponentInChildren<Text>().text = showText;//更新UI上显示的内容为当前物体的信息
        }
        //鼠标悬停事件
        private void OnOver(GameObject obj)
        {
            //更新UI的位置,并让它等于鼠标的位置加上一个Y轴上的偏移
            showImg.transform.position = Input.mousePosition+ new Vector3(0,100,0);
            showImg.GetComponentInChildren<Text>().text = showText;
        }
        //鼠标移出事件
        private void OnExit(GameObject obj)
        {
            showImg.gameObject.SetActive(false);
        }
    }
}

将该脚本挂载到Panel_MouseOver物体上。

效果演示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

### 回答1: 易语言是一种易于学习的编程语言,适合初学者和想要制作简单软件的人使用。最近,一份炫酷科幻 UI 界面源码在易语言社区中出现并受到用户的热烈欢迎。 这个界面源码设计新颖,配色鲜艳,具有强烈的科幻感。整个界面呈现出3D空间的感觉,透过无数绚丽的图形和亮点,呈现出完美的界面效果。其中,UI 界面主要分为左侧菜单栏和右侧显示窗口,菜单栏可自由拖拽和切换,界面切换流畅自然,操作便捷。 此源码采用了易语言的高级功能以及自制控件,并结合了一些 Python 脚本。在代码设计上非常精妙,易于理解和修改。同时,作者还分享了一些制作界面的技巧和经验,有助于提升易语言编程水平。 总体而言,这份易语言炫酷科幻 UI 界面源码提供了一个非常好的学习和实践机会。无论是对初学易语言的用户,还是对 SCI-FI 界面设计感兴趣的人都会受益匪浅。值得一提的是,这个界面源码可以自由下载和修改,并可以用于个人和商业用途,所以对于开发者来说也是一个非常强大和实用的工具。 ### 回答2: 易语言是一种具有高度可视化、易学易用的编程语言,可以用于制作各种软件界面。最近我们发现了一个炫酷科幻UI界面的源码,使用易语言编写,让软件界面更加美观、实用。 这个界面采用了黑色为主题,突出了科技感。整个界面分为多个模块,包括左侧的导航菜单、中间的内容区域、以及底部的状态栏等。导航菜单采用了一种简洁的设计语言,鼠标悬停时会有特效,提高了交互体验。内容区域中有多个标签页,用户可以通过点击标签页切换页面。标签页的样式也非常炫酷,采用了半透明的效果。 整个界面的交互效果相当出色,例如关闭标签页时会有平滑的动画效果,提示框也具有一定的设计感。另外,该界面的自适应功能也很不错,不论是在1920×1080分辨率的大屏幕上,还是在1024×768分辨率的小屏幕上,都能够自动适应,不会影响用户体验。 总的来说,这个炫酷科幻UI界面源码基于易语言编写,能够为你的软件增加更多美观、实用的特效,让用户的体验更加完美。如果你是一个易语言开发者,或者对界面设计感兴趣,不妨一试。 ### 回答3: 易语言炫酷科幻UI界面源码是一种可以让程序员在开发软件时使用的一种技术。这种技术可以使软件的界面更加美观和炫酷,增加软件的用户体验。为了实现这种效果,程序员需要学习易语言中的UI编程技术和熟悉常用的软件UI设计工具。 在使用易语言炫酷科幻UI界面源码时,程序员可以自定义软件的界面颜色、字体、样式和大小等,从而使软件界面更加个性化和符合用户的喜好。此外,该技术还具有界面动画效果、多种控件和布局方式等特点,可以使软件界面更加生动、立体和清晰,提升用户的视觉体验。 总之,易语言炫酷科幻UI界面源码是一种很有前途的技术,它可以大大提升软件的用户体验和品质,拓宽程序员的技术视野,也为软件开发人员提供更多的创作灵感和可能性。然而,程序员也需要不断学习和掌握相关技术,为软件的开发和市场营销做好准备。
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周周的Unity小屋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值