【Unity】パーティクルシステムのマテリアルをスクリプトから変更する

Unity/C#

環境

  • OS:Windows 10 Pro
  • Unity:2021.3.18f1

内容

条件によって画面に降ってくるオブジェクトが変更されるような機能の実装をする際に、ひとつのParticleSystemでマテリアルのみを変更する方法を解説します。

問題点

RendererにあるMaterialを変更したいので、他のオブジェクトのようにParticleSystemのコンポーネントを取得して、「ParticleSystem.Renderer.Material」でいけると思っていましたが、

//これではRendererを取得できない
[SerializeField]
ParticleSystem seasonParticle;

無理でした

解決方法

調べてみると、ParticleSystemは編集する項目ごとに個別のモジュールをもっているため、Renderer用のモジュールを別に取得する必要があるようです。

「ParticleSystemRenderer」というのがあったので試してみたところ、マテリアルを変更することができました。

//これならRendererをいじれる
[SerializeField]
ParticleSystemRenderer seasonParticle;

[SerializeField]
Material[] seasonMaterials;

public void SeasonParticleCheck(int _season){
    seasonParticle.material = seasonMaterials[_season];
}

まとめ

ParticleSystemのMaterialを変更する時は、専用のモジュールである「ParticleSystemRenderer」を取得することで変更が可能となる。

こういう地味なところでつまづいてゲーム制作が止まってしまわないように、力になれたら嬉しいです。

コメント

タイトルとURLをコピーしました