参考大佬的,链接找不到了,找到了再加在这。

下边是Shader代码:

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'Shader "Personal/PageTurning" {Properties {_Color ("Color", Color) = (1,1,1,1)_MainTex("MainTex",2D)="White"{}_SecTex("SecTex",2D)="White"{}_Angle("Angle",Range(0,180))=0_Warp("Warp",Range(0,10))=0_WarpPos("WarpPos",Range(0,1))=0_Downward("Downward",Range(0,1))=0}SubShader{pass{Cull BackCGPROGRAM#pragma vertex vert #pragma fragment frag #include "UnityCG.cginc"struct v2f {float4 pos : POSITION;float2 uv : TEXCOORD0;};fixed4 _Color;float _Angle;float _Warp;float _Downward;float _WarpPos;sampler2D _MainTex;float4 _MainTex_ST;v2f vert(appdata_base v){v2f o;v.vertex += float4(5,0,0,0);float s;float c;sincos(radians(-_Angle),s,c);float4x4 rotate={         c,s,0,0,-s,c,0,0,0,0,1,0,0,0,0,1};float rangeF=saturate(1 - abs(90-_Angle)/90);v.vertex.y += -_Warp*sin(v.vertex.x*0.4-_WarpPos* v.vertex.x)*rangeF;v.vertex.x -= rangeF * v.vertex.x*_Downward;v.vertex = mul(rotate,v.vertex);v.vertex += float4(-5,0,0,0);o.pos = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);return o;}fixed4 frag(v2f i):COLOR{fixed4 color = tex2D(_MainTex,-i.uv);return _Color * color;}ENDCG}pass{Cull FrontCGPROGRAM#pragma vertex vert #pragma fragment frag #include "UnityCG.cginc"struct v2f {float4 pos : POSITION;float2 uv : TEXCOORD0;};fixed4 _Color;float _Angle;float _Warp;float _Downward;float _WarpPos;sampler2D _SecTex;float4 _MainTex_ST;v2f vert(appdata_base v){v2f o;v.vertex += float4(5,0,0,0);float s;float c;sincos(radians(-_Angle),s,c);float4x4 rotate={          c,s,0,0,-s,c,0,0,0,0,1,0,0,0,0,1};float rangeF=saturate(1 - abs(90-_Angle)/90);v.vertex.y += -_Warp*sin(v.vertex.x*0.4-_WarpPos* v.vertex.x)*rangeF;v.vertex.x -= rangeF * v.vertex.x*_Downward;v.vertex = mul(rotate,v.vertex);v.vertex += float4(-5,0,0,0);o.pos = UnityObjectToClipPos(v.vertex);o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);return o;}fixed4 frag(v2f i):COLOR{float2 uv = i.uv;uv.x = -uv.x;fixed4 color = tex2D(_SecTex,-uv);return _Color * color;}ENDCG}}
}

下面是UI代码:

