募集要項

  • ■ボイスの募集は終了しました。

    非常に沢山のご応募ありがとうございました!

     結果はこちら
2017年10月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

« 【Unity Action】バトル中のスコア取得、実装・・・の前に | トップページ | 【Unity Action】 基本的なバトル中のスコア処理実装完了 »

2013年5月30日 (木)

【Unity Tips】 スクリーン座標とワールド座標の切り替えと使用例

オブジェクトの「スクリーン座標」/「ワールド座標」の変換は、
・マウスクリックした位置を3D座標に落とし込む
・タップした位置に移動したり、何かを表示する
等にも使うかと思いますが、
今回は様々な位置にあるオブジェクトに対して固定サイズのUIを表示する場合
の例になります。

具体的には、下記図①のようなイメージになります。
白黒の物がUIだと思って下さい。

Ui

まず、オブジェクトの位置にUI(NGUIのUISprite)をそのまま出してカメラに写した場合、
UIの位置は正しいのですが、
図②のように、近距離では大きく、遠距離では小さく表示されてしまいます。

次に、「Perspectiveカメラ」と同位置に「Orthographicカメラ」を置いて、
「Orthographicカメラ」側でUIを写した場合、
図③のようにUIのサイズは均等になりますが、
UIが画面端に行けば行くほど、パースの分の位置のズレが発生
してしまっています。
※作成中のゲームではこの処理になってました
 (見下し気味の視点だったので目立たなかっただけです・・・)

ではどうするか、ですが、
Perspectiveカメラを元に
オブジェクトの位置をスクリーン座標として取得し、
そのスクリーン座標をOrthographicカメラに渡して、
その位置にダメージの値のUIを発生させる
事で、
図①のように表示する事ができます。

具体的には以下な感じです。
------------------------------------------------------------------------------
//文字を発生させる座標(Base_UIPos)をPerspectiveカメラのワールド座標からスクリーン座標に変換
Vector3 UIPos = GameCamera.WorldToScreenPoint(Base_UIPos);
//Z(奥行き)の位置は固定
UIPos.z = 1.0f;
//文字の座標をスクリーン座標からOrthographicカメラのワールド座標に反映
UISpriteObject.transform.position = DamageCamera.ScreenToWorldPoint(DamagePos);
------------------------------------------------------------------------------
自分はダメージ表記、取得経験値表記が主ですが、
敵キャラの位置にHPバーを表示する場合等にも有効ですね。

« 【Unity Action】バトル中のスコア取得、実装・・・の前に | トップページ | 【Unity Action】 基本的なバトル中のスコア処理実装完了 »

Unity Tips」カテゴリの記事

コメント

Karasuさん、はじめまして。

いつも、拝読させていただいております。

ちょうどこの記事にあるやり方を調べていて、この投稿にたどり着きました。

いつも貴重な情報ありがとうございます。

>マルソさん
初めまして。
ちょうどいい内容があったようで何よりです。

最近開発記事更新遅めですが、これからもよろしくお願いします(;´Д`)

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1500357/51823926

この記事へのトラックバック一覧です: 【Unity Tips】 スクリーン座標とワールド座標の切り替えと使用例:

« 【Unity Action】バトル中のスコア取得、実装・・・の前に | トップページ | 【Unity Action】 基本的なバトル中のスコア処理実装完了 »

Twitter等

  • にほんブログ村 ゲームブログ ゲーム制作へ

メールフォーム

  • 直接コンタクト取りたい方はこちらからどうぞ

サイト内検索
ココログ最強検索 by 暴想