Unity3D实现物体通用的缩放功能(将脚本添加给需要使用的物体即可实现)

1、创建基础的父类控制缩放类型脚本(前提需要导入DoTween或者DoTweenPro插件)

/***
*	Title:"医药自动化" 项目
*		主题:实现通用的物体缩放效果(父类)
*	Description:
*		功能:实现物体的整体缩放、上下压缩展开、左右压缩展开动画效果
*	Date:2017
*	Version:0.1版本
*	Author:Coffee
*	Modify Recoder:
*/

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

namespace Global
{
    public class Global_baseScalePopUp : MonoBehaviour
    {
      
        protected Transform needScaleGameObject;                                //需要缩放的物体  
        protected float scaleMenuSpeed = 0.5F;                                  //缩放的移动速度

        private bool _IsScaleMark = false;                                      //物体缩放的标识  

        protected ScaleType scaleType = ScaleType.None;                         //默认缩放的类型


        public IEnumerator StartJudgeScaleType()
        {
            yield return new WaitForSeconds(Global_Parameter.INTERVAL_TIME_0DOT3);

            switch (scaleType)
            {
                case ScaleType.None:
                    //_NeedScaleGameObject.localScale = new Vector3(1, 1, 1);
                    break;
                case ScaleType.Scale:
                    needScaleGameObject.localScale = new Vector3(0, 0, 0);
                    break;
                case ScaleType.UpAndDown:
                    needScaleGameObject.localScale = new Vector3(1, 0, 1);
                    break;
                case ScaleType.LeftAndRight:
                    needScaleGameObject.localScale = new Vector3(0, 1, 1);
                    break;
                default:
                    break;
            }

        }

        /// <summary>
        /// 放大与缩小弹出菜单
        /// </summary>
        public void ScaleMenu()
        {
            if (needScaleGameObject.gameObject != null)
            {
                if (_IsScaleMark == false)
                {
                    needScaleGameObject.DOScale(new Vector3(1, 1, 1), scaleMenuSpeed);
                    _IsScaleMark = true;

                }
                else
                {
                    needScaleGameObject.DOScale(new Vector3(0, 0, 0), scaleMenuSpeed);
                    _IsScaleMark = false;
                    StartCoroutine("HideGameObject");
                }
            }
            else
            {
                Debug.LogError(GetType() + "/Start()/_NeedScaleGameObject " + needScaleGameObject.gameObject + " 物体不存在请检查!!!");
            }
        }

        /// <summary>
        /// 上下打开弹出菜单
        /// </summary>
        public void UpAndDown()
        {
            if (needScaleGameObject.gameObject != null)
            {
                if (_IsScaleMark == false)
                {
                    needScaleGameObject.DOScale(new Vector3(1, 1, 1), scaleMenuSpeed);
                    _IsScaleMark = true;

                }
                else
                {
                    needScaleGameObject.DOScale(new Vector3(1, 0, 1), scaleMenuSpeed);
                    _IsScaleMark = false;
                    StartCoroutine("HideGameObject");
                }
            }
            else
            {
                Debug.LogError(GetType() + "/Start()/_NeedScaleGameObject " + needScaleGameObject.gameObject + " 物体不存在请检查!!!");
            }

        }

        /// <summary>
        /// 左右打开弹出菜单
        /// </summary>
        public void leftAndRight()
        {
            if (needScaleGameObject.gameObject != null)
            {
                if (_IsScaleMark == false)
                {
                    needScaleGameObject.DOScale(new Vector3(1, 1, 1), scaleMenuSpeed);
                    _IsScaleMark = true;

                }
                else
                {
                    needScaleGameObject.DOScale(new Vector3(0, 1, 1), scaleMenuSpeed);
                    _IsScaleMark = false;
                    StartCoroutine("HideGameObject");
                }
            }
            else
            {
                Debug.LogError(GetType() + "/Start()/_NeedScaleGameObject " + needScaleGameObject.gameObject + " 物体不存在请检查!!!");
            }

        }


        /// <summary>
        /// 隐藏游戏物体
        /// </summary>
        IEnumerator HideGameObject()
        {
            yield return new WaitForSeconds(scaleMenuSpeed);
            needScaleGameObject.gameObject.SetActive(false);
        }

        /// <summary>
        /// 基础面板设置
        /// </summary>
        /// <param name="needScaleGo">需要缩放的物体</param>
        /// <param name="scaleType">物体缩放类型</param>
        /// <param name="scaleSpeed">缩放的速度</param>
        public void BasePanelSettings( GameObject needScaleGo,ScaleType scaleType, float scaleSpeed=0.3F)
        {
            //默认隐藏右侧内容区域
            if (needScaleGo != null)
            {
                needScaleGo.SetActive(false);

                //指定弹出菜单
                needScaleGameObject = needScaleGo.transform;
                //指定需要弹出菜单执行的动画类型
                this.scaleType = scaleType;
                StartCoroutine(StartJudgeScaleType());
                
                //物体缩放的速度
                scaleMenuSpeed = scaleSpeed;

            }
            else
            {
                Log.Write(GetType() + "/BtnOnClickEvent()/使用手册面板中按钮点击对应的面板右侧内容不存在,请检查" + needScaleGo + "物体");
            }
        }



     
    }//class_end
}

2、编写一个具体的需要实现的缩放效果的脚本SinglePanelScale(以整体缩放效果为例)

/***
*	Title:"智慧工厂" 项目
*		主题:全局层:面板的动画效果
*	Description:
*		功能:实现面板的缩放功能
*	Date:2018
*	Version:0.1版本
*	Author:Coffee
*	Modify Recoder:
*/

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

namespace Global
{
	public class SinglePanelScale : Global_baseScalePopUp
    {
        private ScaleType _ScaleType = ScaleType.Scale;                         //缩放类型为Scale
       

 
        /// <summary>
        /// 缩放基础设置
        /// </summary>
        public void BaseSettings()
        {
            //物体基础缩放设置
            base.needScaleGameObject = this.gameObject.transform;
            base.needScaleGameObject.gameObject.SetActive(false);
            base.needScaleGameObject.localScale = new Vector3(0, 0, 0);

        }



        /// <summary>
        /// 开启缩放
        /// </summary>
        public void StartScale()
        {
            this.gameObject.SetActive(true);
            //物体基础缩放设置
            base.ScaleMenu();
        }

       

    }//class_end
}

3、使用方法

 首先将脚本SinglePanelScale添加给需要缩放的物体

然后编写控制该物体缩放的脚本

猜你喜欢

转载自blog.csdn.net/xiaochenXIHUA/article/details/81271305
今日推荐