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;
}
}
あと少しです。
コードのRequireComponent行を次のように変更します。
[RequireComponent(typeof(BoxCollider2D))]
そして、スクリプトを追加するオブジェクトにBoxCollider2Dコンポーネントを追加します。私はそれをテストしました、そしてそれはうまくいきます。
このコードの使用に問題がある人のために、私は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;
}
}
_