Unity ShaderLab特效教程 旋转特效 适用于贴图、sprite和ugui的2d着色器实例 代码+详解注释 【可调节角度和速度的旋转效果】

本文主要是介绍Unity ShaderLab特效教程 旋转特效 适用于贴图、sprite和ugui的2d着色器实例 代码+详解注释 【可调节角度和速度的旋转效果】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如果代码中有什么不清楚请查看以下基础知识

Shader基础知识
unity3d 中 七种坐标知识详解
可调节角度和速度的旋转效果

基本原理就是:先获得当前uv的xy夹角角度,再根据中心点到边缘的距离增加扭曲力度,然后再逆运算取得uv的xy值。

笑狗图

在这里插入图片描述

代码

Shader "Custom/旋转"
{Properties{_MainTex("贴图", 2D) = "white" {}_Angle("旋转角度", Range(-360, 360)) = 0_RotateSpeed("旋转速度", Range(-10, 10)) = 0}SubShader{tags{"Queue" = "Transparent""RenderType" = "Transparent" // 忽略光照"IgnoreProjector" = "True"}//正常透明混合Blend SrcAlpha OneMinusSrcAlphaPass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"//变量声明sampler2D _MainTex;float _RotateSpeed;float _Angle;struct v2f{float4 position:POSITION;float4 uv:TEXCOORD0;};//顶点着色器v2f vert(appdata_base v){v2f o;//物体坐标改为裁剪坐标o.position = UnityObjectToClipPos(v.vertex);o.uv = v.texcoord;return o;}//片段着色器half4 frag(v2f o):COLOR{//uv值的区间是(0,1),所以中心点就是(0.5,0.5)float center = float2(0.5, 0.5);//将uv坐标移到中心float2 uv = o.uv.xy - center;//输入的_Angle值为了方便理解设定为-360-360.  经过转换后的angle值为(-pi * 2) - (pi*2)区间float angle = _Angle * (3.14 * 2 / 360);angle = _RotateSpeed != 0?_RotateSpeed * _Time.y : angle;//矩阵旋转uv = float2(uv.x * cos(angle) - uv.y * sin(angle),uv.x * sin(angle) + uv.y * cos(angle));//还原uv坐标uv += float2(0.5, 0.5);//输出像素值return tex2D(_MainTex , uv);}ENDCG}}
}

这篇关于Unity ShaderLab特效教程 旋转特效 适用于贴图、sprite和ugui的2d着色器实例 代码+详解注释 【可调节角度和速度的旋转效果】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/299672

相关文章

Java中的getBytes()方法使用详解

《Java中的getBytes()方法使用详解》:本文主要介绍Java中getBytes()方法使用的相关资料,getBytes()方法有多个重载形式,可以根据需要指定字符集来进行转换,文中通过代... 目录前言一、常见重载形式二、示例代码三、getBytes(Charset charset)和getByt

Spring框架中@Lazy延迟加载原理和使用详解

《Spring框架中@Lazy延迟加载原理和使用详解》:本文主要介绍Spring框架中@Lazy延迟加载原理和使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、@Lazy延迟加载原理1.延迟加载原理1.1 @Lazy三种配置方法1.2 @Component

python+OpenCV反投影图像的实现示例详解

《python+OpenCV反投影图像的实现示例详解》:本文主要介绍python+OpenCV反投影图像的实现示例详解,本文通过实例代码图文并茂的形式给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前言二、什么是反投影图像三、反投影图像的概念四、反向投影的工作原理一、利用反向投影backproj

使用Python和PaddleOCR实现图文识别的代码和步骤

《使用Python和PaddleOCR实现图文识别的代码和步骤》在当今数字化时代,图文识别技术的应用越来越广泛,如文档数字化、信息提取等,PaddleOCR是百度开源的一款强大的OCR工具包,它集成了... 目录一、引言二、环境准备2.1 安装 python2.2 安装 PaddlePaddle2.3 安装

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

Python中Flask模板的使用与高级技巧详解

《Python中Flask模板的使用与高级技巧详解》在Web开发中,直接将HTML代码写在Python文件中会导致诸多问题,Flask内置了Jinja2模板引擎,完美解决了这些问题,下面我们就来看看F... 目录一、模板渲染基础1.1 为什么需要模板引擎1.2 第一个模板渲染示例1.3 模板渲染原理二、模板

Redis中6种缓存更新策略详解

《Redis中6种缓存更新策略详解》Redis作为一款高性能的内存数据库,已经成为缓存层的首选解决方案,然而,使用缓存时最大的挑战在于保证缓存数据与底层数据源的一致性,本文将介绍Redis中6种缓存更... 目录引言策略一:Cache-Aside(旁路缓存)策略工作原理代码示例优缺点分析适用场景策略二:Re

Flutter实现文字镂空效果的详细步骤

《Flutter实现文字镂空效果的详细步骤》:本文主要介绍如何使用Flutter实现文字镂空效果,包括创建基础应用结构、实现自定义绘制器、构建UI界面以及实现颜色选择按钮等步骤,并详细解析了混合模... 目录引言实现原理开始实现步骤1:创建基础应用结构步骤2:创建主屏幕步骤3:实现自定义绘制器步骤4:构建U

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3