Unity 画像位置の変更① マウスをクリックした場所に飛んでしまう
マウスをドラッグさせると
画像がついてくるようになりました。
しかし、
画像上でクリックしたら、
クリックしたあたりに画像が一旦飛ぶ。
そこからは自由に動かせるのですが、これでは微調整が出来ません。
どうしたら良いか試行錯誤中です。
・・・
すごい時間が経ちました。
すごいいろいろやりました。
以下は数時間後に出来た良くないコードです。
void OnMouseDown()
{
Vector3 beforepos = this.transform.position;
Debug.Log("マウス動かす前beforeposは" + beforepos);
}
//自分が移動することで画像を変えるために必要。マウスで位置を変える
void OnMouseDrag()
{
// Vector3 objPos = Camera.main.WorldToScreenPoint(transform.position);
Vector3 beforepos = this.transform.position;
Debug.Log("onmousedragの最初のbeforeposは" + beforepos);
// Input.GetAxis("Mouse X")はマウスのX方向への移動量。yokoidoに何倍かして入れる
float yokoido = Input.GetAxis("Mouse X") * 20;
// Input.GetAxis("Mouse Y")はマウスのY方向への移動量。tateidoに何倍かして入れる
float tateido = Input.GetAxis("Mouse Y") * 20;
Debug.Log("マウス移動前のbeforeposは" + beforepos);
Debug.Log("マウスx移動量" + yokoido);
Debug.Log("マウス移動後のbeforeposは" + beforepos);
Vector3 mousePos = new Vector3(beforepos.x + yokoido, beforepos.y + tateido, 10);
transform.position = Camera.main.ScreenToWorldPoint(mousePos);
// transform.position = new Vector3(beforepos.x + yokoido, beforepos.y + tateido, 10);
Debug.Log("マウス動かしたら" + transform.position);
}
これは、マウスの移動量を
Input.GetAxis("Mouse X")
で取得して、最初の画像の位置から Input.GetAxis("Mouse X")
だけ動かすということを考えたやつです。
以下はシンプルですごく分かりやすいサイト様です。
すぐに移動量を取ることが出来ました。
【Unity】マウスポインタの移動量の利用 | アトリエ・クラフトロン (a-craftron.com)
もちろん、このようにマウスの移動量を取るのが良くないのではありません。
私の活用方法が良くないのです。
例えば画像の縦移動は
float tateido = Input.GetAxis("Mouse Y") * 20;
となっています。
×20 は、マウスの移動量が小さくて、
画像がマウスにくっついて移動したように見えるには20倍ぐらいにする必要が
あったのです。
でも、正確にマウスにくっついて移動する訳じゃないから、
移動していくうちに画像とマウスが離れていってしまったりして
あんまり嬉しくない感じになりました。
ここまで来るのにも何時間もかかりました。
もうこのイマイチなコードのまま行こうかな・・・
でも、もう一回、調べてみようかな・・・
と、
ネットを検索すると、
チーズくんの備忘録 [Unity]オブジェクトをドラッグして移動する (fc2.com)
ありがとうございます。
私が数時間かかったことが、一発で、
きれいに、美しく解決しました。
画像がマウスと共に、スッスと進みます。
次回は、うまくいったコードについて
書いていくのですが、
あれやこれや試行錯誤して
ん?
と思ったのが、
void OnMouseDown()
{
Vector3 beforepos = this.transform.position;
}
void OnMouseDrag()
{
Vector3 beforepos = this.transform.position;
}
と、書いたときに、Debug.Logでbeforeposを取ると、
OnMouseDown()
の後はちゃんと、画像を配置した位置で座標が取得出来ているのに
OnMouseDrag()
の後には
(0,0,0)になっていました。
これはなんでかまだよく分かっていません。