【Unity, Teddy, 3Dモデリング】カメラを90°回転したときにモデルが生成されない問題を解消

Unity

はじめに

この記事は前回の記事の続きです。カメラを90℃回転させたときにTeddyで作成したモデルが生成されない問題に取り組みます。

前回の記事

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

 

TeddyRuntimeDemo.cs (完成版)

 

カメラを90°(―90°)回転させたときの問題点

カメラを90°回転させると、円の中にオブジェクトが現れません(実際には、厚みの無いペラペラのオブジェクトが生成されております)。なので、横からでも3Dオブジェクトを生成できるようにする必要があります。

 

手書きの円の座標をxy座標へ転写する

Teddyはxy平面上に手書きの円を書き、z方向へ膨らませる仕様になっていますので、それに合わせたコーディングを考えていきます。

カメラを90°回転させた場合、手書きの円はワールド座標でyz平面上のデータになるので、それを一旦xy平面上へ転写し、オブジェクトを生成した後に、yz平面上に戻すという流れを行います。

 

 

TeddyRuntimeDemo.cs [Create()メソッド]

 

var world = screens.Select(screen => {・・・}).ToList() ; はマウスのスクリーン座標(screen)を引数として受け取って、ワールド座標へ変換(var makePos)してworldのリストに格納する計算です。

上記のコードは非常に難解なので理解する必要はありませんが、ラムダ式の見方は重要なので、分からない場合はこちらをご覧ください。

【Unity, C#】超入門 ラムダ式の書き方、使い方

 

この数式の中で、カメラのy軸のRotate が90°(もしくは―90°)のとき、makePosを一旦カメラと同じ方向へ回転させ、手書きの円をxy平面へ転写しています。

 

最後に、Create()メソッドの最後の方に追加した、go.transform.rotation = Quaternion.Euler (0f, -90f, 0f); で生成したオブジェクトを手書きの円の位置へ戻しています。その結果、以下のようになります。

 

忙しい人のためのUnity入門講座へ

タイトルとURLをコピーしました