年末年始はほぼニート生活
明けましておめでとうございます。ちなみに年が明けてこの挨拶をするのはこのブログが初めてです。なんせ人と会ってなかった。
というのも、私の勤めている会社では年末が12/27で締め、年始は1/4が休みとなっていたので今年の年末年始の休みは10連休もあったのですが、私はそのほぼ全てを部屋で過ごすという仮想ニート生活を謳歌していました。
あまりに部屋から出ないので新年早々、父親からダメ人間判定をされるなど過酷な出来事を乗り越えつつ、PCとPS4に立ち向かう怠惰な日々をダラダラと過ごしていました。今年もよろしくお願いいたします。(←この挨拶も今年初)
Unity2018.3へアップデート
さて、年末話題になった某レコード大賞の楽曲のように認知度や知名度、浸透度よりも誰も知らなくていいから売上だけはミリオンを達成したいという気持ちで10連休の殆どはゲーム製作に費やしていたのですが、その途中、そういえばUnity2018.3にアップデートしていなかったことを思い出して、それまで使っていたUnity2018.2からUnity2018.3へアップデートする作業を行いました。
Unity2018.3ではPrefabの編集機能やタイルマップ機能の追加など、Unity2018.2と比べて多くの機能の追加と処理の改善が行われているようなので「多少コンバートに時間が掛かるかも」とは思いつつワクワクしながらアップデートしたのですが、見事に目論が外れました。
だが、しかし・・・
振り返るとUnityのアップデート時には度々トラブルが起こっていてこのブログでも度々記事に書いてきました。
ただUnity2018.2になってからは内部アップデートは頻繁にあるものの、これといったトラブルが起きなかったのでこの時は完全に油断していました。裏を掛かれたとはこのことです。
Unity2018.3のインストールが終わり、プロジェクトを起動したらコンソールに以下のエラーが発生
[Physics.PhysX] RigidBody::setRigidBodyFlag: kinematic bodies with CCD enabled are not supported! CCD will be ignored.
なんだこれ?
Google先生から得た答え
エラー内容から察するにRigidBodyコンポーネントのオプションにあるiskinematicオプションが関係しているようですが、詳しいことはチンプンカンプン。なにせUnity2018.2では問題なく動いていたんですからね!!
怒っても仕方ないのでエラーメッセージについてGoogle先生に尋ねてみるとUnity2018.3では物理演算の処理が大きく変わった事による影響で、iskinematicオプションをONにしている場合、Collision Detectionオプションの設定を「Discrete」にしないといけないようです。
これまでCollision Detectionオプションの設定はデフォルトで「Discrete」となっていたので特に問題なかったのですが、Unity2018.3からこのデフォルト設定が変わり、上記の設定を手動で行う必要が出てきました。なんだそれ。
なので、RigidBodyコンポーネントをつけていてiskinematicオプションをONにしているオブジェクト全てに対してCollision Detectionオプションの設定を見直すことになるのですが・・・
さて、どーれだ
元々、行き当たりばったりで作っているのでどのオブジェクトにRigidBodyがあって、その中のどれがiskinematicオプションがONになっているのかさっぱり見当もつきません。アセットストアから購入した物をそのまま使っているオブジェクトもあるし、記憶だけを頼りに見つけ出すのはちょっと骨が折れる。
どうしよう・・・
そんなときに使えるツールが!!
GitHubにエラーの原因となっているオブジェクトを見つけるスクリプトが上げられていました。めっちゃ有り難い。
https://gist.github.com/Arakade/dc1d6623cafaab07aeee92a8a1cf661f
使い方は、まず上のリンクからPhysXCCDEditorHelper.csのをダウンロードするか、コードをCopy&Pasetして作成したらそれをEditorフォルダに格納
しばらくするとメニューのTool配下に「UGS」が追加されるのでそれを選択。
ウインドウが表示されるので「Find bad PhysX in scene」ボタンを押下
すぐに問題のあるオブジェクトの名前が表示されるので、そのオブジェクトのInspectorからCollision Detectionオプションの設定を変更します。
このツールは現在表示しているシーン内のオブジェクトのみチェックするので、プロジェクト内に複数のシーンがある場合には各シーン毎にツールを起動してチェックする必要があります。
ただ、このツールを使って修正してもエラーが表示される場合は、修正したオブジェクトがPrefab化していないか確認してください。Prefab化している場合はPrefab側の設定も同じように修正する必要があります。
エラーは解消されたものの・・・
これらの作業でコンソールに表示されていたエラーは解消されたのですが、今度はプロジェクトをAndroidビルドする際にまた問題が発生しました。
Unityのビルドが「Building scene 0: ~」から進まない・・・
いやいや、訳分からん。なにせUnity2018.2では問題なく動いていたんですからね!!(二度目)
長くなったので続きは次回の記事で