ゴマちゃんフロンティア

アザラシが大好きなエンジニアの開発日記です

【Unity】Clothコンポーネント削除時にUnityが強制終了する場合の対処法

time 2017/03/28

というわけで、今回はタイトル通り「Cloth コンポーネントを削除しようとするとUnityが落ちる」という現象で少し詰まったので、そのお話です。Unity のバージョンは 5.5.2f1 です。

結論から言えば、「オブジェクトを非アクティブにしてから削除→再起動→再設定」でいけます。
なので対処法というほど大袈裟なものではありませんが、ちょっとしたメモとして載せておきます。

現象

Clothコンポーネントを「RemoveComponent」で削除しようとすると、Unity が強制終了してしまいます。

shot2ss20170328185205289

Cloth が設定されているオブジェクトは、ウサギのキャラクターについているマフラーです。

shot2ss20170328191413571

形の割に頂点数は多めですが、それ以外はほとんどいじっていません。
再現率は今のところ100%です。

なんとかなった方法

自分の場合になりますが、試した感じでは以下の方法で何とかなるようです。

1.以下のどちらかの方法で Cloth コンポーネントを削除
・SkinnedMeshRenderer コンポーネントを非アクティブにしてから Cloth を 削除
・Cloth が設定されているオブジェクトを非アクティブにしてから Cloth を 削除
2.上の状態で保存後、Unity を再起動
3.非アクティブにしたコンポーネントorオブジェクトをアクティブにする
4.再度 Cloth を設定し直す

要するに「オブジェクトが画面上に描画されない」状態にすることがポイントです。

shot2ss20170328191547219

シーンビューでこんな感じになっていることを確認し、RemoveComponent で Cloth を削除しましょう。また、再起動前にアクティブにするとクラッシュしてしまうので注意します。

ちなみにクラッシュ時のスタックトレースはこんな感じ。

0x00000001408A953A (Unity) Unity::Cloth::SetUpSkinnedBuffers
0x00000001408A9CFC (Unity) ClothModule::SetUpSkinnedBuffersOnSkinnedCloth
0x0000000140B15767 (Unity) SkinnedMeshRenderer::UpdateAllSkinnedMeshes
0x00000001408A5D99 (Unity) UpdateCloths
0x00000001408A5E27 (Unity) UpdateCloths
0x0000000140BC3097 (Unity) PlayerLoop
0x000000014148C232 (Unity) Application::UpdateScene
0x000000014148D7FF (Unity) Application::UpdateSceneIfNeeded
0x00000001414960B4 (Unity) Application::TickTimer
0x0000000141558FFE (Unity) FindMonoBinaryToUse
0x000000014155A621 (Unity) WinMain
0x0000000141875DD4 (Unity) strnlen
0x00007FFB07F28364 (KERNEL32) BaseThreadInitThunk
0x00007FFB087F70D1 (ntdll) RtlUserThreadStart

SkinnedMeshRenderer → Cloth ときて落ちているので、削除後の SkinnedMeshRenderer の再描画が怪しそうです。
もちろん確定ではありませんが、解決したので深く考えないようにします。

まとめ

そんなわけで、ちょっとした Unity のトラブルに関するお話でした。
他のアプリケーションは落ちた原因が比較分かりやすいのですが、Unity はなかなか厳しいです。
自分が変な設定をしていたり、インポートしたデータの問題である可能性もあるので、様々な視点から疑っていくべきですね。

down

コメントする