首页 > 其他分享 >Ease缓动函数封装

Ease缓动函数封装

时间:2023-06-13 17:58:07浏览次数:50  
标签:return EaseType Ease float private 缓动 static 1f 封装

 

什么是Ease缓动函数:

Ease缓动函数是一种常见的动画效果函数,使用Ease缓动函数可以让动画效果看起来更加真实,时而加速时而减速,让动画不至于看上去太过“平凡”

具体的缓动效果可以参考 https://www.xuanfengge.com/easeing/easeing/

算是比较简单的一个功能,就不墨迹了

using UnityEngine;

public static class EaseUtils
{
    public enum EaseType
    {
        Linear,
        InQuad,
        OutQuad,
        InOutQuad,
        InCubic,
        OutCubic,
        InOutCubic,
        InQuart,
        OutQuart,
        InOutQuart,
        InQuint,
        OutQuint,
        InOutQuint,
        InSine,
        OutSine,
        InOutSine,
        InExpo,
        OutExpo,
        InOutExpo,
        InCirc,
        OutCirc,
        InOutCirc
    }

    public static float Ease(float t, EaseType easeType)
    {
        switch (easeType)
        {
            case EaseType.Linear:
                return Linear(t);
            case EaseType.InQuad:
                return InQuad(t);
            case EaseType.OutQuad:
                return OutQuad(t);
            case EaseType.InOutQuad:
                return InOutQuad(t);
            case EaseType.InCubic:
                return InCubic(t);
            case EaseType.OutCubic:
                return OutCubic(t);
            case EaseType.InOutCubic:
                return InOutCubic(t);
            case EaseType.InQuart:
                return InQuart(t);
            case EaseType.OutQuart:
                return OutQuart(t);
            case EaseType.InOutQuart:
                return InOutQuart(t);
            case EaseType.InQuint:
                return InQuint(t);
            case EaseType.OutQuint:
                return OutQuint(t);
            case EaseType.InOutQuint:
                return InOutQuint(t);
            case EaseType.InSine:
                return InSine(t);
            case EaseType.OutSine:
                return OutSine(t);
            case EaseType.InOutSine:
                return InOutSine(t);
            case EaseType.InExpo:
                return InExpo(t);
            case EaseType.OutExpo:
                return OutExpo(t);
            case EaseType.InOutExpo:
                return InOutExpo(t);
            case EaseType.InCirc:
                return InCirc(t);
            case EaseType.OutCirc:
                return OutCirc(t);
            case EaseType.InOutCirc:
                return InOutCirc(t);
        }

        return t; // 默认为Linear类型
    }

    private static float Linear(float t)
    {
        return t;
    }

    private static float InQuad(float t)
    {
        return t * t;
    }

    private static float OutQuad(float t)
    {
        return 1f - (1f - t) * (1f - t);
    }

    private static float InOutQuad(float t)
    {
        if (t < 0.5f)
            return 2f * t * t;
        else
            return 1f - 2f * (1f - t) * (1f - t);
    }

    private static float InCubic(float t)
    {
        return t * t * t;
    }

    private static float OutCubic(float t)
    {
        float f = t - 1f;
        return f * f * f + 1f;
    }

    private static float InOutCubic(float t)
    {
        if (t < 0.5f)
            return 4f * t * t * t;
        else
        {
            float f = 2f * t - 2f;
            return 0.5f * f * f * f + 1f;
        }
    }

    private static float InQuart(float t)
    {
        return t * t * t * t;
    }

    private static float OutQuart(float t)
    {
        float f = t - 1f;
        return 1f - f * f * f * f;
    }

    private static float InOutQuart(float t)
    {
        if (t < 0.5f)
            return 8f * t * t * t * t;
        else
        {
            float f = t - 1f;
            return 1f - 8f * f * f * f * f;
        }
    }

    private static float InQuint(float t)
    {
        return t * t * t * t * t;
    }

    private static float OutQuint(float t)
    {
        float f = t - 1f;
        return 1f + f * f * f * f * f;
    }

    private static float InOutQuint(float t)
    {
        if (t < 0.5f)
            return 16f * t * t * t * t * t;
        else
        {
            float f = 2f * t - 2f;
            return 0.5f * (1f + f * f * f * f * f);
        }
    }

    private static float InSine(float t)
    {
        return 1f - Mathf.Cos(t * Mathf.PI * 0.5f);
    }

    private static float OutSine(float t)
    {
        return Mathf.Sin(t * Mathf.PI * 0.5f);
    }

    private static float InOutSine(float t)
    {
        return 0.5f * (1f - Mathf.Cos(t * Mathf.PI));
    }

    private static float InExpo(float t)
    {
        return t == 0f ? 0f : Mathf.Pow(2f, 10f * (t - 1f));
    }

