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添加给需要缩放的物体
然后编写控制该物体缩放的脚本