2017-02-08 12 views
1

ドラッグしてみようとしています。私は骨を肉から引き抜くことになっているプロジェクトを持っています。ドラッグは機能していますが、私が骨をつかむと、私はそれをあらゆる方向に動かすことができます。私が達成したいのは、私はそれを一方向にしかドラッグできないということです。下の画像では、私は赤い線を意味します。私は多くのことを試みましたが、これまでのところ何もできませんでしたどんな助けもありがとうございます。オブジェクトを1行でドラッグする

enter image description here enter image description here

私はドラッグのために、これらの機能を使用していました。

void OnMouseDown() 
{ 
    offset = this.transform.position - Camera.main.ScreenToWorldPoint(new Vector2(Input.mousePosition.x, Input.mousePosition.y)); 
} 

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

は、これが唯一の赤の矢印の方向に移動することになっていると仮定することは安全ですか?そうであれば、赤い矢印がオブジェクトに関連している度合いを知っていますか?赤い矢印は角度を変えますか?そうでない場合、それは常にそれが45度の角度であると仮定できるか? –

+0

はい、赤い矢印の方向にのみです。まあ、それぞれのオブジェクトの回転が異なるので、常にそうであるとは限りません45. – Richarrd82

+0

ああ、矢印を変えることができる矢印はこれをもう少し複雑にします。ここでは、y = mx + bの式を使って、各mousedragがユニットを移動するために必要なXとYの単位数を決定します。私は最初に45度の角度で画像を移動させてから、別の角度を可能にするためにその上に構築します。 –

答えて

1

ちょうどあなたのマウスのxコンポーネントを取得し、localPositionを使用します。

void OnMouseDown() 
{ 
    offset = this.transform.localPosition - Camera.main.ScreenToWorldPoint(new Vector2(transform.localPosition.x, Input.mousePosition.y)); 
} 

void OnMouseDrag() 
{ 
    Vector3 curScreenPoint = new Vector2(transform.localPosition.x, Input.mousePosition.y); 
    Vector3 mousePos = Camera.main.ScreenToWorldPoint(curScreenPoint); 
    Vector3 curPosition = new Vector3(mousePos.x, 0f, 0f) + offset; 
    transform.localPosition = curPosition; 
} 
+0

Vector3で乗算させることはできません、Operator *はVector3型のオペランドには適用できないと言います。 – Richarrd82

+0

@ Richarrd82オフセットもVector3でも見えませんでした:)私は私の編集しましたAnswer –

+0

私はうんざりしてコードに何かを残しました。 transform.position.xの代わりにInput.mousePosition.xがあるとされています – Richarrd82

関連する問題