どうもラブヘイトです
私のブログ内でこの記事が一番人気だったので、見やすく修正しました!
今日は3Dオブジェクトの原点を変える方法についてです
先に結果をお伝えすると原点を変える方法は3つあります!
原点(pivot)を変更したい理由
pivotは中心という意味があり、Unityではオブジェクトの中心のことを指します
オブジェクトはこのpivotを基点として回転したり、オブジェクトの正確な位置はpivotの 場所だったりします。
原点を変更したい理由としては、中心以外の場所を軸に回転してほしい!
ってところだと思います
2DからUnityを触り始めた人(私)は
「2Dではpivotグリグリ動かせるのに〜!3Dオブジェクトはpivot変えられないの!?」
とずっと疑問でした
残念ながらデフォルトでは好きな軸に回転させたいだとか2Dでは簡単なことも3Dでは出来ないのです、、、
もしpivotを動かすことができて、2Dのようにグリグリ動かせたら最高ですよね!
なので pivotを動かす方法をいくつか調査しました
コードを作成する
UnityAnswers(←リンク)の質問をいくつか見たところ、Unityのデフォルトの機能ではできないみたいです
コードを書けばできるみたいで、Editor拡張のコードを書いた人のコードを使用させていただきました
http://solvethesystem.wordpress.com/2010/01/15/solving-the-pivot-problem-in-unity/
このコードをAsset>Editorフォルダに入れるだけで、
こんな風にエディターから原点を編集できちゃいます!
↓↓↓
ただ、やっぱりUnity上でのpivotの表示は真ん中にあるので、オブジェクトをみた瞬間に理解できなかったり。pivot動かしたのを忘れてたりすると挙動がおかしいと勘違いしてしまうので微妙かもしれない
モデリング時に原点を変更しておく
また、こんな意見も、、、
「コードを書くよりも、モデリングの時点で原点考えて作ったほうがいいよ!っていうか、みんなそうしてるよー」
例えば郵便ポストみたいな、地面に突き刺す系のオブジェクトは地面との接触箇所を原点にしておくとUnityに持ってきたときも楽ですよね
これは多分大体の人が行っている方法だと思います。
擬似的に原点を動かす
根本的な解決にはなりませんが、簡単に思い通りの動作をするといえば
やはり空のGameObjectを親にすることですかね!
原点を変えたいオブジェクトを空のGameObjectの子にします。
下の図で言うとCubeが原点を変更したいオブジェクトです。
そして、親のGameObjectのRotationを変更してみてください!
そこが軸となって回転しています
今のところ不具合や変な挙動はしたことがないので、ある程度はこの方法でもいいと思います!
前回の記事ではGameObjectを親にする方法で、Unityちゃんに物を持たせてみました
まとめ
3Dオブジェクトの原点(Pivot)を動かす3つの方法は
・エディター拡張するコードを作成する
・モデリングの時点で原点を決めて作成する
・空のGameObjectで擬似的に再現する
以上
それでは、良い原点ライフを(なんだそれ)