一、pingpong效果

灯光渐变(呼吸灯),位置往复移动,尺寸重复变化…

二、pingpong的原理和用途

PingPong(呼吸)效果脚本:计算出一个值,这个由插值算法生成,值的变化形式为由小到大,再由大到小,循环往复,pingpong的函数,经过抽象包装,插值的代码在update里一行解决,简单易懂。

  • 【算法实现】:关键语句:【Mathf.PingPong(Time.time, time)】,放置在update里面

方式一:插值范围比较大
var lerp = Mathf.PingPong(Time.time, time)
如果time = 2,那么2秒之内,插值系列从0运行到2,然后从2运行到0,Time.time只作为一个时间轴,呼吸的动画在时间轴的切片内循环进行

方式二:插值的范围为[0,1]呼吸时间为time指定的值
var lerp2 = Mathf.PingPong(Time.time, time) / time
如果time = 2,那么2秒之内,插值系列从【0 / 2 = 0】运行到【2 / 2 = 1】,然后从【2 / 2 = 1】 运行到【0 / 2 = 0 】

  • 【使用场景】:
    1、物体(3D物体,2D物体)由大到小变化
    2、颜色渐变
    3、灯光强弱
    4、其它:用该呼吸系数值进行各种操作,比如一个弹簧的拉长和缩短等等

二、脚本配置

三、脚本代码

using System.Collections;
using System.Collections.Generic;
using UnityEngine;/// <summary>
///  PingPong(呼吸)效果脚本:计算出一个值,这个由插值算法生成,值的变化形式为由小到大,再由大到小,循环往复
/// 【算法实现】:关键语句:【Mathf.PingPong(Time.time, time)】,放置在update里面
///
///  方式一:插值范围比较大
///  var lerp = Mathf.PingPong(Time.time, time)
///  如果time = 2,那么2秒之内,插值系列从0运行到2,然后从2运行到0,Time.time只作为一个时间轴,呼吸的动画在时间轴的切片内循环进行
///
///  方式二:插值的范围为[0,1]呼吸时间为time指定的值
///  var lerp2 = Mathf.PingPong(Time.time, time) / time
///  如果time = 2,那么2秒之内,插值系列从【0 / 2 = 0】运行到【2 / 2  = 1】,然后从【2 / 2 = 1】 运行到【0 / 2 = 0 】
///
/// 【使用场景】:
///     1、物体(3D物体,2D物体)由大到小变化
///     2、颜色渐变
///     3、灯光强弱
///     4、其它:用该呼吸系数值进行各种操作,比如一个弹簧的拉长和缩短等等
/// </summary>
public class pingPong : MonoBehaviour
{/// <summary>/// 呼吸开关/// </summary>[Header("呼吸开关")][SerializeField]public bool OnOff;/// <summary>/// 单次渐变的时间【一个完整的周期为一呼一吸,包含两次渐变(小 -> 大,大 -> 小,...)】/// </summary>[Header("单次渐变的时间,单位秒")][SerializeField]public float time;/// <summary>/// 呼吸动画的的物体/// </summary>[Header("缩放的物体")][SerializeField]public GameObject go;[Header("插值的观察窗口")]   public float testValue;/// <summary>/// 原始的scale值/// </summary>private Vector3 startScale;// Start is called before the first frame updatevoid Start(){startScale = go.transform.localScale;}  // Update is called once per framevoid Update(){if(OnOff == true){/*var lerp = Mathf.PingPong(Time.time, time)如果time = 2,那么2秒之内,插值系列从0运行到2,或者从2运行到0,Time.time只作为一个时间轴,呼吸的动画在时间轴的【等分段,用变量time来等分】内循环进行var lerp2 = Mathf.PingPong(Time.time, time) / time如果time = 2,那么2秒之内,插值系列从【0 / 2 = 0】运行到【2 / 2  = 1】,然后从【2 / 2 = 1】 运行到【0 / 2 = 0 】*///测试代码testValue = Mathf.PingPong(Time.time, time) / time;           ChangeScale(go, startScale, testValue);ChangeColor(GoToChangeColor, startColor,endColor,testValue);ChangePosition(GoToChangePos, startPos.transform.position,endPos.transform.position,testValue);}else{// do nothing}}    /*======================以下是测试脚本========================*//// <summary>/// scale渐变动画/// </summary>/// <param name="go"></param>/// <param name="originScale"></param>/// <param name="lerpValue"></param>void ChangeScale(GameObject go,Vector3 originScale,float lerpValue){go.transform.localScale = originScale * lerpValue;}[Header("改颜色的物体")]public GameObject GoToChangeColor;[Header("初始颜色")]public Color startColor;[Header("终止颜色")]public Color endColor;/// <summary>/// 颜色插值渐变动画/// </summary>/// <param name="go">改颜色的物体</param>/// <param name="startColor">初始颜色</param>/// <param name="endColor">终止颜色</param>/// <param name="lerpValue">渐变进度</param>void ChangeColor(GameObject go,Color startColor,Color endColor,float lerpValue){go.GetComponent<Renderer>().materials[0].color = Color.Lerp(startColor, endColor, lerpValue);}[Header("改位置的物体")]public GameObject GoToChangePos;[Header("初始位置")]public GameObject startPos;[Header("结束位置")]public GameObject endPos;/// <summary>/// Vector3向量插值渐变动画/// </summary>/// <param name="go">改位置的物体</param>/// <param name="startPos">初始位置</param>/// <param name="endPos">结束位置</param>/// <param name="lerpValue">位置变换进度</param>void ChangePosition(GameObject go ,Vector3 startPos,Vector3 endPos,float lerpValue){go.transform.position = Vector3.Lerp(startPos, endPos, lerpValue);}
}

