2018年9月16日日曜日

Unity2018で旧来のパーティクルがエラーになる

最近過去プロジェクトを Unity2018.2.7f1 で開いたところパーティクル関連でエラーが出るようになったので調べてみた。


エラーの概要 

エラーになるのはクラス 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つの対応が必要。
  1. オブジェクトに付いている Legacy Particleコンポーネント を Particle Systemへ置き換える作業。
  2.  Legacy Particleコンポーネントを制御していたC#ソースコードを Particle System対応に修正する作業。

「1.」のコンポーネントの置き換えは自動変換できるEDITORスクリプトが公開されているのでそれを利用すれば楽ができる。
ただしUnity2018.3以降でしか利用できないと明記あるので注意。
※Unity2018.1~Unity2018.2では動作しないので注意。

「2 .」のC#ソースコードは手動で書き換えが必要。

コンポーネント自動変換手順

自動変換できるEDITORスクリプトをダウンロードして、シーン内の Legacy Particleコンポーネントを一括変換する。
  1. Unityフォーラムのココを開く
    https://forum.unity.com/threads/release-legacy-particle-system-updater.510879/
  2. ページ下の方のにある「Legacy_Particle_System_Updater.cs]をダウンロードする。
    ※Unityの中の人が作成したものらしいが、一応プロトタイプと明記されているので色々自己責任(?)で使用。
  3.  UnityのAssetsフォルダ内のEditorフォルダに入れる。
    無ければAssets直下にフォルダ名 Editor を作成してそこにドラッグ&ドロップで入れる。
  4. 一旦Unityを再起動。目的のプロジェクトを再度読み込む。
  5. ツールバーから、Assets>Upgrade Legacy Particles が新たに選べるようになっている。これを選択する。
  6. 「Upgrade Legacy Particles 」ダイアログが開く。
  7. 「Cleanup Mode」のプルダウンから
    ■「Disable Legacy Renderer」を選んだ場合:
    Legacy な Component は削除はされないがコンポーネントをDisableにする。
    とりあえず以前のパラメータ等確認目的で残しておきたい場合等。
    ■「Delete Legacy components」を選んだ場合:
    Legacy な Component は自動的に削除する。
  8. 「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)





    2018年9月11日火曜日

    qnapでMACアドレスが00-00-00-00-05-09になる不具合と解決方法

    諸々の定期バックアップ用にqnap TS-231+というNASを使用しているのですが。

    ある日突然、MACアドレスが 00-00-00-00-05-09 になるという現象発生。
    なんだこれは・・・。eth0、eth1共に同じMACアドレスになってしまいました。

    ファームを最新に更新するも直らずでqnapのサポートにチケットをきったところ、回答はなんとも単純な解決方法でした。


    解決方法

    1. NASをシャットダウン後、電源ケーブルを抜く。
    2. 1分~程度放置。
    3. 電源ケーブルを挿し、NASを再起動。
    4. MACアドレスが元に戻っていることを確認する。

    原因は?

    以下公式回答。
    • 原因はファームウェアの不具合です。
    • MACアドレスだけでなくシリアル番号も消える症状。
    • 最新版ファームウェア QTS 4.3.4.0695 build 20180830 では解決したと思われます

    つまり一旦先の解決方法で正常なMACアドレスに戻して稼働させる。
    その後ファームウェアをアップデートしておいた方が良いですね。

    どうもこの問題 qnap TS-231+ だけではないようです。
    海外情報では他の型番でも発生している模様。
    qnapシリーズで同様な問題でお困りの際は上記方法を試してみると改善できるかもしれません。

    ちなみに

    試行錯誤中、SSHでqnapにログインして ipconfig等でMACアドレスを書き換えて元に戻すことは一応できたのですが。
    これは一時的な変更でしかなく、qnap再起動後にまた 00-00-00-00-05-09 に戻されました。
    メモリ中のどっかに記憶しているMACアドレスそのものがおかしなことになっているバグぽいですね。

    2018年8月30日木曜日

    Blenderでポーズをリセットする


    環境:Blender2.79

    ポーズモードで色々動かした後、デフォルトのポーズに戻す方法。

    1. Pose ModeでAキーを押してボーン全選択
    2. 3D Viewのメニューから、Pose>Clear Transform>All
      又はAllのかわりにクリアしたい種類を選択。




    2017年10月19日木曜日

    Power Chute Data Serviceが重い対策


    SteamVRを起動すると、アプリケーションが遅くなっています云々がでるので調べてみました。


    タスクバーを見ると「Power Chute Data Service」が常に15%~20%前後で稼働。

    これはAPC製無停電電源装置用のプロセス。しかし常時この負荷はいかがなものか・・・。


    と、いうことでこのプロセスを止めることで解決を試みます。

    ちなみにこのプロセスを止めるととタスクバーのAPCアイコンがエクスクラメーションマーク(!)になったりしますが、停電時のバックアップ切り替えには支障ないので。


    手順


    まずプロセスを止めます。
    1. CTRL+ALT+DEL でタスクマネージャを開く
    2. タブの「プロセス」をクリック
    3. 一覧から「PowerChute Data Service (32ビット)」を見つける。
    4. その行の上で右クリック>タスクの終了 で止める。
     次にOS起動時に自動起動しないようにします。












    1. タスクバーのスタートボタン 右クリックメニュー > コンピュータの管理
    2. 左列から 「サービスとアプリケーション」
    3. 一覧から APC Data Service を見つける
    4. その行の上でダブルクリック。
    5. 「スタートアップの種類」を手動に変更。「適用」クリック。
    6. 「OK」で閉じる。




    再起動して確認してみます。


    1. CTRL+ALT+DEL でタスクマネージャを開く
    2. タブの「プロセス」をクリック
    3. 一覧から「PowerChute Data Service (32ビット)」が起動していないことを確認する。








    最近忙しくて更新がかなり滞ってます・・・うーん。

    任天堂スイッチも買えたは良いけど、いまいちやりたいゲームが少ない感(ボソ。


    2017年8月20日日曜日

    Blenderでサッカーボールのようなものを作る

    Blender2.78c でサッカーボールぽいモノを作るメモ。

    ※2.78cはプラグインの様相が変わったようで2.72とは少し異なるようなので。

    環境

    Blender2.78c


    準備

    まじめに作ると甚だ面倒そうなのでプラグインを利用。
    プラグインは標準装備だが有効にする必要有り。


    プラグイン Meah: Inset Polygon の有効化




    1. CTRL*ALT+U で UserPreferences を開く。
    2. 上部のAdd-onsを選択。
    3. 左列のMeshを選択。
    4. Mesh: Inset Polygonにチェックを入れる。
    5. Save User Settings で設定を保存。


    ベースモデル作成

    #1. 3DViewメニューバーから、Add>Mesh>Mesh Function>Regular Solid




















    #2. 左「Transform」パネル下部の Presets から Truncated Icosahedron を選択。





















     #3. Editモードで六角形面の余計な対角エッジを消す




















    1. 六角形面にあるエッジを選択。
    2.  SHIFT+G から Length を選択。
      六角面の対角を全選択。
    3. DELでキー押し メニューから Dissolve Edges


    #4. Editモードで五角形面の余計な対角エッジを消す



















    1. 五六角形面にあるエッジを選択。
    2.  SHIFT+G から Length を選択。
      六角面の対角を全選択。
    3. DELでキー押し メニューから Dissolve Edges




      これで一応サッカーボールらしい形状になる。
























    白黒塗り

    1. 白にするマテリアルを作る。
    2. 黒にするマテリアルを作る。
      この時マテリアル一覧で、白のマテリアルの下にする。
    3. Editモードにする。
    4. Face選択モードにする。
    5. 五角形の面を選択。
    6. SHIFT+G > Area で五角形の面を全て選択状態にする。
    7. 黒マテリアルをAssignする。




    ※本当はこの後にもっと「サッカーボールらしくする」加工がありますが、今回はここまで。





    参考: Blender Tutorial: Soccer Ball with Stitching