タイトルのとおりです。
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のスクリプトリファレンスへのリンクを張っておきます。残念ながら最新バージョンのリファレンスには日本語バージョンが存在しません。
スポンサーサイト
トラックバック
コメント
コメントの投稿