2017-02-08 1 views
1

J'essaye de créer un effet de glissement. J'ai un projet où vous êtes censé tirer un os de viande. Le dragging fonctionne, mais quand je prends l'os, je peux le déplacer dans toutes les directions. Ce que je voudrais accomplir, c'est que je ne peux que le faire glisser dans une direction. Sur les images ci-dessous, je veux dire la ligne rouge. J'ai essayé beaucoup de choses mais rien n'a fonctionné jusqu'ici. Toute aide est appréciée.Glisser un objet sur une ligne

enter image description here enter image description here

J'ai utilisé ces fonctions pour l'entraînement.

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

Est-il raisonnable de supposer que cela est censé se déplacer uniquement dans la direction de la flèche rouge? si oui, connaissez-vous les degrés que la flèche rouge est en relation avec l'objet? Est-ce que la flèche rouge change d'angle? Si non, pouvons-nous supposer que c'est toujours à un angle de 45 degrés? –

+0

Oui, uniquement dans le sens de la flèche rouge. Eh bien, chacun des objets a une rotation différente donc ce n'est pas toujours 45. – Richarrd82

+0

Ahh, les flèches qui peuvent changer les angles rendent cela un peu plus compliqué. Maintenant, nous entrons dans l'équation y = mx + b pour déterminer combien d'unités X et Y chaque mousedrag doit déplacer les unités. Je commencerais par faire en sorte que l'image bouge d'abord aux angles de 45 degrés, puis je construirais sur celle-ci pour permettre des angles différents. –

Répondre

1

Procurez-vous le composant x de votre souris et utiliser 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

Il ne me laisse pas multiplier par un Vector3, il dit que l'opérateur * ne peut pas être appliqué aux opérandes de type Vector3 – Richarrd82

+0

@ Richarrd82 Je n'ai pas vu que l'offset était aussi un Vector3 :) J'ai édité mon réponse –

+0

J'ai foiré et j'ai laissé quelque chose dans le code. Au lieu de transformer.position.x il est supposé être Input.mousePosition.x – Richarrd82