【Unity, Teddy, 3Dモデリング】カメラを移動したときのオブジェクト生成位置のずれを解消

投稿者: | 2018年11月3日

前回の記事

【Unity, Teddy】カメラを回転したときのオブジェクト生成位置のずれを解消

フィア
前回の続きやってくよー
カレン
今日はカメラを移動させたときに、

手書きの円とオブジェクトの生成位置がずれる問題を解消するよ

フィア
結構いろいろ問題が出てくるもんだね…

こんなの初心者には扱えないよ…

カレン
まぁ、私たちも十分初心者なんだけどね
カレン
答えを知ってしまえば、やってることはオブジェクトの移動とか

初歩的なことばかりよ

フィア
そうだね…とにかく、スクリプトの数字を変えたり、

//で無効にしたり、いろいろ試してみるしかないね

カレン
じゃあ今日もはじめるよ
フィア
おー!

 

スポンサーリンク

 

z軸方向のオブジェクト生成位置の補正

TeddyのDemoシーンでは、カメラを移動させるとオブジェクトの生成位置がずれるという問題がありました。

これを解消していきます。

 

 

TeddyRuntimeDemo.cs

グローバル変数にVector3 initialCameraPosition; を追加して下さい。これはシーン開始時のカメラの位置ベクトルです。

次に、void Create() メソッド内に var offsetPos = camera.transform.position – initialCameraPosition; を追加し、ゲーム実行中にカメラが移動した分のベクトルを取得。

最後に、生成した go オブジェクトにoffsetPos を代入しています。

これにより、手書きの円とオブジェクトの生成位置のずれを解消できます。

 

フィア
かなり使いやすくなったね!
カレン
ただ、横に移動すると…

 

 

フィア
あっ、ずれちゃった…
カレン
x軸方向の補正も必要みたいね…

 

x軸方向のオブジェクト生成位置の補正

カメラを横に移動すると、オブジェクトの生成位置が円からずれてしまいました。どうやら、go (Puppet)のx 座標を0にすれば、下の動画のように手書きの円の位置に来そうです。

 

 

では、先ほど追加した、「//カメラ移動した分のベクトルを取得」以下2行を削除し、以下のコードに変えてください。

これを追加すると、以下のように横方向のズレにも対応できます。

上記のコードは、goPosでgoの位置ベクトルを取得し、x座標を0、y座標はそのまま、z座標はカメラが移動したオフセットを代入しています。

ちなみに、直接 go.transform.position.x = 0f ; のように数値を代入しても、Unityの仕様上オブジェクトの位置は変化しないので、一旦 goPos というベクトルを生成し、goへVectorとして代入する必要があります。

詳しくはこちらの外部URLを参照してください。

【Unity】C#でtransform.positionの値を変更する

フィア
これでかなり自由度が高まったね!
カレン
残念ながら、また新しい問題が発生よ
フィア
えぇー!?

 

前回、カメラを180回転させても手書きの円内でオブジェクトが発生しましたが、今度はoffsetPos のz成分だけPuppet がずれてしまうのでこれを補正してあげる必要があります。

 

カメラが180°回転したときの補正

Create()内の「//カメラが移動した分のベクトルを取得」より下のコードを以下のコードに置き換えて下さい。

 

これでカメラのy軸のRotateが180°のときにPuppetが以下のように移動します。

実際に動いている映像はこちらです。

 

 

 

 

 

 

 

 

 

 

今回いろいろ書きましたが、TeddyRuntimeDemo.csの内容を全て削除し、以下をコピペすればオッケーです。

TeddyRuntimeDemo.cs

 

まとめ

・カメラを移動させたとき、オブジェクトの発生場所がずれる問題を解決した

フィア
お疲れさまー、今回も結構難しい内容だったね…

もはや、何が分からないのか分からなかったよ…

カレン
そうね、まぁ、今回も分からなければコピペして使うといいわ
フィア
後は、カメラを90°回転させたときに

オブジェクトが生成されない問題だねー

カレン
そこをクリアできればかなり見通しが良くなるわ

次も頑張ってついてきてね

フィア
次回も私は見てるだけ!

 

Teddyの詳細を見たい方

こちらのリンクよりUnity Asset Storeへ飛ぶことができます。

 

 

関連記事

【Unity】Teddy をプログラミングなしで使ってみた

【Teddy】ゲーム実行中に好きな色の3Dモデルを作製する方法

【Unity, Teddy】カメラを回転したときのオブジェクト生成位置のずれを解消