web-dev-qa-db-ja.com

Unity 2Dでオブジェクトをドラッグする

Unity 2Dのオブジェクトドラッグスクリプトを探しました。インターネットで良い方法を見つけましたが、Unity 3Dでのみ機能しているようです。私は2Dゲームを作成していて、その方法で「壁」と衝突しないので、それは私には良くありません。

私はそれを2Dに書き直そうとしましたが、Vectorsでエラーが発生しました。

2Dへの書き換えを手伝っていただければ幸いです。

3Dで機能するコードは次のとおりです。

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(BoxCollider))]

public class Drag : MonoBehaviour {
    private Vector3 screenPoint;
    private Vector3 offset;

void OnMouseDown() {

    offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z));
}

void OnMouseDrag()
{
    Vector3 curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, screenPoint.z);
    Vector3 curPosition = Camera.main.ScreenToWorldPoint(curScreenPoint) + offset;
    transform.position = curPosition;
}
}
15
Zwiebel

あと少しです。

コードのRequireComponent行を次のように変更します。

[RequireComponent(typeof(BoxCollider2D))]

そして、スクリプトを追加するオブジェクトにBoxCollider2Dコンポーネントを追加します。私はそれをテストしました、そしてそれはうまくいきます。

8
user2599140

このコードの使用に問題がある人のために、私はscreenPointを削除し、_10.0f_ (これはカメラからのオブジェクトの距離です)に置き換えました。必要なフロートを使用できます。今では動作します。また、オブジェクトをドラッグするには、BoxColliderまたはCircleColliderが必要です。したがって、[RequireComponent(typeof(BoxCollider2D))]を使用しても意味がありません。

私にとってうまくいった最後のコードは:

_using UnityEngine;
using System.Collections;


public class DragDrop : MonoBehaviour {

    private Vector3 offset;

    void OnMouseDown()
    {

        offset = gameObject.transform.position -
            Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10.0f));
    }

    void OnMouseDrag()
    {
        Vector3 newPosition = new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10.0f);
        transform.position = Camera.main.ScreenToWorldPoint(newPosition) + offset;
    }
}
_
7
Alex Jolig