Unity3D UGUI 实现翻书特效
参考大佬的,链接找不到了,找到了再加在这。
下边是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 实现翻书特效相关推荐
- Unity3D UGUI实现翻书效果
提示:素材来源网络,侵权必删 UI翻书效果 效果图 一.准备工作 1.新建Unity工程 2.新建Hierarchy面板 二.使用步骤 1.新建UIBook脚本,挂在UIBook上 2.新建BookM ...
- HTML自动换页相册,html版电子相册翻书特效
[实例简介] js/css 实现html版电子相册翻书特效 比较实惠好用 [实例截图] [核心代码] html版电子相册翻书特效 └── xun └── 1000寻素材网 ├── 001.jpg ├─ ...
- 【原创】jQuery插件 - Booklet翻书特效教程(一) 一般设置
jQuery插件 - Booklet翻书特效教程(一) 一般设置 本文由五月雨恋提供,转载请注明出处. 一.宽高(width/height) 1.自定义大小 $(function(){ // 自定义页 ...
- 原生JS实现拖拽翻书特效
给大家分享一个用原生JS实现的拖拽翻书效果图,效果如下: 效果还不错吧,当然还需要两个图片. 1.书本封面. 2.书页 实现代码如下,欢迎大家复制粘贴. <!DOCTYPE html> & ...
- 原生JS实现翻书特效
给大家分享一个用原生JS实现的翻书效果图,效果如下: 实现代码如下,欢迎大家复制粘贴. <!doctype html> <html><head><meta c ...
- html动画翻书特效,css3 做一个类似于翻书特效的3D动画
我们来看下做一个css3 3D动画需要哪些东西.前面我们已经使用transition和transform做了一些简单的操作. 设置3D场景 做3D动画,我们首先要设置3D场景.3D场景我们通常用per ...
- Unity3d中实现翻书效果(一)
转自 GottaYiWanLiu 1.如何快速的在unity3d实现与现实中翻书类似的翻书动作,在这里借助一个插件,可以在unity3d中assetStore里找到 我们首先来看下效果,这是我们自定义 ...
- Unity3d:UGUI,UI与特效粒子层级,2018.2以上版本BakeMesh,粒子在两个Image之间且在ScrollView
ui上面展示粒子一般来说有两种方案 1.通过rendertexture渲染,可以完美处理层级问题,不过性能不好,多个摄像机 2.直接放到ui界面调整特效sort in layer,不过如果ui特效穿插 ...
- 【翻书特效 源代码---JS实现,附效果】
效果 效果比较简单,是在浏览器运行实现的. 源代码 至于具体的图片,大家可以根据需求自行添加即可~ 下面是源代码. <html xmlns="http://www.w3.org/199 ...
最新文章
- ESXi6.5环境搭建(一:VMware Workstations 12 Pro 环境的安装及配置)
- 利用java反射机制进行对象操作
- Expanded, SingleChildScrollView, CustomScrollView, container, height, width
- Pycharm的项目文件名是红色的原因及解决办法
- 二分查找树性能分析(Binary Search Tree Performance Analysis)
- 操作系统(三十三)内存管理
- Android 图形架构
- Matlab的数组的小知识和方法
- Django基础11(Django中form表单)
- leetcode哈希表(python与c++)
- java重定向代码_Java程序员经典面试题集大全 (三十四)
- 贾跃亭成了,FF 91预量产车下线完成
- 计算点在哪些四边形内
- 关于把类放到结构体中
- 计算机表格计算公式加法,加法公式excel,excel表格如何用公式计算加减乘除混合运算?...
- 转载 java基础题(面试必知)
- 威纶通触摸屏与温控器进行MODBUS通信并通过宏指令将数据发送给PLC的具体方法
- guitar pro8.1免费的吉他学习辅助软件
- 一文搞懂什么是图神经网络GNN【入门教程】
- MATLAB---约束最小平方滤波
热门文章
- 深度学习(入门)——逻辑回归模型(Logistics Regression)
- django项目技术点概述(后期可能更新)
- JAVA中DNS缓存设置
- 江浙沪地区计算机考研高效排名,南京这五所双非大学,就业容易超末流985,江浙沪认可度较高...
- redis学习笔记(7)之redis哨兵详解
- 【51单片机】实用代码 第一周,点亮LED
- Hadoop2 7 1 集群部署及自动化脚本
- LOG斑点检测(附matlab代码)
- ringbuffer到底是什么
- PowerDesigner的表设计中的P F M分别代表什么?