Vector3 MousePos = Input.mousePosition;
でMousePos.xやMousePos.yの値の変化が取れるのに、
Camera.main.ScreenToWorldPoint(Input.mousePosition);
ってやると値が変化しないというお話。
クリックしたときのマウスの位置を得たい。
ここのサンプルソースをまねて使わせていただく。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Main2 : MonoBehaviour { void Update() { if (Input.GetMouseButtonDown(0)) { Transform myTransform = this.transform; Vector3 pos = myTransform.position; Vector3 setTapPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); pos.x = setTapPos.x; myTransform.position = pos; } } } |
このScriptをアタッチしたObjectがマウスのクリックでx方向に動くはず。
動かない。
値をConsoleに表示してみたが、
print(“setTapPos.x, .y, .z=” + setTapPos.x + “, ” + setTapPos.y+ “, ” + setTapPos.z);
どこをクリックしても常に同じ値だ。
以下のように変更すると
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Main2 : MonoBehaviour { void Update() { if (Input.GetMouseButtonDown(0)) { Transform myTransform = this.transform; Vector3 pos = myTransform.position; Vector3 MousePos = Input.mousePosition; pos.x = MousePos.x; myTransform.position = pos; } } } |
ちゃんと動く。
結論として
Camera.main.ScreenToWorldPoint(Input.mousePosition);
に何か問題がある。
調べてみたらここに関連しそうな内容があった。
zの値の有無でそうなるらしいと分かった。
カメラの表示モードがPerspectiveかOrthographicかによるらしいがサンプルのコードがリンク切れで確認できなかった。
ちなみに、PerspectiveになっていたのをOrthographicにしたらScreenToWorldPointがらみでエラーが出た。
つまり、行き詰まった。
こうすることにした。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Main2 : MonoBehaviour { void Update() { if (Input.GetMouseButtonDown(0)) { Vector3 MousePos = Input.mousePosition; //print("MousePos.x, .y, .z=" + MousePos.x + ", " + MousePos.y + ", " + MousePos.z); Transform myTransform = this.transform; Vector3 pos = myTransform.position; pos.x = (MousePos.x-400)/8-25; myTransform.position = pos; } } } |
そもそも、私の場合はまだ平面的なゲームで試している段階なのでz方向云々は関係なかった。
3次元になったらちょっと前にやったRayとか使えば良いんじゃないかと思う。
いずれにしても
Camera.main.ScreenToWorldPoint(Input.mousePosition);
は、しばらくお預けということに。