Anima2Dでシーンビューからメッシュが消えたときの原因とその対処法
この記事は KMC Advent Calendar 2020 の13日目の記事です。
昨日の記事は matu さんの キーボードとマウスを乗せる台をDIYしたような、してないような でした。
目次
シーンビュー上で見たときにパーツが消えている
KMCid: morisawa です。
Anima2Dを利用しているとき1対象のオブジェクトのパーツ、あるいは全体が消えてしまうことが何度かありました。しかもその原因は一つではなく体系化する必要がありそうだったのでまとめてみます。
今回はこの適当なキャラに実験台になってもらいます(既にスプライトメッシュにボーンを組み込んでいる状態)。
このキャラのパーツは頭、右足、左足の三つです。
カメラの位置によってメッシュが消える
原因①:SkinnedMeshRendererのBoundsが小さい
SpriteMeshにはボーンアニメションのレンダリングに関わるSkinnedMeshRendererというコンポーネントがあります。その中のプロパティであるBoundsがスプライトメッシュを描写するかどうかを決める役割を持っています。
通常メッシュの描画というのは常にされるものではなくて、リソースの節約のためにもカメラから「見えていない」時は描画する必要はありません。そこで、「見えていない」というのを判断するための手段がBoundsです。
オブジェクトのビジビリティはメッシュの Bounds によって決定されます (言い換えると、全体のバウンディングボリュームはあらゆる有効なカメラの視界角外にある必要があります)。ただし、アニメーションしているメッシュの実際のバウンディングボリュームは、アニメーションの再生によって変化します (例えば、キャラクターが手を頭上に伸ばすと、ボリュームの高さが増えます)
(unityのマニュアルより引用)
さて、シーンビュー上ではBoundsは下画像のように白い枠として見えます。
Bounds1つのスプライトメッシュにつき1つ存在していて、下の画像では(こちらから見て)左脚パーツのBoundsを示しています。
このBounds(白枠)がカメラの視野から外れるとメッシュが描画されなくなるという訳です。
ということは、Boundsが実際のメッシュよりも極端に小さいとメッシュがまだシーンビュー内にあるはずなのにカメラ外にあると判定され消えてしまいます。
下の動画ではBoundsが小さいためカメラを左に移動するとボーンだけを残して左脚パーツが消えていることが分かります。
解決策
Boundsをメッシュよりも十分に大きくすれば大丈夫です。
BoundsのExtent
を動かすとBoundsのサイズ調整ができます。
解決後
補足
Update When Offscreen
プロパティを有効にして
カメラから見えていない時は描画するという設定自体を捨てることで解決することもできますが、マニュアルにあるようにリソースの無駄になるので最善策ではないと思います。
カメラからの距離に関係なく消えている。メッシュがパーツ毎ではなく中途半端に欠けたように消えている
原因①:ウェイトがゼロ和になっている
ポリゴンごとにボーンからのウェイトを設定できますが、その総和は通常ゼロになるようにします。
もしあるポリゴンの総和をゼロにしてしまうと(どのボーンからのウェイトも置かれていない状態)、そのポリゴンは無いものとして扱われてしまうようです。
下の画像の一枚目が一部のポリゴンのウェイトをゼロ和にした状態です。SpriteMeshEditor上では黒点で表示されています。
二枚目はその状態のメッシュをシーンビュー上で見た様子です。
ゼロ和になっているポリゴン上にあるテクスチャが消えていることが分かります
解決法
SpriteMeshEditor上でAuto
を押すなり手動でウェイトを設定するなりで解決できます。
原因②:ポリゴンが歪んでいる
ポリゴンはテクスチャの下に敷かれているべきですが、下の画像では大きくゆがんでテクスチャの形に沿うようになっていません。
この場合、ポリゴンからはみ出るテクスチャが出てきてしまいますがそうしたテクスチャは描画されません。
このことはポリゴンが消失扱いにされてテクスチャが消えている原因②と似ている気がします。
解決法
SpriteMeshEditor上で手動で戻すか再度slice
ボタンを押してスライスするかになりそうです。
おわり
自分が出会ったケースを基に書いたので全ての原因を網羅しているわけではないと思いますが取り合えず備忘録としてまとめました。
誤った点があればご指摘ください。
明日の KMC Advent Calendar 2020 は kyp さんの記事になります。
-
2Dアニメーションの作成をunity上で出来る無料アセットです。https://assetstore.unity.com/packages/essentials/unity-anima2d-79840?locale=ja-JP ここでの2Dアニメーションとはボーンアニメ―ション(ポリゴンにテクスチャーを貼ってボーンを入れて動かしたり変形させたり)を指します。Anima2Dの使い方は他のサイトなどを見てください。 ↩