Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

Anima2Dでシーンビューからメッシュが消えたときの原因とその対処法

Anima2Dでシーンビューからメッシュが消えたときの原因とその対処法

この記事は KMC Advent Calendar 2020 の13日目の記事です。
昨日の記事は matu さんの キーボードとマウスを乗せる台をDIYしたような、してないような でした。

目次

シーンビュー上で見たときにパーツが消えている

KMCid: morisawa です。
Anima2Dを利用しているとき1対象のオブジェクトのパーツ、あるいは全体が消えてしまうことが何度かありました。しかもその原因は一つではなく体系化する必要がありそうだったのでまとめてみます。

今回はこの適当なキャラに実験台になってもらいます(既にスプライトメッシュにボーンを組み込んでいる状態)。
image.png

このキャラのパーツは頭、右足、左足の三つです。

カメラの位置によってメッシュが消える

原因①:SkinnedMeshRendererのBoundsが小さい

SpriteMeshにはボーンアニメションのレンダリングに関わるSkinnedMeshRendererというコンポーネントがあります。その中のプロパティであるBoundsがスプライトメッシュを描写するかどうかを決める役割を持っています。
通常メッシュの描画というのは常にされるものではなくて、リソースの節約のためにもカメラから「見えていない」時は描画する必要はありません。そこで、「見えていない」というのを判断するための手段がBoundsです。

オブジェクトのビジビリティはメッシュの Bounds によって決定されます (言い換えると、全体のバウンディングボリュームはあらゆる有効なカメラの視界角外にある必要があります)。ただし、アニメーションしているメッシュの実際のバウンディングボリュームは、アニメーションの再生によって変化します (例えば、キャラクターが手を頭上に伸ばすと、ボリュームの高さが増えます)

unityのマニュアルより引用)

さて、シーンビュー上ではBoundsは下画像のように白い枠として見えます。
Bounds1つのスプライトメッシュにつき1つ存在していて、下の画像では(こちらから見て)左脚パーツのBoundsを示しています。
image.png

このBounds(白枠)がカメラの視野から外れるとメッシュが描画されなくなるという訳です。
ということは、Boundsが実際のメッシュよりも極端に小さいとメッシュがまだシーンビュー内にあるはずなのにカメラ外にあると判定され消えてしまいます。

下の動画ではBoundsが小さいためカメラを左に移動するとボーンだけを残して左脚パーツが消えていることが分かります。
bounds_unusual.gif

解決策

Boundsをメッシュよりも十分に大きくすれば大丈夫です。
BoundsのExtentを動かすとBoundsのサイズ調整ができます。
image.png

解決後

bounds_usual.gif

補足

Update When Offscreenプロパティを有効にして
カメラから見えていない時は描画するという設定自体を捨てることで解決することもできますが、マニュアルにあるようにリソースの無駄になるので最善策ではないと思います。

カメラからの距離に関係なく消えている。メッシュがパーツ毎ではなく中途半端に欠けたように消えている

原因①:ウェイトがゼロ和になっている

ポリゴンごとにボーンからのウェイトを設定できますが、その総和は通常ゼロになるようにします。
スクリーンショット (807)_LI.jpg

もしあるポリゴンの総和をゼロにしてしまうと(どのボーンからのウェイトも置かれていない状態)、そのポリゴンは無いものとして扱われてしまうようです。

下の画像の一枚目が一部のポリゴンのウェイトをゼロ和にした状態です。SpriteMeshEditor上では黒点で表示されています。
二枚目はその状態のメッシュをシーンビュー上で見た様子です。
ゼロ和になっているポリゴン上にあるテクスチャが消えていることが分かります
image.png
image.png

解決法

SpriteMeshEditor上でAutoを押すなり手動でウェイトを設定するなりで解決できます。

原因②:ポリゴンが歪んでいる

ポリゴンはテクスチャの下に敷かれているべきですが、下の画像では大きくゆがんでテクスチャの形に沿うようになっていません。
image.png

この場合、ポリゴンからはみ出るテクスチャが出てきてしまいますがそうしたテクスチャは描画されません。
image.png
このことはポリゴンが消失扱いにされてテクスチャが消えている原因②と似ている気がします。

解決法

SpriteMeshEditor上で手動で戻すか再度sliceボタンを押してスライスするかになりそうです。

おわり

自分が出会ったケースを基に書いたので全ての原因を網羅しているわけではないと思いますが取り合えず備忘録としてまとめました。
誤った点があればご指摘ください。

明日の KMC Advent Calendar 2020 は kyp さんの記事になります。


  1. 2Dアニメーションの作成をunity上で出来る無料アセットです。https://assetstore.unity.com/packages/essentials/unity-anima2d-79840?locale=ja-JP ここでの2Dアニメーションとはボーンアニメ―ション(ポリゴンにテクスチャーを貼ってボーンを入れて動かしたり変形させたり)を指します。Anima2Dの使い方は他のサイトなどを見てください。 

mori-memo
ちゃんとメモをとる
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away