Unity实现鼠标点击按钮图标移动到指定位置,在点击一次则图标返回到原来位置功能

1、通用的脚本方法如下(注意:需要导入DoTween或者DoTweenPro插件)

/***
*	Title:"智慧工厂" 项目
*		主题:视图层:按钮图标的控制
*	Description:
*		功能:
*		    1、实现点击按钮则按钮对应的图标移动到指定位置且放大
*		    2、显示对应的按钮所对应面板
*	Date:2018
*	Version:0.1版本
*	Author:Coffee
*	Modify Recoder:
*/

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using DG.Tweening;

namespace Global
{
    /// <summary>
    /// 动画的缩放枚举
    /// </summary>
    public enum AnimationScaleType
    {
        None,               //空
        Extand,             //放大
        Original,           //还原
        Less,               //缩小
    }

	public class MachineIconMove : MonoBehaviour
	{
        private bool _IsMoveMark = false;                                       //物体移动或返回指定位置的标识
        public float  MoveSpeed = 0.5F;                                         //移动速度
        public float extandSize = 2F;                                           //扩展尺寸
        private float originalSize = 1F;                                        //还原的尺寸(必须=1)
        public float lessSize = 0.8F;                                           //缩小的尺寸
        public float moveX=0;                                                   //物体移动到的X轴位置
        public float moveY=-90F;                                                //物体移动到的Y轴位置
       

        //动画参数
        Sequence seq;
        Tween t1,t2,t3;



        //private void Update()
        //{
        //    if (Input.GetKeyDown(KeyCode.A))
        //    {


        //        MoveAndExtandObject();

        //    }
        //    if (Input.GetKeyDown(KeyCode.B))
        //    {


        //        MoveAndRestoreObject();

        //    }

        //    if (Input.GetKeyDown(KeyCode.C))
        //    {


        //        MoveAndLessObject();

        //    }

        //}

        /// <summary>
        /// 移动且放大物体
        /// </summary>
        public void MoveAndExtandObject()
        {
            MoveAndReduce(AnimationScaleType.Extand);
        }

        /// <summary>
        /// 移动且还原物体到起始位置
        /// </summary>
        public void MoveAndRestoreObject()
        {
            MoveAndReduce(AnimationScaleType.Original);
        }

        /// <summary>
        /// 移动且还缩小物体
        /// </summary>
        public void MoveAndLessObject()
        {
            MoveAndReduce(AnimationScaleType.Less);
        }


        #region   私有方法

        /// <summary>
        ///  移动与恢复左侧菜单栏的位置
        /// </summary>
        /// <param name="animationScaleType">动画缩放类型</param>
        private void MoveAndReduce(AnimationScaleType animationScaleType)
        {
            ScaleSettings(animationScaleType);
            if (_IsMoveMark == false)
            {
                this.gameObject.transform.DOPlayForward();

                _IsMoveMark = true;

            }
            else
            {
                this.gameObject.transform.DOPlayBackwards();
                
                _IsMoveMark = false;

            }
        }


        /// <summary>
        /// 物体的缩放设置
        /// </summary>
        /// <param name="animationScaleType">动画缩放类型</param>
        private void ScaleSettings(AnimationScaleType animationScaleType)
        {
            //将控制物体1从当前位置移动到指定位置  
            Tweener tweener = this.gameObject.transform.DOLocalMove(new Vector3(moveX,moveY,0), MoveSpeed);

            //设置动画曲线  
            tweener.SetEase(Ease.InOutQuad);

            //设置动画结束事件  
            switch (animationScaleType)
            {
                case AnimationScaleType.None:
                    break;
                case AnimationScaleType.Extand:
                    //开始放大
                    StartExtand();
                    break;
                case AnimationScaleType.Original:
                    //开始还原
                    StartOriginal();
                    break;
                case AnimationScaleType.Less:
                    //开始缩小
                    Startless();
                    break;
                default:
                    break;
            }

            //设置动画的自动销毁为False  
            tweener.SetAutoKill(false);

            //设置动画暂停  
            tweener.Pause();

        }


        /// <summary>
        /// 开始放大动画效果
        /// </summary>
        private void StartExtand()
        {
            if (extandSize > 1)
            {
                seq = DOTween.Sequence();
                t1 = this.gameObject.transform.DOScale(Vector3.one * extandSize, MoveSpeed);
                seq.Append(t1);
            }
        }

        /// <summary>
        /// 开始还原的动画效果
        /// </summary>
        private void StartOriginal()
        {
            if (originalSize == 1)
            {
                seq = DOTween.Sequence();
                t2 = this.gameObject.transform.DOScale(Vector3.one, MoveSpeed);
                seq.Append(t2);
            }
        }

        /// <summary>
        /// 开始缩小的动画效果
        /// </summary>
        private void Startless()
        {
            if (lessSize < 1 && lessSize > 0)
            {
                seq = DOTween.Sequence();
                t3 = this.gameObject.transform.DOScale(Vector3.one * lessSize, MoveSpeed);
                seq.Append(t3);
            }
        }


        #endregion

    }//class_end
}

2、使用方法

猜你喜欢

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