こんにちは、エンジニアのオオバです。

お悩みさん
お悩みさん
  • SkinnedMeshからパーティクルを出したい
  • Noiseモジュールの使い方がわからない
  • ParticleSystemで複雑な表現をしたい
  • オオバ
    オオバ
    本記事ではこれらの悩みを解決します。

    ParticleSystemのShapeにSkinnedMeshRendererを指定しNoiseを組み合わせる

    👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!

    ShapeモジュールにSkinnedMeshRendererを設定する

    ParticleSystemのShapeモジュールにはSkinnedMeshRendererを設定できます。
    アニメーションするメッシュ上からパーティクルを発生させることが可能です。

    【Unity】ParticleSystemでSkinnedMeshからパーティクルを発生させる方法_0

    ShapeモジュールでSkinnedMeshRendererを選択

    Noiseモジュールで複雑な動きを追加する

    Noiseモジュールを使うと、デフォルトでは表現できなかった複雑なパーティクルの動きを実現できます。

    【Unity】ParticleSystemでSkinnedMeshからパーティクルを発生させる方法_1

    Noiseモジュールの設定

    2つを組み合わせた結果

    SkinnedMeshRendererとNoiseモジュールを組み合わせると、以下のような表現になります。

    【Unity】ParticleSystemでSkinnedMeshからパーティクルを発生させる方法_2

    髪メッシュからパーティクル発生

    指定したアニメーションメッシュからパーティクルが発生し、Noiseで自然な動きが付きます。

    Simulation Spaceの設定に注意

    1つ注意点があります。メインモジュールのSimulation SpaceがデフォルトのLocalだと、メッシュのローカル座標が適用されて意図しない表現になります。

    【Unity】ParticleSystemでSkinnedMeshからパーティクルを発生させる方法_3

    Simulation SpaceがLocalの場合の問題

    【Unity】ParticleSystemでSkinnedMeshからパーティクルを発生させる方法_4

    Worldに変更することでこの問題は回避できます。

    設定手順のまとめ

    SkinnedMeshRendererからパーティクルを発生させる手順を整理します。

    1. ParticleSystemコンポーネントをGameObjectに追加する
    2. Shapeモジュールを開き、ShapeをMesh Rendererに変更
    3. Mesh Renderer欄に対象のSkinnedMeshRendererを設定
    4. Noiseモジュールを有効にし、StrengthやFrequencyを調整
    5. メインモジュールのSimulation SpaceWorldに変更

    この手順で、アニメーションするメッシュ表面から複雑な動きのパーティクルを発生させることができます。

    Noiseモジュールの主要パラメータ

    Noiseモジュールを効果的に使うために、主要なパラメータを押さえておきましょう。

    Noiseモジュールの主要パラメータ
    パラメータ効果推奨値の目安
    Strengthノイズの強さ。大きいほどパーティクルが激しく動く0.1〜1.0
    Frequencyノイズの周波数。大きいほど細かく振動する0.5〜2.0
    Scroll Speedノイズパターンのスクロール速度0〜1.0
    Qualityノイズの品質。Highにすると3DノイズになるLow〜Medium

    StrengthとFrequencyのバランスで表現が大きく変わります。
    Strengthを大きくしすぎるとパーティクルが暴れてしまうため、小さい値から調整していくのがおすすめです。

    どんな表現に使える?

    SkinnedMeshRenderer + Noiseの組み合わせは、さまざまな演出に応用できます。

    Noiseモジュールを使うことでランダムかつ自然な動きが加わり、パーティクルの表現力が格段に上がります。

    パフォーマンスへの影響と対策

    SkinnedMeshRendererをShapeに指定すると、毎フレームメッシュの頂点位置を取得する処理が走ります。
    頂点数が多いメッシュを使う場合はパフォーマンスに注意が必要です。

    Max Particlesを制限する

    メインモジュールのMax Particlesを必要最小限に設定しましょう。
    デフォルトの1000は多すぎるケースがほとんどです。演出の見た目を確認しながら、100〜300程度に抑えるとモバイルでも安定します。

    Emission Rateを調整する

    EmissionモジュールのRate over Timeを下げることで、1秒あたりの生成数を制御できます。
    Noiseモジュールで動きを付けている場合、パーティクル数が少なくても十分なビジュアルになることが多いです。

    LODメッシュを活用する

    パーティクルのShapeに使うメッシュは、ゲームで描画するメッシュと同じである必要はありません。
    頂点数を減らしたLODメッシュを別途用意してShapeに設定すると、見た目を維持しつつ負荷を抑えられます。

    MeshRendererとの違い

    ShapeにはSkinnedMeshRenderer以外に、通常のMeshRendererも設定できます。
    両者の違いを整理しておきます。

    SkinnedMeshRendererとMeshRendererの違い
    項目SkinnedMeshRendererMeshRenderer
    アニメーション対応ボーンアニメーションに追従静的メッシュのみ
    パフォーマンスやや高負荷(毎フレーム頂点取得)低負荷
    用途キャラクターの体表面、動く物体建物、地形、静的オブジェクト

    アニメーションに追従する必要がない場合は、MeshRendererを使うほうが軽量です。
    用途に応じて使い分けましょう。

    まとめ

    ParticleSystemのShapeにSkinnedMeshRendererを指定し、Noiseモジュールを組み合わせることで複雑なパーティクル表現が実現できます。

    設定時の注意点はSimulation SpaceをWorldにすることです。Localのままだとメッシュのローカル座標が適用されて意図しない結果になります。

    オススメ記事
    検証環境