読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

【Unity】Create Emptyは何処に作られるのか?

f:id:tsubaki_t1:20170427232113j:plain

ふと気になったので確認してみました。

空のゲームオブジェクトをを作成する

Unityでコンテンツを作る際によくやるのが、Create Emptyで空のゲームオブジェクトを作成する事です。

作成した空のゲームオブジェクトは、フォルダのように暑かったり、適当なコンポーネントを追加してマネージャーにしたりと、まぁ色々します。

f:id:tsubaki_t1:20170427232323j:plain

ただ、オブジェクト作成時変な座標にある事も多々あります。それを毎回ResetPositionで [0,0,0] にしてる訳ですが、正直面倒と感じる事もあります。*1

f:id:tsubaki_t1:20170427232445g:plain

と、言うことで少し確認しました。

オブジェクトはフォーカスしたオブジェクトと同じ位置に作られる

まず一つ目の要素は、Create Emptyで作成したオブジェクトは、フォーカス(Hierarchyダブルクリックでシーンビューの中心に持っていく)したオブジェクトと同じ位置に生成されるという事です。

参考までに、P1~P3の順にフォーカス→Create Emptyでオブジェクトを生成すると、生成したオブジェクトはP1~P3と同じ位置に生成されている事が分かります。

f:id:tsubaki_t1:20170427233145g:plain

これは「キャラクターの位置フォーカスを置きCreate Emptyすると、キャラクターの位置(Pivotの位置)にオブジェクトが生成される」という動作が期待出来ます。

SceneViewを動かすと、生成位置がズレる

ここでメデタシメデタシで終われば良かったのですが、この多くの人を混乱させる挙動には続きがあります。つまり、SceneViewを動かすとCreate Emptyで生成されるオブジェクトの位置がズレるという事です。

下のアニメでは、フォーカス後に左にシーンビューを動かしています。そうすると、Create Emptyで生成されるオブジェクトの位置がズレます。

f:id:tsubaki_t1:20170427233647g:plain

また質の悪いのがズームの扱いです。

SceneViewのズームはFOVを弄って実現しているらしく、ホィールでズームを行った場合 シーンビューの位置は変わりません

なので、右クリック上下左右でカメラの位置を動かしたケースと違い、ズームだけならフォーカスを当てた位置に生成されます。

f:id:tsubaki_t1:20170427234120g:plain

Create Empty Childは親と同じ座標

なお、Create Empty Childは親と同じPosition・Scale・Rotationを持ちます(なので、相対座標は0となります)

これを便利ととるか微妙と取るかは…いや、微妙ですよね

f:id:tsubaki_t1:20170427234732j:plain

CreateEmptyで変な挙動になるならCraeteEmptyの挙動を上書きすれば良いじゃない!と思ったんですが、残念ながら出来ませんでした。

Cannot add menu item 'GameObject/Create Empty %#n' for method 'CreateEmpty.CreateEmptyObject' because a menu item with the same name already exists.

f:id:tsubaki_t1:20170428000556j:plain

 

と思いましたが、何とかなりました。

MenuItem名を少しズラし、かつGameObject/Create Emptyより高い優先度でMenuItemを用意してやれば、Ctrl + Shift + Nで自分が用意したGameObjectが生成出来ます。あと()とか要らない

gist.github.com

ちょっとした応用・Deplicateから(1)を抜き、親オブジェクトの下に生成する

このギミック使うと、Deplicate(Ctrl + D)も上書き出来ました。()が付かない・現在のオブジェクトの下に生成する複製…みたいな感じで。

f:id:tsubaki_t1:20170428003111g:plain

まぁアセットの複製がCtrl + Dでできなくなる弊害がありますが…ちゃんと拡張すれば何とかなるかな…?

関連

asus4.hatenablog.com

*1:フォルダやマネージャーとして使う場合、座標が0,0,0以外の所にあると色々とややこしい事を起こす事がある