【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企業会社員。趣味で変なゲームを作ったり、気まぐれにゲームしたりしています。
研究ではDeepLearning関連のことをしていました。

■メインPC
Win10Pro, Corei7-9700K, DDR4 16GB, SSD 256GB, HDD 2TB*2, RTX2060
■サブPC
Win10Pro, Corei5-8250U, DDR4 8GB, SSD 256GB
■サブサブPC
Win10Pro, Corei5-3337U, DDR3 4GB, SSD 256GB
■ファイルサーバー
WinServer2016Standard, DDR4 4GB, Corei5-6500, SSD 128GB, HDD 750GB*2+1TB
■開発環境&ライブラリ
ゲーム開発ではVisualStudio, Unity, DXライブラリ、研究ではVisualStudioCode, Caffe, Chainer
■使う言語
ゲーム開発ではC++やC#、たまにLuaで、研究ではPython