エラーの概要
エラーになるのはクラス ParticleEmitter や ParticleAnimator。所謂 Legacy Particleコンポーネント。
これに代わる新しいパーティクルコンポーネント Particle System に完全移行が予定されているらしい。
Unity2018でいよいよLegacy Particleコンポーネントが使えなくなった、ということみたいです。
移行とUnityのバージョン対応はだいたい以下の通り。
- Unity2017.4 以前
Legacy Particleコンポーネント、Particle System 共に動作する。
※このUnityバージョンで移行作業を行うといずれも動作するのでやりやすい感。
実際に動作してるパーティクル結果の比較もできるので。
- Unity2018.1以降
Legacy Particleコンポーネントは「今のところ」一応残っている。
ただし各プロパティが Read Only でスクリプトから変更できない。
※近いうちに完全に消えるらしい。
少なくとも 2018.3 では コンポーネントのクラスも無くなっている。C#ソースコードでコンパイルエラーが出る為、実質 Particle System への移行が必須になった様子。
従来この手のケースでは新しいバージョンのUnityでプロジェクトを開いた時、C#ソースコードの自動変換が走ってなんとかしてくれることが多かった。
(コンポーネントのプロパティ値変更がメンバ関数経由になった頃とか)
が、この件に関しては自動では変換できない。
対応方法概要
大まかに以下の2つの対応が必要。- オブジェクトに付いている Legacy Particleコンポーネント を Particle Systemへ置き換える作業。
- Legacy Particleコンポーネントを制御していたC#ソースコードを Particle System対応に修正する作業。
「1.」のコンポーネントの置き換えは自動変換できるEDITORスクリプトが公開されているのでそれを利用すれば楽ができる。
ただしUnity2018.3以降でしか利用できないと明記あるので注意。
※Unity2018.1~Unity2018.2では動作しないので注意。
「2 .」のC#ソースコードは手動で書き換えが必要。
コンポーネント自動変換手順
自動変換できるEDITORスクリプトをダウンロードして、シーン内の Legacy Particleコンポーネントを一括変換する。- Unityフォーラムのココを開く
https://forum.unity.com/threads/release-legacy-particle-system-updater.510879/ - ページ下の方のにある「Legacy_Particle_System_Updater.cs]をダウンロードする。
※Unityの中の人が作成したものらしいが、一応プロトタイプと明記されているので色々自己責任(?)で使用。 - UnityのAssetsフォルダ内のEditorフォルダに入れる。
無ければAssets直下にフォルダ名 Editor を作成してそこにドラッグ&ドロップで入れる。 - 一旦Unityを再起動。目的のプロジェクトを再度読み込む。
- ツールバーから、Assets>Upgrade Legacy Particles が新たに選べるようになっている。これを選択する。
- 「Upgrade Legacy Particles 」ダイアログが開く。
- 「Cleanup Mode」のプルダウンから
■「Disable Legacy Renderer」を選んだ場合:
Legacy な Component は削除はされないがコンポーネントをDisableにする。
とりあえず以前のパラメータ等確認目的で残しておきたい場合等。
■「Delete Legacy components」を選んだ場合:
Legacy な Component は自動的に削除する。 - 「Upgrade Everything」ボタンを押す。
シーン内の Legacy Particle コンポーネントのある個所に、新しい Particle System コンポーネントを自動的に新規追加してくれる。
この際、Legacy Particleコンポーネントの各種設定パラメータを読み取って、新しく追加する Particle System コンポーネントを自動的に反映してくれる。
※Particle AnimatorのColor遷移の指定値なども引き継いでくれるので便利。
C#の制御コード書き換え
パーティクルのON/OFF制御
とりあえずこんな感じで置き換えられる。----- Legacy Particle コード-----
void SetParticle(bool sw) {
ParticleEmitter pe_FX = GetComponent<ParticleEmitter>();
pe_FX.emit = sw; // パーティクルON/OFF
}
----- 新Particle System コード-----
void SetParticle(bool sw) {
ParticleSystem ps_FX = GetComponent<ParticleSystem>();
if(sw==true) {
ps_FX.Play();
}
else {
ps_FX.Stop();
}
}
パーティクル色遷移制御
Legacy Particle だと Particle Animatorコンポーネント に色変化を配列で持たせることができた。C#ソースコードからこれの書き換えも配列書き換えで安易にできた感。新Particle Systemコンポーネントだと Inspectorで見える各種モジュールの「Color over Lifetime」がこれに相当。「Color over Lifetime」にチェックを入れて、その中の「Color」にある時間遷移点
(デフォルト5か所)のRGB(下部)とALPHA(上部)を修正すればできる。これをC#ソースからやれば良い。
C#ソースからのやりかたは公式ドキュメントに記載あり。
Unity DOCUMENT(2018.2): ParticleSystem.colorOverLifetime
クラスGradientであらかじめ、
- 時間遷移位置とRGB値群
- 時間遷移位置とALPHA値群
を生成しておき、メンバcolorOverLifetime下のcolorに設定して反映する感じ。
※RGBとALPHAが個別指定できるようになった。
サンプル
GitHub: Sample_LegacyParticle_to_unity2018
(https://github.com/maruton/Sample_LegacyParticle_to_unity2018)
0 件のコメント:
コメントを投稿