2023年6月11日日曜日

DragAndDropで苦労する

 タブレットでDragAndDropを使いたくて、最初はELMで試したが、Windowsではうまくいっても、タブレットなどのタッチ操作はいまいち、不完全。
 そこで、UnityのWebGLでためしたら、うまくいったが、けっこうはまりどころはあった。ChatGPTからも聞きながら、
コードは、以下のものでよかったが、設定で注意点がある。
①Canvas下だとうまく動作しなかった。このへんは、ChatGPTもきづいてくれなかった。常識的なことなのかもしれないが、初心者には盲点。
②オブジェクトにはColliderを追加する。

public class DragAndDrop : MonoBehaviour
{
    public GameObject gameObject;
    private bool isDragging = false;
    private Vector3 offset;
    private void OnMouseDown()
    {
        if (Input.GetMouseButton(0))
        {
            isDragging = true;
            offset = gameObject.transform.position - GetMouseWorldPosition();
        }
       // Debug.Log("MouseDown");
    }
    private void OnMouseDrag()
    {
        if (isDragging)
        {
            gameObject.transform.position = GetMouseWorldPosition() + offset;
        }
    }
    private void OnMouseUp()
    {
        isDragging = false;
    }
    private Vector3 GetMouseWorldPosition()
    {
        Vector3 mousePosition = Input.mousePosition;
        mousePosition.z = Camera.main.nearClipPlane;
        return Camera.main.ScreenToWorldPoint(mousePosition);
    }
}

Inspector でSprite Renderer>Spriteの欄をSquareにして、その下にcanvasをつけて、図形を描画したものを動かすこともできる。
画像にしたかったら、Spriteの欄に画像PNGなどを持ってくることもできる。

0 件のコメント:

コメントを投稿