普通相機抖動腳本較易實現,但在使用cinemachine相機下,其Transform組件不可被代碼修改,那麼Cinemachine的相機抖動如何實現呢?本文結合實際項目,對實現相機抖動的三大步驟進行系統講解:
- 項目地址:
配置流程
項目背景:一款2D像素動作遊戲,我們操控着Player(必須帶有Collider組件),遊戲相機為Cinemachine 2DCamera(關於其配置方法此處不做贅述,推薦文章在末尾參考處)
1. 在相機上添加監聽腳本
在我們使用的虛擬相機 CM vcam1 上添加組件:AddComponent->CinemachineImpulse Listener
- CinemachineImpulse Listener:監聽腳本內震動信號(方法調用),使得抖動在此相機上發生
- Channel Mask:通道遮罩,此處最好默認為EveryThing
- Gain:可獲得震動信號的數目,0為屏蔽,1表示某時段僅能進行一個抖動運動
- Use 2D Distance:用於2D遊戲,忽略相機Z軸的抖動
2. 在震動信號發生物體上添加腳本
震動信號發生物體(調用震動函數的物體)為Player,因此需要在Player上添加組件:AddComponent->Cinemachine Collision Impulse Source(注:必須掛到含Collider的物體上),然後在Raw Signal右側齒輪->New Noise Settings 添加震動配置器,默認名CM vcam1 Raw Signal
- Cinemachine Collision Impulse Source:含有抖動函數、震動配置器的關鍵腳本
- Raw Signal:震動配置器,配置震動參數的關鍵部件,我們打開剛上面新建的CM vcam1 Raw Signal,可看到震動方式的各類參數。我們以Position Y,即上下抖動為例,添加Components后可設置其Frequency震頻及Amplitude震幅,並且勾選右側方框可將其設置為正弦波
- Attack:抖動開始的變化曲線及時間
- Sustain Time:抖動的持續時間
- Decay:抖動衰退的變化曲線及時間
3. 調用震動方法:
在Player內引用震動核心腳本,並在合適位置調用震動方法
private Cinemachine.CinemachineCollisionImpulseSource MyInpulse;
private void Start()
{
MyInpulse = GetComponent<Cinemachine.CinemachineCollisionImpulseSource>();
}
private void Update()
{
//按下右鍵產生相機抖動,抖動方式依照上面CM vcam1 Raw Signal內配置信息
if (Input.GetMouseButtonDown(1))
MyInpulse.GenerateImpulse();
}
至此,我們在遊戲內操控Player,按下右鍵即可實現相機抖動。當然除了上面無參的GenerateImpulse()
方法,還有兩個帶參的方法:
//假若使用傳遞velocity的方法,其震動方式為velocity和CM vcam1 Raw Signal的混合
public void GenerateImpulse(Vector3 velocity);
public void GenerateImpulse(Vector3 position, Vector3 velocity);
此外,還有可能出現bug:還尚未調用震動函數,遊戲開始時就自動產生抖動。其產生原因博主尚未在對應腳本內發現,但解決方式為關閉Player上的Cinemachine Collision Impulse Source腳本
總述
Cinemachine中實現相機抖動的基本流程:
- 在虛擬相機上添加監聽腳本 CinemachineImpulse Listener
- 在Player上添加震動核心腳本Cinemachine Collision Impulse Source,並添加、設置震動配置器
- Player腳本合適位置調用震動函數
本例僅介紹了單Position方向上的抖動,讀者可按需配置抖動的Position、Rotation、發生時間、維持時間、衰退時間等,實現自己想要的效果
參考
本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】
※台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包”嚨底家”
※網頁設計公司推薦更多不同的設計風格,搶佔消費者視覺第一線
※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整
※小三通海運與一般國際貿易有何不同?
※小三通快遞通關作業有哪些?