Unity实现通用的鼠标移动到图标那里图标放大,鼠标移开图标缩小功能

1、按钮图标格式如下

2、对应的控制代码如下

基础脚本

/***
*	Title:"智慧工厂" 项目
*		主题:视图层:基础主菜单按钮效果方法
*	Description:
*		功能:
*		    1、实现通用的鼠标移动到按钮机器对应图标显示特效及其按钮点击事件功能
*	Date:2018
*	Version:0.1版本
*	Author:Coffee
*	Modify Recoder:
*/

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System;
using Global;
using kernal;
using System.IO;
using Control;
using DG.Tweening;

namespace View
{
	public class BaseMainMenuBtnEffect : MonoBehaviour
	{
        protected Button btn_Icon;                                              //主菜单的图标按钮
        protected Image img_Effect;                                             //特效图片
        private Sprite _SpIcon;                                                 //加载的精灵图片资源
        private Text text;                                                      //按钮文本
        private Transform icon;                                                 //主菜单的图标按钮中间的图标
        private List<Transform> childs;                                         //主菜单的图标按钮的子物体集合
        private string _Icon_Path = "Textures/MainMenu/Modify02/";
        private string _OriginalIcon = "按钮";
        private string _SelectedIcon = "按钮选中";

        //动画
        Sequence seq;
        Tween t1, t2;

        protected void EffectStart()
        {
            //按钮显示文本
            text = this.gameObject.GetComponentInChildren<Text>();
            //获取到按钮上的Image组件
            Image btn_Image = this.gameObject.GetComponent<Image>();
            //获取到文本原来的颜色
            Global_TxtMgr.GetInstance().textOriginalColor = text.color;



            //默认隐藏特效图片
            img_Effect.gameObject.SetActive(false);
            LoadResource.SelectBtnDisplaySplit(this.gameObject, _Icon_Path + _OriginalIcon);

            this.gameObject.GetComponent<Button>().onClick.AddListener(delegate ()
            {
                if (text != null)
                {
                    //按钮点击事件
                    BtnOnClickEvent();
                }

            });
            //Debug.Log("基础特效");
            //Debug.Log("btn_Icon=" + btn_Icon);
            //Debug.Log("img_Effect=" + img_Effect);
        }


        /// <summary>
        /// 注册相关按钮
        /// </summary>
        public void ResigterBtn()
        {
            if (btn_Icon != null)
            {
                EventTriggerListener.Get(btn_Icon.gameObject).onEnter += Btn_IntelligentFactoryIcon_OnEnterMethod;
                EventTriggerListener.Get(btn_Icon.gameObject).onClick += Btn_IntelligentFactoryIcon_OnClickMethod;
                EventTriggerListener.Get(btn_Icon.gameObject).onExit += Btn_IntelligentFactoryIcon_OnExitMethod;
            }
            if (this.gameObject!=null)
            {
                EventTriggerListener.Get(this.gameObject).onEnter += Btn_IntelligentFactoryIcon_OnEnterMethod;
                EventTriggerListener.Get(this.gameObject).onClick += Btn_IntelligentFactoryIcon_OnClickMethod;
                EventTriggerListener.Get(this.gameObject).onExit += Btn_IntelligentFactoryIcon_OnExitMethod;
            }


        }


        /// <summary>
        /// 移入主菜单图标按钮方法
        /// </summary>
        private void Btn_IntelligentFactoryIcon_OnEnterMethod(GameObject go)
        {
            if (go = btn_Icon.gameObject)
            {
                //移入按钮事件
                BtnEnterEvetn();
                //Debug.Log("移入按钮");
               
            }
        }

        /// <summary>
        /// 主菜单图标按钮点击方法
        /// </summary>
        private  void Btn_IntelligentFactoryIcon_OnClickMethod(GameObject go)
        {
            if (go = btn_Icon.gameObject)
            {
                //按钮点击事件
                BtnOnClickEvent();
                //Debug.Log("点击按钮");
            }
        }

        /// <summary>
        /// 主菜单图标按钮退出方法
        /// </summary>
        private void Btn_IntelligentFactoryIcon_OnExitMethod(GameObject go)
        {
            if (go = btn_Icon.gameObject)
            {
                //按钮退出事件
                BtnOnExitEvent();
                //Debug.Log("退出按钮");
            }
        }


