(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

カメラが近づくと消えるメッシュの原因と対処法【Unity】【トラブルシューティング】


このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 2017.4.7f1


はじめに

今回はカメラが近づくと消えてしまうメッシュの話!


f:id:kan_kikuchi:20180826113624g:plain


なお、本記事に出てくるキャラクターは以下のアセットを使っています。



原因

さっそく本題ですが、原因はメッシュの座標と実際に表示されている場所にズレが生じている事です。

さらになぜズレるのかと言えば、

アニメーションした時にメッシュがあるとされている場所が動かない(対応してない)からです。


具体的には下の画像のような感じ。(白い立方体がメッシュがあるとされている場所)


f:id:kan_kikuchi:20180826131933j:plain
f:id:kan_kikuchi:20180826131942j:plain


こうなると、

カメラが近づいた時にそのメッシュがカメラ外にあると判定され、描画されなくなってしまうわけです。


対処法(正攻法)

ズレが原因ならズレないようにするべきですが、元のモデル(もしくはアニメ?)を修正する必要があり、

おそらくUnityエディタ上だけでは対応出来ません。

(やり方を知っている方がいればご一報頂ければ幸いです!)

なので、応急処置的な方法を紹介しておきます。


記事公開後に正攻法の修正方法を教えて頂きましたので、こちらを先にご紹介します!



消えてしまうSkinned Mesh Renderer(今回はWrist_LとWrist_R)の

Root Boneに対応するTransform(今回はリストバンドなので手)を設定、Centerも(0, 0, 0)にします。


f:id:kan_kikuchi:20180830183759j:plain


これでアニメーションしてもRoot Boneに追従し、ズレがなくなるため消えなくなります!


f:id:kan_kikuchi:20180830183806j:plain


対処法(応急処置)

以下の2つは正攻法じゃない対処法ですが、一応残しておきます。

Update When Offscreen

1つ目はSkinned Mesh RendererにあるUpdate When Offscreenを有効にする方法です。

こうする事でカメラの外でも描画されるようになるため、消える事がなくなります。


f:id:kan_kikuchi:20180826114226j:plain


ただし、本当にカメラ外に行っても描画され続けてしまうため、負荷は増えます。


Bounds Extent

2つ目はSkinned Mesh RendererのExtentをかなり大きくする方法です。

こうする事でそのメッシュがかなり大きいものと判定され、

多少ズレていてもカメラの範囲外にはならず、消えなくなります。


f:id:kan_kikuchi:20180826114242j:plain


しかし、実際のサイズと全く違くなるため、なにかしら不都合が生じるかもしれません。

(特に思いつく不都合があるわけではありませんが……。)


参考