欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Unity后處理效果之邊角壓暗

 更新時間:2021年03月12日 08:02:17   作者:小小小小羽丶  
這篇文章主要為大家詳細介紹了Unity后處理效果之邊角壓暗,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了Unity后處理效果之邊角壓暗的具體代碼,供大家參考,具體內(nèi)容如下

我使用的版本為2019.4.12(LTS)版本,項目是HDRP項目。

邊角壓暗效果的觸發(fā),可以按鈕觸發(fā),也可以按鍵觸發(fā),按鈕觸發(fā)直接調(diào)用ButtonEvent()方法就好了。兩種方式稍微有點差距,但不大。

首先先在項目里新建后處理的配置文件,方法如下:

然后隨便創(chuàng)建一個空物體,掛上腳本DynamicVignette

腳本如下:

using System.Collections;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.HighDefinition;
 
/*
 * 
 * Writer:June
 * 
 * Date: 2020.10.14
 * 
 * Function:動態(tài)邊角壓暗效果
 * 
 * Remarks:
 * 
 */
 
 
/// <summary>
/// 掛載當前腳本的GameObject必須確保有Volume組件
/// </summary>
[RequireComponent(typeof(Volume))]
public class DynamicVignette : MonoBehaviour
{
 /// <summary>
 /// 后處理體積容器
 /// </summary>
 private Volume volume;
 /// <summary>
 /// 對應要修改的效果————>邊角壓暗效果
 /// </summary>
 private Vignette vignette;
 /// <summary>
 /// 是否成功獲取邊角壓暗屬性
 /// </summary>
 public bool IsGetAttribute { get; private set; }
 /// <summary>
 /// 動畫播放需要的時間
 /// </summary>
 public float animtionTime;
 /// <summary>
 /// 強度范圍
 /// </summary>
 [Range(0.1f, 1)]
 public float vignetteIntensity = 0.1f;
 /// <summary>
 /// 動畫開關
 /// </summary>
 private bool isPlay = false;
 /// <summary>
 /// 計時器
 /// </summary>
 private float timer = 0;
 /// <summary>
 /// 每幀更新的強度總和(用于對邊角壓暗強度的賦值,并且每幀更新)
 /// </summary>
 private float frameIntensity = 0;
 /// <summary>
 /// 幀率
 /// </summary>
 [Range(10, 60)]
 public float frameRate = 60;
 
 
 
 private void Start()
 {
 //獲取引用
 volume = GetComponent<Volume>();
 //從配置文件或配置表中獲取屬性 TryGet方法返回的是bool類型的
 IsGetAttribute = volume.profile.TryGet(out vignette);
 }
 
 
 private void Update()
 {
 if (Input.GetKeyDown(KeyCode.A))
 {
 //使用協(xié)程
 StartCoroutine(VignetteEffect());
 }
 }
 
 //經(jīng)過測試,每秒執(zhí)行51次,Update函數(shù)每秒執(zhí)行次數(shù)不一定
 private void FixedUpdate()
 {
 //確保獲取到了屬性
 if (!IsGetAttribute) return;
 if (isPlay)
 {
 timer += Time.deltaTime;
 VignetteEffect(timer);
 }
 }
 
 /// <summary>
 /// 按鈕觸發(fā)
 /// </summary>
 public void ButtonEvent()
 {
 isPlay = true;
 }
 