        #region   按钮事件
        /// <summary>
        /// 移入按钮事件
        /// </summary>
        public virtual void BtnEnterEvetn()
        {
            ////显示特效图片
            //img_Effect.gameObject.SetActive(true);
            //改变文本颜色
            Global_TxtMgr.GetInstance().ChangeTextColor(text, 0, 0, 0);
            //改变按钮图标
            LoadResource.SelectBtnDisplaySplit(this.gameObject, _Icon_Path + _SelectedIcon);
            //播放鼠标进入的音效
            Ctrl_MainMenuAudios.Instance.PlayMouseEnterAudios();

            //获取到主菜单的图标按钮的子物体集合
            GetChilds();
            icon = childs[1];
            //播放主菜单的图标按钮的中间图标放大1.7倍
            SetIconAnimation(1.7F,0);
           
        }

        /// <summary>
        /// 按钮点击事件
        /// </summary>
        public virtual void BtnOnClickEvent()
        {
            //播放鼠标点击的音效
            Ctrl_MainMenuAudios.Instance.PlayMouseOnClickAudios();
            //转到主菜单场景
            StartCoroutine(SwitchToNextScenesIcon(ScenesEnum.MainMenuScenes));
          
        }

        /// <summary>
        /// 按钮退出事件
        /// </summary>
        public virtual void BtnOnExitEvent()
        {
            ////隐藏特效图片
            //img_Effect.gameObject.SetActive(false);
            //还原文本颜色
            Global_TxtMgr.GetInstance().RestoreOriginalColor(text);
            //还原按钮图标
            LoadResource.SelectBtnDisplaySplit(this.gameObject, _Icon_Path + _OriginalIcon);

            //缩小播放主菜单的图标按钮的中间图标为原来大小
            SetIconAnimation(1,1);
            seq.Kill();

            
        }

        #endregion


       
        /// <summary>
        /// 转到下一场景
        /// </summary>
        protected IEnumerator SwitchToNextScenesIcon(ScenesEnum scenesEnum)
        {
            if (scenesEnum!=ScenesEnum.MainMenuScenes)
            {
                yield return new WaitForSeconds(Global_Parameter.INTERVAL_TIEM_0DOT1);

                GlobalParaMgr.NextScenesName = scenesEnum;
                SceneManager.LoadScene(ConvertEnumToString.GetInstance().GetStrByEnumScenes(ScenesEnum.LoadingScenes));
                //退出事件
                BtnOnExitEvent();
            }
           
        }


        /// <summary>
        /// 获取到主菜单的图标按钮中间的图标
        /// </summary>
        private void GetChilds()
        {
            childs = new List<Transform>();

            if (btn_Icon!=null)
            {
                int childCount=btn_Icon.gameObject.transform.childCount;

                foreach (Transform child in btn_Icon.gameObject.transform)
                {
                    childs.Add(child);
                }
            }
        }


        /// <summary>
        /// 设置获取到主菜单的图标按钮中间的图标的放大缩小动画效果
        /// </summary>
        /// <param name="extandSize">放大尺寸(>1)</param>
        /// <param name="lessSize">缩小到原来尺寸(==1)</param>
        private void SetIconAnimation(float extandSize,float lessSize)
        {
            if (extandSize>1)
            {
                seq = DOTween.Sequence();
                t1 = icon.DOScale(Vector3.one * extandSize, 0.8f);
                seq.Append(t1);
            }
            if (lessSize==1)
            {
                t2 = icon.DOScale(Vector3.one*1f,0.8f);
                seq.Append(t2);
            }
            seq.SetLoops(0);
        }

    }//class_end
}

具体的按钮控制脚本

/***
*	Title:"智慧工厂" 项目
*		主题:视图层:3D智慧工厂模块
*	Description:
*		功能:
*		    1、点击该模块就转到对应的3D智慧工厂模块界面
*	Date:2018
*	Version:0.1版本
*	Author:Coffee
*	Modify Recoder:
*/

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Global;
using kernal;
using Control;


namespace View
{
	public class View_3DIntelligentFactory : BaseMainMenuBtnEffect
	{
        public Button Btn_3DIntelligentFactoryIcon;                             //智慧3D工厂的图标按钮
        public Image image_Effect;                                              //特效图片
        



        private void Start()
        {
            base.btn_Icon = Btn_3DIntelligentFactoryIcon;
            base.img_Effect = image_Effect;
            base.EffectStart();
            //注册相关按钮
            base.ResigterBtn();

        }

        /// <summary>
        /// 重写按钮点击事件
        /// </summary>
        public override void BtnOnClickEvent()
        {
            //播放鼠标点击的音效
            Ctrl_MainMenuAudios.Instance.PlayMouseOnClickAudios();
            //转到3D智慧工厂
            StartCoroutine(SwitchToNextScenesIcon(ScenesEnum.Intelligent3DFactoryScenes));
           
        }

       


    }//class_end
}

3、将具体控制脚本添加给按钮,如下所示

猜你喜欢

转载自blog.csdn.net/xiaochenXIHUA/article/details/81272872