Unity shader實(shí)現(xiàn)自由放大縮小效果
本文實(shí)例為大家分享了Unity shader實(shí)現(xiàn)自由放大縮小效果的具體代碼,供大家參考,具體內(nèi)容如下

代碼:
以下實(shí)現(xiàn)的shader代碼:
Shader "Hidden/Wave"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_WaveWidth("Wave Width",float) = 0.5
_CenterX("CenterX",float)=0.5
_CenterY("CenterY",float)=0.5
}
SubShader
{
// No culling or depth
Cull Off ZWrite Off ZTest Always
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
float _WaveWidth;
float _CenterX;
float _CenterY;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
sampler2D _MainTex;
fixed4 frag (v2f i) : SV_Target
{
float2 center=float2(_CenterX,_CenterY);
float2 distance= center - i.uv;
float x=center.x+ center.x*(-distance.x/center.x) *(1-_WaveWidth);
float y=center.y+ center.y*(-distance.y/center.y) *(1-_WaveWidth);
float2 uv = float2(x,y);
return tex2D(_MainTex, uv);
}
ENDCG
}
}
}
主要的內(nèi)容還是在frag中。
下面是掛在攝像機(jī)上的腳本:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WaveCreame : MonoBehaviour {
public Shader waveShader = null;
[Range(0.0f,1f)]
public float waveWidth = 0.3f;
private Material m_WaveMaterial = null;
private float m_CenterX = 0.5f;
private float m_CtenterY = 0.5f;
// Use this for initialization
void Start () {
m_WaveMaterial = new Material(waveShader);
}
// Update is called once per frame
void Update () {
Vector3 pos = Input.mousePosition;
m_CenterX = pos.x / Screen.width;
m_CtenterY = pos.y / Screen.height;
if (Input.GetMouseButton(0)) {
waveWidth += Time.deltaTime * 0.5f;
}
if (Input.GetMouseButton(1))
{
waveWidth -= Time.deltaTime * 0.5f;
}
}
private void OnRenderImage(RenderTexture source, RenderTexture destination)
{
if (waveShader == null || m_WaveMaterial == null) return;
m_WaveMaterial.SetFloat("_WaveWidth", waveWidth);
m_WaveMaterial.SetFloat("_CenterX", m_CenterX);
m_WaveMaterial.SetFloat("_CenterY", m_CtenterY);
Graphics.Blit(source, destination, m_WaveMaterial);
}
}
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Unity shader實(shí)現(xiàn)消融效果
- Unity Shader實(shí)現(xiàn)序列幀動(dòng)畫(huà)效果
- Unity3D中shader 輪廓描邊效果實(shí)現(xiàn)代碼
- unity shader實(shí)現(xiàn)玻璃折射效果
- Unity Shader實(shí)現(xiàn)玻璃材質(zhì)效果
- Unity Shader實(shí)現(xiàn)新手引導(dǎo)遮罩鏤空效果
- Unity Shader實(shí)現(xiàn)描邊OutLine效果
- Unity3D Shader實(shí)現(xiàn)貼圖切換效果
- Unity shader實(shí)現(xiàn)遮罩效果
- 淺談Unity中的Shader
相關(guān)文章
DevExpress實(shí)現(xiàn)GridControl單元格編輯驗(yàn)證的方法
這篇文章主要介紹了DevExpress實(shí)現(xiàn)GridControl單元格編輯驗(yàn)證的方法,很實(shí)用的功能,需要的朋友可以參考下2014-08-08
C#實(shí)現(xiàn)HTTP訪問(wèn)類(lèi)HttpHelper的示例詳解
在項(xiàng)目開(kāi)發(fā)過(guò)程中,我們經(jīng)常會(huì)訪問(wèn)第三方接口,如我們需要接入的第三方接口是Web API,這時(shí)候我們就需要使用HttpHelper調(diào)用遠(yuǎn)程接口了。本文為大家介紹了C#實(shí)現(xiàn)HTTP訪問(wèn)類(lèi)HttpHelper的示例代碼,需要的可以參考一下2022-09-09
C#模擬實(shí)現(xiàn)鼠標(biāo)自動(dòng)點(diǎn)擊與消息發(fā)送功能
這篇文章主要為大家詳細(xì)介紹了C#如何利用windows api來(lái)模擬實(shí)現(xiàn)鼠標(biāo)點(diǎn)擊、右擊、雙擊以及發(fā)送文本功能,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-08-08
C#編程自學(xué)之?dāng)?shù)據(jù)類(lèi)型和變量二
這篇文章繼續(xù)介紹了C#數(shù)據(jù)類(lèi)型和變量,是對(duì)上一篇文章的補(bǔ)充,希望對(duì)大家的學(xué)習(xí)有所幫助。2015-10-10
深入解析C#中的交錯(cuò)數(shù)組與隱式類(lèi)型的數(shù)組
這篇文章主要介紹了深入解析C#中的交錯(cuò)數(shù)組與隱式類(lèi)型的數(shù)組,隱式類(lèi)型的數(shù)組通常與匿名類(lèi)型以及對(duì)象初始值設(shè)定項(xiàng)和集合初始值設(shè)定項(xiàng)一起使用,需要的朋友可以參考下2016-01-01
C#使用RichTextBox實(shí)現(xiàn)替換文字及改變字體顏色功能示例
這篇文章主要介紹了C#使用RichTextBox實(shí)現(xiàn)替換文字及改變字體顏色功能,結(jié)合實(shí)例形式洗了C#中RichTextBox組件文字替換及改變字體顏色相關(guān)操作技巧,需要的朋友可以參考下2019-02-02