 /// <summary>
 /// 邊角壓暗效果
 /// tips:注意intensity不可以直接賦值,intensity的類型不是float
 /// </summary>
 private void VignetteEffect(float currentTime)
 {
 //判斷時間
 if (currentTime >= animtionTime / 2f)
 {
 //用 總時間的一半 * 幀率 = 在這段時間要更新的幀數(shù),再用 規(guī)定的強度 / 總幀數(shù) = 每幀更新的強度
 frameIntensity -= vignetteIntensity / (51 * animtionTime / 2f);
 vignette.intensity.value = frameIntensity;
 }
 else
 {
 frameIntensity += vignetteIntensity / (51 * animtionTime / 2f);
 vignette.intensity.value = frameIntensity;
 }
 //播放完成
 if (currentTime >= animtionTime) 
 {
 isPlay = false;
 timer = 0;
 frameIntensity = 0;
 }
 }
 
 
 /// <summary>
 /// 邊角壓暗效果協(xié)程
 /// </summary>
 /// <returns></returns>
 IEnumerator VignetteEffect()
 {
 //從0->目標強度
 for (float i = 0; i <= vignetteIntensity; i+= vignetteIntensity / (frameRate * animtionTime / 2f))
 {
 vignette.intensity.value = i;
 //每0.02秒更新一幀
 yield return new WaitForSeconds(0.02f);
 }
 //從目標強度->0
 for (float i = vignetteIntensity; i >= 0; i -= vignetteIntensity / (frameRate * animtionTime / 2f))
 {
 vignette.intensity.value = i;
 yield return new WaitForSeconds(0.02f);
 }
 }
}

最后的效果:

2020.11.09更新