Unity中的pingpong效果相关推荐

  1. unity中实现镜子效果

    本文转载自http://blog.csdn.net/zhangxiao13627093203/article/details/52403186 上一篇介绍了有关镜子的制作,有关理论部分的内容我会在后续 ...

  2. 关于Unity中红外线瞄准的效果实现

    今天做一个FPS游戏的时候,由于我做的是第三人称的射击,所以需要一个枪的红外线瞄准的效果. 一开始我在枪上挂一个很细很长的聚光灯,瞄准远处物体的时候,看起来有点红外线的样子,但是靠近之后光线就变成一个 ...

  3. Unity中实现粒子效果显示在UI上

    一:为什么默认模式下粒子效果不能显示在UI上 因为Canvas的默认渲染模式是Screen Space-Overlay,这种模式下的Canvas在屏幕空间中渲染,会显示在场景的最上方,也就是说一切UI ...

  4. Unity中实现激光效果——Unique Lasers Volume插件

    一:效果演示 二:介绍 该插件有两个重要脚本:LaserScript和ParticleSystemController FirePoint:该激光的起点(该点建议放在摄像机下.枪口前等) EndPoi ...

  5. 在Unity中模仿游戏《江南百景图》中物体的出现效果

    在Unity中模仿游戏<江南百景图>中物体的出现效果 1. 效果 1.1. 游戏中的效果 1.2. 在Unity中模仿的效果 2. 思路 3. 实现 3.1. 图片 3.2. shader ...

  6. tilemap 导入unity_教程|Unity中使用Tilemap快速创建2D游戏世界

    Custom Tiles Palette包含瀑布瓦片.如果选中瀑布规则瓦片,也就是Waterfall-RuleTile,可以看到它的导出类型为动画(Animate).这样就可以为每个瓦片指定动画帧. ...

  7. Unity中的布料系统

    0. 前言 项目技术测试结束之后,各种美术效果提升的需求逐渐成为后续开发的重点,角色效果部分的提升目标之一便是在角色选择/展示界面为玩家提供更高的品质感,于是可以提供动态效果的布料系统就作为了技术预研 ...

  8. Unity基础:粒子效果面板

    如何在Unity中实现粒子效果? 首先,右键点击 Hierarchy栏,选择effects->Particle System,这样你就新建了一个粒子系统,如图所示: 下面来介绍右侧监视器(Ins ...

  9. Unity中使用模板测试模拟Mask组件效果

    本文分享Unity中使用模板测试模拟Mask组件效果 在上一篇文章中, 我们分享了模板测试的基础知识, 在今天的分享中, 我们会尝试使用模板测试来模拟遮罩效果. Unity中使用模板测试模拟Mask组 ...

  10. 【游戏开发小技】Unity中实现Dota里的角色技能地面贴花效果(URP | ShaderGraph | Decal)

    本文最终效果 文章目录 一.前言 二.环境准备 1.URP环境准备 2.技能范围图案 二.方案一:写Shader实现 1.Shader脚本:UrpDecal.shader 2.材质球 3.创建Cube ...

最新文章

  1. DeepStream开发日志
  2. 【Windows10下OpenCV 3.4.0 + Visual Studio 2015开发环境的配】
  3. ZJOI2012网络 题解报告【LCT】
  4. python whl_python whl是什么文件
  5. 阿里技术专家都铎:一文搞懂技术债
  6. HTTP Response Splitting攻击探究 转
  7. 小米11 Pro概念图曝光:曲面挖孔屏+后置五摄相机模组
  8. JavaScript文档对象模型document对象获取自定义属性值和设置移除自定义属性(5)
  9. java反射作用与意义
  10. 用Python做一个游戏辅助脚本,完整编程思路分享!
  11. 子目录和子域名哪个好?子目录和子域名如何利用seo优化?
  12. golang-亚马逊s3上传图片文件
  13. DLang、Rust 以及 Golang 对比数据库操作方式
  14. 著名论文 中英文翻译对照
  15. SpringBoot自定义banner,如何定制炫酷的banner提升项目B格?
  16. 十年带队经验,万字长文分享:如何管理好一个程序员团队?
  17. android telephonymanager 电话状态,TelephonyManager类:Android手机及Sim卡状态的获取
  18. 如何卸载干净JAVA
  19. 两寸标准证件照大小是多少?分享两种调整尺寸的方法
  20. LC76 Minimum Window Substring

热门文章

  1. 技术苍穹与平台沃土:华为构筑产业数字化的太极之道
  2. NIOS II入门学习笔记【一】--- NIOS II软核处理器开发入门
  3. iphone测试内存读取速度软件,iPhone7内存不同读写速度有差? 实测差距惊人!
  4. 计算机系新春祝福语,春节的祝福语
  5. 详述快捷支付产品功能及设计要点
  6. phpMyAdmin下载
  7. RNN基本原理以及基于Pytorch实践
  8. 关于Efficient Subgraph Matching by Postponing Cartesian的批注
  9. 【Python】1.基本语法元素
  10. php6简介,[PHP框架] ThinkPHP6 介绍、安装及配置