欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

unity沙子堆积_Unity Shader 之 简单实现沙漠干旱热浪的效果

发布时间:2024/1/8 编程问答 52 豆豆
生活随笔 收集整理的这篇文章主要介绍了 unity沙子堆积_Unity Shader 之 简单实现沙漠干旱热浪的效果 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

CameraHotWave 脚本具体代码和代码说明如下:

using UnityEngine;

///

/// 实现相机热浪效果

///

[ExecuteInEditMode]     // 编辑状态下执行该类

[RequireComponent(typeof(Camera))]  // 要求有相机

public class CameraHotWave : MonoBehaviour {

public Shader curShader;                // shader变量参数

public Texture noise;                   // 噪点图片

[Range(0.0f, 1.0f)]

public float grayScaleAmount = 0.1f;    // 主图扭曲范围参数

[Range(0.0f, 1.0f)]

public float DistortTimeFactor = 0.15f; // 主图扭曲热浪动态变化速度参数

private Material curMaterial;           // 材质参数

public Material material                // 材质参数属性

{

get

{

// 材质为空,新建材质,并赋予热浪 shader

if (curMaterial == null)

{

curMaterial = new Material(curShader);

curMaterial.hideFlags = HideFlags.HideAndDontSave;

}

return curMaterial;

}

}

void Start()

{

// 判断系统是否支持图像特效

if (SystemInfo.supportsImageEffects == false)

{

enabled = false;

return;

}

// 判断当前shader 是否为空,是否支持

if (curShader != null && curShader.isSupported == false)

{

enabled = false;

}

}

///

/// 图片渲染函数

/// Camera的一个回调(message),他会在camera执行渲染时候被调用

///

/// 原图片

/// 目标图片

void OnRenderImage(RenderTexture sourceTexture, RenderTexture destTexture)

{

// 判断当前shader是否为空

// 不为空则设置控制赋值对用的shader参数,进行渲染

// 为空则不带 Material 渲染

if (curShader != null)

{

material.SetFloat("_LuminosityAmount", grayScaleAmount);

material.SetFloat("_DistortTimeFactor", DistortTimeFactor);

material.SetTexture("_NoiseTex", noise);

Graphics.Blit(sourceTexture, destTexture, material);

}

else

{

Graphics.Blit(sourceTexture, destTexture);

}

}

void Update()

{

// 保证值不越界在[0,1]范围

grayScaleAmount = Mathf.Clamp(grayScaleAmount, 0.0f, 1.0f);

}

void OnDisable()

{

// 失效时销毁新建的材质

if (curMaterial != null)

{

DestroyImmediate(curMaterial);

}

}

}

总结

以上是生活随笔为你收集整理的unity沙子堆积_Unity Shader 之 简单实现沙漠干旱热浪的效果的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。