ScreenToWorldPointでクリックした位置のWorld座標が取得できない場合

マウスでクリックした位置に対応するWorld座標を取得したい場合、Camera.ScreenToWorldPointを使うと思いますが、たまに正しい値が取得できないことがあります。

Camera.main.ScreenToWorldPoint (Input.mousePosition);

そういう場合は、CameraのProjectionOrthographicに設定してみるとうまくいくこともあるみたいです。

ちなみに、Perspectiveで正しい値が取得できない理由はよく分かりませんでした。

リンク

Unity で ScreenToWorldPoint が常に同じ座標を返す件 – nirasan’s tech blog
http://nirasan.hatenablog.com/entry/2014/03/28/093924

Unity – Scripting API: Camera.ScreenToWorldPoint
https://docs.unity3d.com/ScriptReference/Camera.ScreenToWorldPoint.html

関連記事

UnityでマウスがUI上にあるかどうかチェックするスクリプト
Unityでは、Physics.Raycastを使ってマウスがオブジェクト上にあるかどうか調べることができます。 Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition); RaycastHit hit; if (Physics.Raycast (ray, out hit)) { // 処理したい内容 } ただし、上...

「タッチデバイス」「マウス操作」両方に対応する場合に参考になりそうなドキュメント
Unityを使っていると、WindowsとAndroid/iOS両方に対応したゲームを作ることもあるかなと思います。その際、Windowsではマウス、Android/iOSではタッチデバイスが基本操作になってくると思いますが、どんな感じに対応すれば良いのか悩む場面もあるかもしれません。 Microsoftのドキュメントですが、そういう場合に参考になりそうな資料がこちらです。 Wind...

Unityでマウスカーソルの画像を変更する方法
マウスカーソルの画像を(一時的に)変更したい場合はCursor.SetCursorを使うと実装できるみたいです。 使い方 例えば、カーソルが特定のエリアにある時にカーソル画像を変更したい場合は次のような感じです。 public class Example : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler { ...

UnityでInput.GetKeyを使った操作
Unityでキーボード・ゲームパッドを使ってキャラクターを操作したい場合、 if (Input.GetKey("forward")) { transform.position += Vector3.forward * Time.deltaTime; } のような感じでスクリプトを書くと思います。 ここで使う"forward"とかの文字列は [Edit] » [Proj...

Unity2Dでオブジェクトへのクリックを取得する方法
Unity2Dでゲーム内に配置したオブジェクトをクリック(タップ)したい場合は、対象オブジェクトにCollider2D(BoxCollider2DとかCircleCollider2Dなど)を設定した上でPhysics2D.Raycastを使って実装できます。 サンプル void Update() { if (Input.GetMouseButtonDown(0)) { ...

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です