UnityでAR 検証2回目
■今回の目標は
「画像マーカーに2つのオブジェクトを出して、1つは固定もう1つは周りを回転」
画像マーカーを認識して表示させたオブジェクトを個別にコントロールしたいという目的です。
早速検証を始めます。
前回の検証の環境を引き継ぐので、まだ読んでない方は是非よんでみてください。
|
2つのオブジェクトを表示
今回も画像マーカーは「JAL都道府県シール」を使います。
ただ、検証で使い続けるとボロボロになってしまうので等倍でコピーしました。
ImageTarget_Osaka に表示したいオブジェクトを2つ配置しました。
実行します。
とりあえず2つ同時に表示されました。
せっかく大阪の都道府県シールを使っているので、雰囲気を出したくて通天閣を配置しました。
|
localPositionでオブジェクトのポジションを変更
紫のボールのポジションを変更したいと思って、transformのpositionを変更してみます。
紫のボール「ar_testball01」にアタッチしたスクリプトの void Start()に書きました。
void Start()
{
Vector3 tf_Pos = new Vector3(1.0f, 0.0f, 0.0f);
this.GetComponent<Transform>().position = tf_Pos;
}
あれ? 表示されない
紫のボールのtransformを見てみたら Xが16.8 とか見たこともない数値の所にいってました。
そうです
this.GetComponent<Transform>().position
だとワールド座標になってしまいます。
this.GetComponent<Transform>().localPosition
ローカル座標 “localPosition”に修正しました。
void Start()
{
Vector3 tf_Pos = new Vector3(1.0f, 0.0f, 0.0f);
this.GetComponent<Transform>().localPosition = tf_Pos;
}
きちんと近くに表示されました。
vuForiaのターゲットマーカーを使ったARの場合はカメラがワールド座標の0地点です。
カメラの位置を変更すると 画像マーカー・imageTarget の空間内での位置は変わりませんがtransformの数値はカメラの位置に合わせて変わります。
あくまでもワールド座標の0地点はカメラの位置なので。
この紫のボールはローカル座標で配置しました。
この場合のローカル0地点は 画像マーカー・ImageTarget_Osaka です。
Vector3 tf_Pos = new Vector3(1.0f, 0.0f, 0.0f);
ImageTarget_OsakaからXが1.0の位置に配置しました。
.Rotate()でオブジェクトを回転
紫のボールを自転させようと思います。
void Update()
{
Vector3 tf_Rotate = new Vector3(0.0f, 3.0f, 0.0f);
this.GetComponent<Transform>().Rotate(tf_Rotate);
}
Rotate()は今の角度に数値を加算してくれるので、Update()に書くと回ってくれるはず。
変更された座標で自転しています。
RotateAround()で画像マーカーの周りを回転
通天閣の周りをクルクル回らせようとおもいます。
public GameObject imageTarget_Osaka;
void Start()
{
Vector3 tf_Pos = new Vector3(1.0f, 0.0f, 0.0f);
this.GetComponent<Transform>().localPosition = tf_Pos;
}
void Update()
{
Vector3 tf_Rotate = new Vector3(0.0f, 3.0f, 0.0f);
this.GetComponent<Transform>().Rotate(tf_Rotate);
this.transform.RotateAround(imageTarget_Osaka.transform.position, transform.up, 45 * Time.deltaTime);
}
回転軸を指定して回転させたい時は
RotateAround(回転の中心点,回転軸,角度)
で出来るはずなので
this.transform.RotateAround(imageTarget_Osaka.transform.position, transform.up, 45 * Time.deltaTime);
固定されている通天閣の位置はimageTarget_Osakaのtransformで取得すれば良いので
public GameObject imageTarget_Osaka;
imageTarget_Osaka.transform.position
とimageTarget_OsakaのGameObjectを取得して、transform.positionで回転の中心にしました。
実行します。
自回転しながら通天閣の周りを回っています。
|
まとめ
実はpositionを変更して表示するところで結構迷いました。
ワールド座標になってる事はすぐに分かったんですが、個人的に納得いかなくてゴチャゴチャやってました。
マーカーを認識して表示したオブジェクトのtransformをコントロールしたい場合は、とりあえずローカル座標ですね。
ローカル座標に表示出来てしまえば、後は通常のUnityの要領で進められそうです。
それでは今回の検証は終わりです。
まだまだ検証は勧めていきます。
|
Unity+VuforiaでAR開発-画像マーカーで複数のオブジェクトを表示させる
豊富なカスタマイズメニューで、あなた好みの1台が購入できます。
人気の秘密は何と言ってもコスパの高さ。
最新のCPU・GPUパーツを搭載したモデルを驚きの価格で提供。
山口県の自社工場で組み立てられ徹底した試験・検査後に出荷。
無償修理サービスもありサポート体制も安心。
コスパに徹底的にこだわる方は公式サイトへ >> 【FRONTIER】
|
|
BTOパソコンの草分け的ブランドFRONTIER(フロンティア) 3DCG/動画編集/ゲーム用途に合わせてCPUやGPUなどパーツを自由に選べてコスパにもこだわる方にオススメ。 |
|
|
|
|
|