2017-11-03 24 views
0

スプライトをマウスで動かすと、スプライトは常にカーソルの真下に表示されます。Unity3dマウスの位置を基準にして2Dスプライトを移動する

現時点では私のコードは以下のようになります。

public GameObject player; 
    private float distance = 1; 

    private void Update() 
    { 
     if (Input.GetMouseButton(0)) 
     { 
      Vector3 mousePos = new Vector3(Input.mousePosition.x, Input.mousePosition.y, distance); 
      Vector3 playerPos = Camera.main.ScreenToWorldPoint(mousePos); 
      player.transform.position = playerPos; 
     } 
    } 

しかし、私はスプライト、私のマウスの粗いが背景にある関係なく移動したいです。したがって、スプライトの隣にクリックして保持し、マウスを右に動かすと、私のスプライトが同じ方向に同じ方向に移動します。この場合

Example Picture

答えて

0

ことが起源であるかのように、あなたは、相対的な動き、つまり、マウスボタンがクリックされたときにマウスが現在の位置から移動量を使用する必要があります。

したがって、ユーザーがマウスボタンを押したときの現在のマウスの位置に注意する必要があります。

// by Vander 'imerso' Nunes to StackOverflow answer 

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 

public class MouseDrag : MonoBehaviour 
{ 
    public GameObject player; 

    bool dragging = false; 
    Vector3 mouseStartPos; 
    Vector3 playerStartPos; 

    private void Update() 
    { 
     if (Input.GetMouseButtonDown(0)) 
     { 
      dragging = true; 
      mouseStartPos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0)); 
      playerStartPos = player.transform.position; 
     } 
     else if (Input.GetMouseButtonUp(0)) 
     { 
      dragging = false; 
     } 

     if (dragging) 
     { 
      Vector3 mousePos = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0)); 
      Vector3 move = mousePos - mouseStartPos; 
      player.transform.position = playerStartPos + move; 
     } 
    } 
} 

あなたは、ボタンが最初に押されたときに、両方の現在のプレーヤーの位置と現在のマウスの位置が指摘されていることがわかります:

は、ここで私が説明する何が一つの解決策です。したがって、彼らは起源であるかのように行動します。プレーヤーは、ボタンが押されたときにマウスが最初の位置から移動する距離だけ移動します。

+0

ワウありがとう、完璧に動作します。私はこの問題で何時間も苦労しました – Shivo

+0

助けてくれてうれしいです。私はあなたがここに新しい人だと知っているかもしれませんが、その答えを受け入れることになっています。ありがとう。 – imerso

関連する問題