【Unity】ParticleSystemのRendererプロパティを変更する方法

タイトルのとおりです。

Unityのパーティクルシステムで用いるマテリアルをスクリプトから変更しようとして迷ったので、その方法を残しておきます。
この記事を書いた時点で僕の使用しているUnityのバージョンは2017.2です。

結果だけ知りたい方のためにはじめに結論を書いてしまいます。


結論


パーティクルシステムの描画に関する機能にスクリプトからアクセスするためには、GetComponentを使ってParticleRendererコンポーネントを取得する必要がある


落とし穴


Unityのパーティクルシステムは機能ごとにモジュールに分かれており、スクリプトからアクセスする際には該当するモジュールをParticleSystemから取得する必要があります。
例えば、パーティクルの衝突に関する機能にアクセスしたい場合はParticleSystemのcollisionプロパティからCollision モジュールを、パーティクルの放出に関する機能にアクセスしたい場合はemissionプロパティによりEmissionモジュールを取得する必要があります。

この流れに従うと、描画関連の機能にアクセスしたい場合にはParticleSystemにrendererプロパティが定義されていて、Rendererモジュールを取得することができると考えるのが自然ですよね。……ですよね? 僕だけかな……
とにかく僕はそう思ってリファレンスなどを探しまくりましたが一向に見つからなくて困惑しました。だってインスペクタで見たらParticleRendererの設定場所がParticleSystemの設定と統合されてるし、ParticleRendererがコンポーネントとして表示されてなかったし……

結局Googleで検索しまくった末に参考文献に載せたページに行き当たり、ParticleRendererはParticleSystemとは独立したコンポーネントとしてGetComponentにより取得しなければならないことが分かり解決に至りました。

ちなみに、UnityのパーティクルシステムAPIはバージョン5.5辺りからかなり変わっています。
Googleで検索するとバージョン5.4などの古いリファレンスが上位に出てくるのですが、これが僕をさらなる混乱に陥れました。こんなことで混乱しているのは僕だけかもしれませんが、一応この記事の投稿時点での最新バージョンである2017.2のスクリプトリファレンスへのリンクを張っておきます。残念ながら最新バージョンのリファレンスには日本語バージョンが存在しません。



参考文献


スポンサーサイト



コメント

コメントの投稿

非公開コメント

プロフィール

Cdec

Author:Cdec
情報系修士出身のIT系企業会社員。趣味で変なゲームを作ったり、気まぐれにゲームしたりしています。

■メインPC
Win10Pro, Ryzen7-5800X, DDR4-3600 16GB*2, SSD 512GB, HDD 2TB*2, RTX2060
■サブPC
Win10Pro, Corei5-8250U, DDR4 4GB*2, SSD 256GB
■ファイルサーバー
WinServer2016Standard, DDR4-2133 2GB*2, Corei5-6500, SSD 128GB, HDD 1TB*2+2TB
■趣味制作
ゲームを作ってます。
・C#(Unity):
・C++(DXライブラリ)
・Python
■仕事
主にWebサービス開発をしてます。
・JavaScript/TypeScript