Unity post processing stack(v1版本)腳本控制
註意:post-processing stack是從AssetStore上下載的v1版本,而並非stack2版本,stack2版本在unity2018的packagemanager中可以直接下載安裝
首先,在相機上綁上PostProcessingBehaviour這個腳本
在Project視圖中右鍵->Create->Post-Processing Profile
並賦值到post processing behaviour的Profile上
選中剛剛新建的Post-Processing Profile文件
在Inspector面板中就可以進行設置了
那如何通過代碼來進行控制呢?
這裏有坑啊,而且與以前的ImageEffects是不同的
首先當然要獲取這個PostProcessingBehaviour
PostProcessingBehaviour ppb=GetComponent<PostProcessingBehaviour>();
然後要獲取創建的這個profile文件對象
var profile = ppb.profile;
再獲取這個Color Grading效果
var colorGrading = profile.colorGrading;
獲取它上面的設置
var settings = colorGrading.settings;
然後坑就來了,先看下圖
以Color Grading這個效果為例:
它的面板中其實又分了幾部分
Tonmapping和TrackBalls可以不管
有Basic, Chanel Mixer 還有Grading Curves
按照正常思維,在settings後面直接點,OK是可以的
本例我們設定要修改的是Basic部分中的Post Exposure(EV)的值
可以直接點出basic,再直接點出PostExposure都是沒問題的,甚至可以直接賦值
settings.basic.postExposure = -1.2f;
沒有問題,也不會報錯,但運行程序,沒有任何效果,面板中post exposure的值也沒有變化。
正確的做法是,new 一個settings,把裏面的post exposure值改掉,再賦給ColorGrading組件
var settings = new ColorGradingModel.Settings() ;
colorGrading.settings=settings;
而new一個settings只修改裏面的exposure值,依然有坑
如前圖所示,Color Grading面板中分為幾個部分,有basic, Chanel Mixer還有Grading Curves
但是new 出來的settings裏面其實基本上是空的,所以所有的這一切都要賦值,不然會報錯
賦值就在new 的時候一並進行
而既然其它部分不變,則用之前點點點的方式獲取,並賦給這個新建的settings,最後再將settings整個賦值回去
var scurves = ppb.profile.colorGrading.settings.curves;
var schannelMixer = ppb.profile.colorGrading.settings.channelMixer;
var settings = new ColorGradingModel.Settings() {
basic = {postExposure = -1.2f, contrast = 1, saturation = 1, hueShift = 0, tint = 0, temperature = 0 } ,
curves = scurves,
channelMixer = schannelMixer
}
這樣new 出來一個settings最後再賦值回去
ppb.colorGrading.settings = settings;
如此修改才能生效,而之後再對值進行修改的話,直接在新建的settings上點出屬性,直接賦值,再把settings賦值回去
settings.basic.postExposure = 10f;
ppb.colorGrading.settings = settings;
也就是每次修改,改的是你新建的settings,但最後還是要把整個settings賦值回去才能生效
以上
Unity post processing stack(v1版本)腳本控制