読者です 読者をやめる 読者になる 読者になる

うさがにっき

読書感想文とプログラムのこと書いてきます

UnityでGameObjectをタッチで移動させるときにはどの座標が使われてるか気を付ける

概要

UnityでキャラクターなどのGameObjectをタッチで移動させるときの注意点をまとめる

詳細

UnityではObjectの座標として以下の3つが用意されている

  • スクリーン座標(ピクセル座標)

解像度と一致
640x480が解像度だった場合、左上が0,0で右下が640,480

  • ワールド座標

Unity内の座標
オブジェクトを配置したときのScaleに設定されている値

  • ビューポート座標

スクリーン座標の最小値を0, 最大値を1としたもの

気を付けなければいけないのはキャラクターなどのGameObjectのpositionを取得するときはワールド座標
Input.touches[i].positionなどで取得されるタッチした場所の座標はスクリーン座標が使われているということだ

なので、座標を統一してやらないとうまくタッチで移動させてやることができない
私の場合、タッチ座標であるスクリーン座標を以下のメソッドでワールド座標に変換して用いた。

Vector2 touchPosition = Camera.main.ScreenToWorldPoint(Input.touches[i].position);