普通相機抖動腳本較易實現,但在使用cinemachine相機下,其Transform組件不可被代碼修改,那麼Cinemachine的相機抖動如何實現呢?本文結合實際項目,對實現相機抖動的三大步驟進行系統講解:html
項目背景:一款2D像素動做遊戲,咱們操控着Player(必須帶有Collider組件),遊戲相機爲Cinemachine 2DCamera(關於其配置方法此處不作贅述,推薦文章在末尾參考處)git
在咱們使用的虛擬相機 CM vcam1 上添加組件:AddComponent->CinemachineImpulse Listenergithub
震動信號發生物體(調用震動函數的物體)爲Player,所以須要在Player上添加組件:AddComponent->Cinemachine Collision Impulse Source(注:必須掛到含Collider的物體上),而後在Raw Signal右側齒輪->New Noise Settings 添加震動配置器,默認名CM vcam1 Raw Signalide
在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()
方法,還有兩個帶參的方法:spa
//倘若使用傳遞velocity的方法,其震動方式爲velocity和CM vcam1 Raw Signal的混合 public void GenerateImpulse(Vector3 velocity); public void GenerateImpulse(Vector3 position, Vector3 velocity);
此外,還有可能出現bug:還還沒有調用震動函數,遊戲開始時就自動產生抖動。其產生緣由博主還沒有在對應腳本內發現,但解決方式爲關閉Player上的Cinemachine Collision Impulse Source腳本.net
Cinemachine中實現相機抖動的基本流程:插件
本例僅介紹了單Position方向上的抖動,讀者可按需配置抖動的Position、Rotation、發生時間、維持時間、衰退時間等,實現本身想要的效果code
原文出處:https://www.cnblogs.com/SouthBegonia/p/11891117.htmlorm