using System.Collections;
using UnityEngine;
using UnityEngine.UI;public class FanShuUI : UIBase
{private GameObject Plane;private Material m_Material;private Coroutine effect;private Image LeftPage;private Image RightPage;private void Awake(){InitUI();}public override void InitUI(){Plane = GetGameObject("Plane");LeftPage = GetComp<Image>("LeftPage");RightPage = GetComp<Image>("RightPage");Plane.SetActive(false);m_Material = Plane.GetComponent<MeshRenderer>().material;}public void PlayPageTurnEffect(bool isLeft = true){if (!gameObject.activeSelf){return;}if (effect != null){StopCoroutine(effect);}effect = StartCoroutine(FanShuEffect(0.5f, isLeft));}public void ShowRightImage(string right){RightPage.gameObject.SetActive(true);RightPage.sprite = ResourcesMgr.Instance.LoadObj<Sprite>(right);}public void ShowLeftImage(string left){LeftPage.gameObject.SetActive(true);LeftPage.sprite = ResourcesMgr.Instance.LoadObj<Sprite>(left);}private IEnumerator FanShuEffect(float time, bool isLeft){LeftPage.gameObject.SetActive(false);RightPage.gameObject.SetActive(false);Plane.SetActive(true);int angle = (int)(180 * 0.1f);for (int i = 0; i < 10; i++){if (isLeft){m_Material.SetFloat("_Angle", angle * i);}else{m_Material.SetFloat("_Angle", 180 - angle * i);}yield return new WaitForSeconds(time * 0.1f);}if (isLeft){m_Material.SetFloat("_Angle", 180);}else{m_Material.SetFloat("_Angle", 0);}Plane.SetActive(false);OnEffectOver();}private void OnEffectOver(){//--callback}
}

左右两页纸可以在翻书结束动态加载图片。

下边是Plane的面板信息:

Unity3D UGUI 实现翻书特效相关推荐

  1. Unity3D UGUI实现翻书效果

    提示:素材来源网络,侵权必删 UI翻书效果 效果图 一.准备工作 1.新建Unity工程 2.新建Hierarchy面板 二.使用步骤 1.新建UIBook脚本,挂在UIBook上 2.新建BookM ...

  2. HTML自动换页相册,html版电子相册翻书特效

    [实例简介] js/css 实现html版电子相册翻书特效 比较实惠好用 [实例截图] [核心代码] html版电子相册翻书特效 └── xun └── 1000寻素材网 ├── 001.jpg ├─ ...

  3. 【原创】jQuery插件 - Booklet翻书特效教程(一) 一般设置

    jQuery插件 - Booklet翻书特效教程(一) 一般设置 本文由五月雨恋提供,转载请注明出处. 一.宽高(width/height) 1.自定义大小 $(function(){ // 自定义页 ...

  4. 原生JS实现拖拽翻书特效

    给大家分享一个用原生JS实现的拖拽翻书效果图,效果如下: 效果还不错吧,当然还需要两个图片. 1.书本封面. 2.书页 实现代码如下,欢迎大家复制粘贴. <!DOCTYPE html> & ...

  5. 原生JS实现翻书特效

    给大家分享一个用原生JS实现的翻书效果图,效果如下: 实现代码如下,欢迎大家复制粘贴. <!doctype html> <html><head><meta c ...

  6. html动画翻书特效,css3 做一个类似于翻书特效的3D动画

    我们来看下做一个css3 3D动画需要哪些东西.前面我们已经使用transition和transform做了一些简单的操作. 设置3D场景 做3D动画,我们首先要设置3D场景.3D场景我们通常用per ...

  7. Unity3d中实现翻书效果(一)

    转自 GottaYiWanLiu 1.如何快速的在unity3d实现与现实中翻书类似的翻书动作,在这里借助一个插件,可以在unity3d中assetStore里找到 我们首先来看下效果,这是我们自定义 ...

  8. Unity3d:UGUI,UI与特效粒子层级,2018.2以上版本BakeMesh,粒子在两个Image之间且在ScrollView

    ui上面展示粒子一般来说有两种方案 1.通过rendertexture渲染,可以完美处理层级问题,不过性能不好,多个摄像机 2.直接放到ui界面调整特效sort in layer,不过如果ui特效穿插 ...

  9. 【翻书特效 源代码---JS实现,附效果】

    效果 效果比较简单,是在浏览器运行实现的. 源代码 至于具体的图片,大家可以根据需求自行添加即可~ 下面是源代码. <html xmlns="http://www.w3.org/199 ...

最新文章

  1. ESXi6.5环境搭建(一:VMware Workstations 12 Pro 环境的安装及配置)
  2. 利用java反射机制进行对象操作
  3. Expanded, SingleChildScrollView, CustomScrollView, container, height, width
  4. Pycharm的项目文件名是红色的原因及解决办法
  5. 二分查找树性能分析(Binary Search Tree Performance Analysis)
  6. 操作系统(三十三)内存管理
  7. Android 图形架构
  8. Matlab的数组的小知识和方法
  9. Django基础11(Django中form表单)
  10. leetcode哈希表(python与c++)
  11. java重定向代码_Java程序员经典面试题集大全 (三十四)
  12. 贾跃亭成了,FF 91预量产车下线完成
  13. 计算点在哪些四边形内
  14. 关于把类放到结构体中
  15. 计算机表格计算公式加法,加法公式excel,excel表格如何用公式计算加减乘除混合运算?...
  16. 转载 java基础题(面试必知)
  17. 威纶通触摸屏与温控器进行MODBUS通信并通过宏指令将数据发送给PLC的具体方法
  18. guitar pro8.1免费的吉他学习辅助软件
  19. 一文搞懂什么是图神经网络GNN【入门教程】
  20. MATLAB---约束最小平方滤波

热门文章

  1. 深度学习(入门)——逻辑回归模型(Logistics Regression)
  2. django项目技术点概述(后期可能更新)
  3. JAVA中DNS缓存设置
  4. 江浙沪地区计算机考研高效排名,南京这五所双非大学,就业容易超末流985,江浙沪认可度较高...
  5. redis学习笔记(7)之redis哨兵详解
  6. 【51单片机】实用代码 第一周,点亮LED
  7. Hadoop2 7 1 集群部署及自动化脚本
  8. LOG斑点检测(附matlab代码)
  9. ringbuffer到底是什么
  10. PowerDesigner的表设计中的P F M分别代表什么?