UnityCinemachineで衝撃を受けたらカメラを振動させるImpulse機能の使い方をまとめます。速いほど振動を強くする振動の発生条件をフィルタリングする特定のカメラにだけ振動を伝えるRigidbodyを使わずに振動を発生させる参考Unity2018.4.0Cinemachine2.2.9はじめにこの記事ではCinemachineの拡張機能であるImpulse機能について説明します。Cameraの設定方法は本記事では説明しません。これらは以下の記事にまとめていますので、必要に応じて参照してください。light11.hatenadiary.comImpulse機能とは?CinemachineのImpulse機能を使うと、物体同士がぶつかって衝撃が発生したときにカメラを揺らす表現ができます。振動の発生のさせ方は二通り用意されています。Sourceを使えばRigidbodyの衝突に応じて振動を発生させてくれます。Sourceを使います。振動させてみるそれではとりあえずカメラを振動させてみます。振動を発生させる側の設定です。Sourceをアタッチします。Shakeをアサインしておきます。Gainには振幅と振動数の倍率を入力します。Cameraの設定です。Listenerを選んでアタッチしてください。これでカメラが振動を受け取れるようになりました。適当にRigidbodyが衝突を行うようにして再生してみます。これでとりあえず振動するようになりました。振動する時間を設定する次に振動する時間を設定します。Envelopeから設定できます。Attackには最大振幅に達するまでのカーブと時間を設定できます。これを設定すれば徐々に振動が強くなっていくような表現ができます。TimeはAttackの後に最大振幅を維持する時間です。Decayは最大振幅から徐々に揺れが収まるまでのカーブと時間です。Impactにチェックを入れると衝撃が大きいほど振動時間が伸びます。影響範囲を設定する次に振動の影響範囲を設定します。Rangeから設定できます。Radiusは振動が減衰せずそのまま伝わる半径です。Distanceまでは徐々に減衰していきます。Distanceが振動の影響範囲です。Modeを指定すると振動の減衰方法を下記のように指定できます。速いほど振動を強くする一般的に物体は重いほど、また速度が大きいほどぶつかった時の衝撃は大きいです。Massにチェックを入れます。Speedにチェックを入れます。Directionは衝撃が与えられた方向を振動に影響させるオプションのようですが、効果がいまいちわかりませんでした。Filterを使うと、振動の発生条件をフィルタリングできます。Maskを設定すれば、そのレイヤーマスクのオブジェクトに当たった時にだけ振動が発生します。Objectには衝突しても振動が発生しません。Channelを使います。Maskを設定します。これを設定することで、このChannelに伝わってきた振動だけを受け取ることができます。Channelを変更します。これにより、発生した振動はそのChannelにだけ伝わります。Sourceを使って、Rigidbodyによる衝突検知時に振動を発生させました。Sourceを使います。これを適当なGameObjectにアタッチし、GenerateImpulse()を呼ぶことで振動を発生させられます。Sourceと被っているので説明を割愛します。»プロフィールUnityエンジニア。グラフィックスへの興味が強めです。インストールから基本的な使い方・注意点まとめ【Unity】【エディタ拡張】テクスチャを指定したUV座標で切り取って保存する【Unity】指定したアセットのAssetBundle名を取得する【Unity】【シェーダ】スクリプトからVP行列を渡してシェーダで座標変換に使う【Unity】【シェーダ】FloatやVectorをリニアライズ対象にするGammaアトリビュート月別アーカイブはてなブログをはじめよう!halya_11さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。