三代目、三次元で三思九思

鉄工所の三代目が3DスキャナやUnityであれやこれや

【Unity】オブジェクトのCenterの座標を取得する

自分はUnityを3Dビューアの作成に使っていますが、外部からモデルをインポートすると
オブジェクトの見た目の中心の座標とPivotの座標が一致しないことがよくあります。

見るだけならそれでも問題はないのですが座標を基に情報をモデルの上にポップアップさせるといった事をやろうと思うと一発で詰みます。
ギズモディスプレイトグルをCenterにした時にギズモがいる場所の座標さえ分かれば要件は満たせるわけだし、実際そこにいるんだから何とかなるはず・・・。

こんな症状です

f:id:kkei17:20150905223014p:plain

Pivotだとモデルそっちのけで原点(0,0,0)にギズモ。
目印に置いたCubeのある場所が原点で、もちろんフォーカスはCubeでなく円筒形の方。

見た目の中心とモデルの原点が一致しないがためにこんな事に。

f:id:kkei17:20150905223042p:plain

次にトグルをCenterに。
transform.positionで得られる座標も当然インスペクターと同じ(0,0,0)。
ギズモはそこにいるけど一体その座標は何なんだ・・・。

対処方法

紆余曲折あって得られた結論はこちら。

Vector3 pos = (GameObject.Find("モデル名")).GetComponent<Renderer>().bounds.center;

分かってしまえばどうという事はなかった。1行書くために数時間。

これをモデルの中心という意味合いで呼んでいいのか微妙なところですが、実用上問題なさそうです。
色々ググってみても一発でこうやればいいんだよという情報が見つからなかったので誰かの参考になれば。

f:id:kkei17:20150905223222p:plain

無事狙った場所に注釈が浮かんだ。
あと余談ですがこの船のモデルは3Dスキャナで計測したデータから作ってます。