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、使用方法