    private static float OutExpo(float t)
    {
        return t == 1f ? 1f : 1f - Mathf.Pow(2f, -10f * t);
    }

    private static float InOutExpo(float t)
    {
        if (t == 0f || t == 1f)
            return t;
        else if (t < 0.5f)
            return 0.5f * Mathf.Pow(2f, 20f * t - 10f);
        else
            return -0.5f * Mathf.Pow(2f, -20f * t + 10f) + 1f;
    }

    private static float InCirc(float t)
    {
        return 1f - Mathf.Sqrt(1f - t * t);
    }

    private static float OutCirc(float t)
    {
        float f = t - 1f;
        return Mathf.Sqrt(1f - f * f);
    }

    private static float InOutCirc(float t)
    {
        if (t < 0.5f)
            return 0.5f * (1f - Mathf.Sqrt(1f - 4f * t * t));
        else
            return 0.5f * (Mathf.Sqrt(1f - (2f * t - 2f) * (2f * t - 2f)) + 1f);
    }

}

 

标签:return,EaseType,Ease,float,private,缓动,static,1f,封装
From: https://www.cnblogs.com/FoxLibrary/p/17478343.html

相关文章

  • uni-app请求封装
    1.http.js//你的请求地址(线上或线下)exportconstBASE_URL='http://xxx.xxx.xx.xxx:xxxx/'; exportconsthttp=(options)=>{returnnewPromise((resolve,reject)=>{lettoken="",tokenName='';letheader={......
  • java ImageIO处理图像的封装
    评:packagecom.adam.dev.pic.easyImage;importjava.awt.AlphaComposite;importjava.awt.Color;importjava.awt.Font;importjava.awt.Graphics;importjava.awt.Graphics2D;importjava.awt.Point;importjava.awt.Rectangle;importjava.awt.co......
  • 83 封装 在类中设定私有属性 限定传入的参数的范围;当调用时,需要用set方法传参
    类 封装packagecom.fqs.demo061201;publicclassGirl{//属性Stringname;privateintage;//set赋值publicvoidsetAge(inta){if(age>18&&age<50){age=a;}else{System.out.println......
  • react echats封装
    import*asechartsfrom"echarts";import{EChartsOption}from'echarts'functionIndex(props:EChartsOption){constechartsRef:any=useRef<HTMLElement>();useEffect(()=>{constmyChart=echarts.init(echartsRef.cur......
  • 用C++封装的ADO类
    用C++封装的ADO类作者:刘振海.H文件//ADO.h:interfacefortheCADOclass.////#if!defined(AFX_ADO_H__5A466E67_5E04_445D_9CB0_C64650B9AC68__INCLUDED_)#defineAFX_ADO_H__5A466E67_5E04_445D_9CB0_C64650B9AC68__INCLUDED_#if_MSC_VER>1000#pragmaonce......
  • React - 06 初步尝试封装组件
    1.封装dialog组件调用2.函数组件是静态组件/*函数组件是“静态组件”第一次渲染组件,把函数执行+产生一个私有的上下文:EC(V)+把解析出来的props「含children」传递进来「但是被冻结了」+对函数返回的JSX元素「virtualDOM」进行渲染当我们点击按钮的......
  • 使用dbghelp获取调用堆栈--release下的调试方法学
    当软件作为release模式被发布给用户时,当程序崩溃时我们很难去查找原因。常见的手法是输出LOG文件,根据LOG文件分析程序崩溃时的运行情况。我们可以通过SEH来捕获程序错误,然后输出一些有用的信息作为我们分析错误的资料。一般我们需要输出的信息包括:系统信息、CPU寄存器信息、堆栈......
  • 聊聊结合业务需求给出合理的技术解决方案,改进现有模块功能,提高系统的可扩展性,封装性,稳
    针对提高系统的可扩展性、封装性、稳定性,改进现有模块功能,以下是我给出的一些技术解决方案:使用面向对象编程的设计模式:可以采用一些设计模式如单例模式、工厂模式、观察者模式等,来提高系统的可扩展性和封装性。应用微服务架构:可以将系统拆分成多个独立的服务,使得每个服务都可......
  • el-dialog-form组件封装,真的好用,可以让你开发效率提高
    1、新建DialogForm.vue文件<template><divclass="base-dialog"><el-dialog:type="type":custom-class="customClass":close-on-click-modal="closeOnClickModal":visible="vi......
  • vue+elementUI 搜索栏公共组件封装,封装多搜索条件通用组件,超实用
    1、新建BaseSearch.vue文件<!--*名称:弹窗的搜索条件组件*功能:methods1.点击搜索的方法:@search2.搜索条件props:formItemList--><template><divclass="dialog-search"><el-form:inline="true"ref="......