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)になっていました。

 

これはなんでかまだよく分かっていません。