做了一些處理,不是通過時間來限制,而是用變化速度,以及一些小優(yōu)化,外部只要直接調(diào)用TriggerEffect() ,就有邊角壓暗的漸變效果(可以用來做被敵人攻擊的后,屏幕效果,不過有點大材小用了,哈哈,這里我只是做一個引申?。?/p>

using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.Rendering.HighDefinition;
 
/*
 * 
 * Writer:June
 * 
 * Date: 2020.11.09
 * 
 * Function:控制后處理效果之邊角壓暗效果
 * 
 * Remarks:
 * 
 */
 
 
[RequireComponent(typeof(Volume))]
public class ControlPP_Vignette : MonoBehaviour
{
 /// <summary>
 /// 后期處理容器
 /// </summary>
 private Volume volume;
 /// <summary>
 /// 邊角壓暗效果
 /// </summary>
 private Vignette vignette;
 /// <summary>
 /// 是否成功獲取邊角壓暗屬性
 /// </summary>
 public bool IsGetAttribute { get; private set; }
 /// <summary>
 /// 顯示/隱藏邊角壓暗
 /// </summary>
 private bool IsFadeIn, IsFadeOut;
 /// <summary>
 /// 壓暗的變化速度
 /// </summary>
 [Header("壓暗效果的變化速度"),Range(0.5f,5),SerializeField]
 private float fadeSpeed = 1f;
 /// <summary>
 /// 壓暗強度最大值
 /// </summary>
 [Header("壓暗強度最大值"), Range(0, 1),SerializeField]
 private float effectMax = 0.6f;
 /// <summary>
 /// 默認初始化顏色
 /// </summary>
 public Color defaultColor;
 
 private void Start()
 {
 //獲取引用
 volume = GetComponent<Volume>();
 //默認關閉
 IsFadeIn = false;
 //從配置文件或配置表中獲取屬性 TryGet方法返回的是bool類型的
 IsGetAttribute = volume.profile.TryGet(out vignette);
 //如果沒有獲取到邊角壓暗效果,則創(chuàng)建邊角壓暗效果
 if (!IsGetAttribute) CreatVignetteEffect(defaultColor);
 }
 
 private void Update()
 {
 if (IsFadeIn)
 {
 vignette.intensity.value += fadeSpeed * Time.deltaTime;
 //判斷是否達到目標,到達后設置為false
 IsFadeIn = vignette.intensity.value < effectMax;
 IsFadeOut = !IsFadeIn;
 }
 if (IsFadeOut)
 {
 vignette.intensity.value -= fadeSpeed * Time.deltaTime;
 IsFadeOut = vignette.intensity.value < effectMax;
 }
 }
 
 /// <summary>
 /// 觸發(fā)邊角壓暗效果(提供給外部調(diào)用)
 /// </summary>
 public void TriggerEffect()
 {
 //先判斷是否獲取得到了邊角壓暗
 if (IsGetAttribute) IsFadeIn = true;
 }
 
 
 /// <summary>
 /// 創(chuàng)建邊角壓暗效果
 /// </summary>
 /// <param name="color">初始顏色</param>
 private void CreatVignetteEffect(Color color)
 {
 //將邊角壓暗效果添加到配置文件中 ture:將所有屬性激活
 vignette = volume.profile.Add<Vignette>(true);
 //初始化顏色
 vignette.color.value = color;
 //初始化強度
 vignette.intensity.value = 0;
 //標記為獲取到邊角壓暗
 IsGetAttribute = true;
 }
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C# Winform實現(xiàn)捕獲窗體最小化、最大化、關閉按鈕事件的方法

    C# Winform實現(xiàn)捕獲窗體最小化、最大化、關閉按鈕事件的方法

    這篇文章主要介紹了C# Winform實現(xiàn)捕獲窗體最小化、最大化、關閉按鈕事件的方法,可通過重寫WndProc來實現(xiàn),需要的朋友可以參考下
    2014-08-08
  • C#中Datetimepicker出現(xiàn)問題的解決方法

    C#中Datetimepicker出現(xiàn)問題的解決方法

    這篇文章主要給大家介紹了關于C#中Datetimepicker出現(xiàn)問題的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-11-11
  • C#批量刪除Excel重復項的實現(xiàn)方法

    C#批量刪除Excel重復項的實現(xiàn)方法

    當從不同來源導入Excel數(shù)據(jù)時,可能存在重復的記錄,為了確保數(shù)據(jù)的準確性,通常需要刪除這些重復的行,本文將提供一個使用C# 快速查找并刪除Excel重復項的免費解決方案,需要的朋友可以參考下
    2024-04-04
  • C#使用PPT組件的CreateVideo方法實現(xiàn)視頻生成

    C#使用PPT組件的CreateVideo方法實現(xiàn)視頻生成

    這篇文章主要為大家詳細介紹了C#如何使用PPT組件的CreateVideo方法實現(xiàn)視頻生成,文中的示例代碼講解詳細,有需要的小伙伴可以跟隨小編一起學習一下
    2023-10-10
  • c# WinForm制作圖片編輯工具(圖像拖動、縮放、旋轉(zhuǎn)、摳圖)

    c# WinForm制作圖片編輯工具(圖像拖動、縮放、旋轉(zhuǎn)、摳圖)

    這篇文章主要介紹了c# WinForm制作圖片編輯工具(可實現(xiàn)圖像拖動、縮放、旋轉(zhuǎn)、摳圖),幫助大家更好的理解和學習使用c#,感興趣的朋友可以了解下
    2021-03-03
  • C#中動態(tài)顯示當前系統(tǒng)時間的實例方法

    C#中動態(tài)顯示當前系統(tǒng)時間的實例方法

    想在網(wǎng)頁中動態(tài)地顯示當前系統(tǒng)的時間,找了好多,不過都是一些停在那里不動的。。。不過皇天不負有心人,終于讓我找到了
    2013-05-05
  • C# Path類---文件路徑解讀

    C# Path類---文件路徑解讀

    這篇文章主要介紹了C# Path類---文件路徑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • 區(qū)分c# 前臺和后臺線程

    區(qū)分c# 前臺和后臺線程

    這篇文章主要介紹了c# 前臺線程和后臺線程的區(qū)別與聯(lián)系,文中講解非常細致,代碼幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-07-07
  • C#實現(xiàn)將日期格式化為指定格式

    C#實現(xiàn)將日期格式化為指定格式

    這篇文章主要為大家詳細介紹了C#如何使用DateTime.Now.ToString方法將日期格式化為指定格式,文中的示例代碼講解詳細,有需要的小伙伴可以參考下
    2024-01-01
  • C#編程自學之類和對象

    C#編程自學之類和對象

    C#一種面向?qū)ο蟮木幊陶Z言,是專門為.NET應用而開發(fā)出的語言。在.NET運行庫的支持下,.NET框架的各種優(yōu)點在C#中表現(xiàn)得淋漓盡致。所以學習類和對象以及如何運用它們是非常重要!
    2015-10-10

最新評論