LoginSignup
0
0

More than 5 years have passed since last update.

位置メモ

Posted at

transformを使う時にいろいろわけがわからなくなるのでメモ。

カメラのTransform

スクリーンショット 2018-12-04 20.09.07.png

Xは横、Yは縦、Zは奥行き。
カメラの場合は、3Dで作る場合
Sizeというのが映している画面に影響している。

このSizeをいじるとカメラの「映す範囲」が変わるので
映される側のTransformをいじりまくっても解決しない時に
意外とこれでいけたりする。

テキストのRect Transform

スクリーンショット 2018-12-04 20.11.05.png

Widthが横幅、Heightが縦幅。
これの設定をせずにテキストサイズを大きくすると
範囲外のデカさになって何も表示されなかったりするのでまずこれを適切に設定。

そして適当にやってもなんとかなっちゃうので
あまり設定をちゃんとしてない人も多いPivot。
それとテキストの配置(ParagraphのAlignment)。

AlignmentはこのTextの範囲の中で
左寄せか、センタリングか、右寄せか
上揃えか、中央揃えか、下揃えかを設定してくれます。

後々このText範囲を大きくしたりする時に
文字の位置が動いたりするのはPivotによるものです。

PivotがX0、Y1ならText範囲が下に大きくなっても文字の位置は変わりません。
PivotがX0.5、Y0.5ならText範囲が大きくなった時、
その大きくなった範囲の中央に文字がいきます。

Textは可変式にする事が出てくるので
改行した時に文字がどういう位置にいくかを
知っておいた方があとになって悩まないかもです。

座標

座標は3つあってスクリーン座標、ワールド座標、ビューポート座標があります。

スクリーン座標は0,0,0が一番左下で一番右上は画面によって変わります。
もし720x1280(携帯でよくあるサイズ)の場合は右上は720,1280,0です。

ワールド座標は中央が0,0,0のやつで、
何も設定してなければ普段Unityをいじってる時の数字です。

ビューポート座標は左下を0,0,1として、右上1,1,1としたものです。
ビューポート座標の使い方は今の所よくわかりません。

ちなみにクリックやタップした位置を取得する
Input.mousePositionはスクリーン座標で取得します。

3Dのオブジェクトにクリックしたポイントがどこに当たったかを判定する場合
私はこんな感じにしてます。(他にもいろいろ方法があるみたいです)

    private RaycastHit hit;
    private Ray ray;

    void Update () {
        if (Input.GetMouseButtonDown (0)) {
            ray = Camera.main.ScreenPointToRay (Input.mousePosition);
            if (Physics.Raycast (ray, out hit, 100f)) {
                Debug.Log(hit.point);
            }
        }
    }

クリックが何かにぶつかった場合、「hit.point」にワールド座標が返ってきます。
(0.1, -0.2, -0.5)
こんな感じで。

キャラクターをそこに走らせたりする時に使うのですが、
Input.mousePositionだとスクリーン座標なので奥行きがないので
カメラからray(光線)を出して
ぶつかったところはどこかを感知して、
その奥行きを入れたワールド座標を返してます。


といった感じで、座標はなんだかわけがわからなくなりがち。
なので、こんな感じでメモ的にいろいろ書いていこうかと思います。
こちらも初心者なので出来るだけ難しくない書き方をする予定です。

間違いの指摘や何かアドバイスをくださる方、大歓迎ですヽ(・ω・*)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0