Unityでオブジェクトをドラッグ＆ドロップにあわせて動かす（2D）

スプライトを追加する。
![sprite.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149593/d79e53cb-36fa-2445-d5b5-b20c84e8e103.png)

イメージをAssetに追加する。
![dragdrop.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149593/29a122be-f786-d6c7-f1cf-0801e68a0d56.png)

スプライトにイメージを対応付ける。
![settingimage.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149593/c6020a2e-d3df-64a1-f79f-23b694fadc10.png)


スプライトにBox Collider 2DをAdd Componentする。
![collider.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149593/aa0ec5f1-4064-284f-06ea-4fe2150d68ce.png)

同様にスプライトにRigidbody 2DをAdd Componentする。  
![rigid.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149593/05d39132-edad-6919-a4ef-ade558a414bb.png)

スプライトにスクリプトをAdd Componentする。
![script_add.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149593/185481bb-7ff9-25f7-99e8-3ff1266f4d11.png)


名前はNewBehaviourScriptのままでcreate addする。
![script_name.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149593/c2c3bfed-5bad-7d06-5b05-b9be326d1965.png)


作成されたスクリプトをダブルクリックしてvisual studioを立ち上げる。
![open_script.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149593/2d892925-9275-c3a2-b20b-72f3ab4bd0d8.png)

<br>
<br>

以下のようなソースコードが書かれているので、それをアタッチする。

```C#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

```

↓ こんな感じ  

```C#
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class NewBehaviourScript : MonoBehaviour
{
    // 追加
    private Vector3 screenPoint;
    private Vector3 offset;

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        
    }

    // 追加
    void OnMouseDown()
    {
        this.screenPoint = Camera.main.WorldToScreenPoint(transform.position);
        this.offset = transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
    }
    // 追加
    void OnMouseDrag()
    {
        Vector3 currentScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
        Vector3 currentPosition = Camera.main.ScreenToWorldPoint(currentScreenPoint) + this.offset;
        transform.position = currentPosition;
    }
}

```
書き替えたらctrl + s で保存する。


※ ちなみにマウスカーソルの中央にイメージのセンター部分を持ってきたい場合はこのようにoffset分を消してやればよい。

```C#
Vector3 currentPosition = Camera.main.ScreenToWorldPoint(currentScreenPoint);// + this.offset;
```

最後にRigidbody 2DのBody TypeをDynamicからKinematicに変更する（こうしないと重力でスプライトが落ちる）。
![kinematic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149593/584d16b4-88d8-57e9-d3cf-3605682109ba.png)


これでドラッグ&ドロップでスプライトを動かすことができる。
![result_draganddrop.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149593/a2dd3f15-b14b-b4ad-bd73-dc13bb8bb169.png)




### 追記
オブジェクトの位置は
transform.position
に格納されている。


### 参考
https://qiita.com/aya_daisy/items/5ed67db8bbabc5c82b36