溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Unity - Cinemachine怎樣實(shí)現(xiàn)相機(jī)抖動(dòng)

發(fā)布時(shí)間:2021-11-15 14:50:09 來源:億速云 閱讀:1130 作者:柒染 欄目:大數(shù)據(jù)

本篇文章為大家展示了Unity - Cinemachine怎樣實(shí)現(xiàn)相機(jī)抖動(dòng),內(nèi)容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細(xì)介紹希望你能有所收獲。

普通相機(jī)抖動(dòng)腳本較易實(shí)現(xiàn),但在使用cinemachine相機(jī)下,其Transform組件不可被代碼修改,那么Cinemachine的相機(jī)抖動(dòng)如何實(shí)現(xiàn)呢?小編對實(shí)現(xiàn)相機(jī)抖動(dòng)的三大步驟進(jìn)行系統(tǒng)講解:

設(shè)置流程

項(xiàng)目背景:一款2D像素動(dòng)作游戲,我們操控著Player(必須帶有Collider組件),游戲相機(jī)為 Cinemachine 2DCamera (關(guān)于其配置方法此處不做贅述,推薦文章在末尾參考處)

1. 在相機(jī)上添加監(jiān)聽腳本

在我們使用的虛擬相機(jī) CM vcam1 上添加組件:AddComponent-> CinemachineImpulse Listener

  • CinemachineImpulse Listener : 監(jiān)聽腳本內(nèi)震動(dòng)信號(方法調(diào)用) ,使得 抖動(dòng)在此相機(jī)上發(fā)生

    • Channel Mask:通道遮罩,此處最好默認(rèn)為EveryThing

    • Gain:可獲得震動(dòng)信號的數(shù)目,0為屏蔽,1表示某時(shí)段僅能進(jìn)行一個(gè)抖動(dòng)運(yùn)動(dòng)

    • Use 2D Distance:用于2D游戲,忽略相機(jī)Z軸的抖動(dòng)

Unity - Cinemachine怎樣實(shí)現(xiàn)相機(jī)抖動(dòng)

2. 在震動(dòng)信號發(fā)生物體上添加腳本

震動(dòng)信號發(fā)生物體( 調(diào)用震動(dòng)函數(shù)的物體 )為Player,因此需要在Player上添加組件:AddComponent-> Cinemachine Collision Impulse Source (注:必須掛到含Collider的物體上),然后在Raw Signal右側(cè)齒輪-> New Noise Settings 添加 震動(dòng)配置器 ,默認(rèn)名CM vcam1 Raw Signal

  • Cinemachine Collision Impulse Source :含有 抖動(dòng)函數(shù) 、 震動(dòng)配置器 的關(guān)鍵腳本

    • Raw Signal: 震動(dòng)配置器 ,配置 震動(dòng)參數(shù) 的關(guān)鍵部件,我們打開剛上面新建的CM vcam1 Raw Signal,可看到震動(dòng)方式的各類參數(shù)。我們以Position Y,即上下抖動(dòng)為例,添加Components后可設(shè)置其 Frequency震頻 及 Amplitude震幅 ,并且勾選右側(cè)方框可將其設(shè)置為 正弦波

    • Attack:抖動(dòng)開始的變化曲線及時(shí)間

    • Sustain Time: 抖動(dòng)的持續(xù)時(shí)間

    • Decay:抖動(dòng)衰退的變化曲線及時(shí)間

Unity - Cinemachine怎樣實(shí)現(xiàn)相機(jī)抖動(dòng)

Unity - Cinemachine怎樣實(shí)現(xiàn)相機(jī)抖動(dòng)

3. 調(diào)用震動(dòng)方法:

在Player內(nèi)引用震動(dòng)核心腳本,并在合適位置調(diào)用震動(dòng)方法

private Cinemachine.CinemachineCollisionImpulseSource MyInpulse;
private void Start(){    MyInpulse = GetComponent<Cinemachine.CinemachineCollisionImpulseSource>();}
private void Update(){    //按下右鍵產(chǎn)生相機(jī)抖動(dòng),抖動(dòng)方式依照上面CM vcam1 Raw Signal內(nèi)配置信息    if (Input.GetMouseButtonDown(1))        MyInpulse.GenerateImpulse();}

至此,我們在游戲內(nèi)操控Player,按下右鍵即可實(shí)現(xiàn)相機(jī)抖動(dòng)。當(dāng)然除了上面無參的 GenerateImpulse() 方法,還有兩個(gè)帶參的方法:

//假若使用傳遞velocity的方法,其震動(dòng)方式為velocity和CM vcam1 Raw Signal的混合public void GenerateImpulse(Vector3 velocity);public void GenerateImpulse(Vector3 position, Vector3 velocity);

此外,還有可能出現(xiàn)bug:還尚未調(diào)用震動(dòng)函數(shù),游戲開始時(shí)就自動(dòng)產(chǎn)生抖動(dòng)。其產(chǎn)生原因博主尚未在對應(yīng)腳本內(nèi)發(fā)現(xiàn),但解決方式為關(guān)閉Player上的Cinemachine Collision Impulse Source腳本

總述

Cinemachine中實(shí)現(xiàn)相機(jī)抖動(dòng)的基本流程:

  • 在虛擬相機(jī)上添加 監(jiān)聽腳本 CinemachineImpulse Listener

  • 在Player上添加震動(dòng) 核心腳本Cinemachine Collision Impulse Source ,并添加、設(shè)置 震動(dòng)配置器

  • Player腳本合適位置 調(diào)用震動(dòng)函數(shù)

本例僅介紹了單Position方向上的抖動(dòng),讀者可按需配置抖動(dòng)的Position、Rotation、發(fā)生時(shí)間、維持時(shí)間、衰退時(shí)間等,實(shí)現(xiàn)自己想要的效果

Unity - Cinemachine怎樣實(shí)現(xiàn)相機(jī)抖動(dòng)


上述內(nèi)容就是Unity - Cinemachine怎樣實(shí)現(xiàn)相機(jī)抖動(dòng),你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI