2017-07-28 3 views
0

Mit Tutorial this können wir Objekte per Fingertipp auf die Oberfläche legen.Wie platziere ich Objekte, indem ich mit dem Finger über den Bildschirm wische?

Wie können wir das Skript ändern, um Objekte zu platzieren, während Sie einen Finger über den Bildschirm streichen, so dass das Platzieren von Objekten wie ein "Malbereich" wäre, wo sie platziert werden sollen? Hier

ist das Skript für aus dem Tutorial Abdrucken:

using UnityEngine; 
using System.Collections; 

public class KittyUIController : MonoBehaviour 
{ 
    public GameObject m_kitten; 
    private TangoPointCloud m_pointCloud; 

    void Start() 
    { 
     m_pointCloud = FindObjectOfType<TangoPointCloud>(); 
    } 

    void Update() 
    { 
     if (Input.touchCount == 1) 
     { 
      // Trigger place kitten function when single touch ended. 
      Touch t = Input.GetTouch(0); 
      if (t.phase == TouchPhase.Ended) 
      { 
       PlaceKitten(t.position); 
      } 
     } 
    } 

    void PlaceKitten(Vector2 touchPosition) 
    { 
     // Find the plane. 
     Camera cam = Camera.main; 
     Vector3 planeCenter; 
     Plane plane; 
     if (!m_pointCloud.FindPlane(cam, touchPosition, out planeCenter, out plane)) 
     { 
      Debug.Log("cannot find plane."); 
      return; 
     } 

     // Place kitten on the surface, and make it always face the camera. 
     if (Vector3.Angle(plane.normal, Vector3.up) < 30.0f) 
     { 
      Vector3 up = plane.normal; 
      Vector3 right = Vector3.Cross(plane.normal, cam.transform.forward).normalized; 
      Vector3 forward = Vector3.Cross(right, plane.normal).normalized; 
      Instantiate(m_kitten, planeCenter, Quaternion.LookRotation(forward, up)); 
     } 
     else 
     { 
      Debug.Log("surface is too steep for kitten to stand on."); 
     } 
    } 
} 

Antwort

2

Statt ein Kätzchen von Laichen, wenn die touchphase endet, können Sie sie laichen, wenn die Berührung bewegt: TouchPhase.Moved. Seien Sie gewarnt - dies wird eine Menge Kätzchen erzeugen, während Sie ziehen, da dies jedes Bild während der Update() Methode überprüft wird. Erwäge, eine Zeitverzögerung hinzuzufügen oder nur zu spawnen, nachdem sich der Finger über eine bestimmte Distanz bewegt hat.

float Vector3 oldpos; 

void Update() 
{ 
    if (Input.touchCount == 1) 
    { 
     Touch t = Input.GetTouch(0); 
     if (t.phase == TouchPhase.Began) 
     { 
      oldpos = t.position; //get initial touch position 
     } 
     if (t.phase == TouchPhase.Moved) 
     { 
      // check if the distance between stored position and current touch position is greater than "2" 
      if (Mathf.Abs(Vector3.Distance(oldpos, t.position)) > 2f) 
      { 
       PlaceKitten(t.position); 
       oldpos = t.position; // store position for next distance check 
      } 
     } 
    } 
} 
+0

Vielen Dank:

void Update() { if (Input.touchCount == 1) { // Trigger place kitten function when single touch moves. Touch t = Input.GetTouch(0); if (t.phase == TouchPhase.Moved) { PlaceKitten(t.position); } } } 

Ein Abstandsprüfschritt wie so könnte implementiert! Wenn Sie eine Beschreibung hinzufügen könnten, wie man die Entfernung überprüft, wo sich der Finger bewegt, würde ich das wirklich schätzen! Obwohl es in der Frage nicht enthalten war und ich auch überprüfen muss, dass ich keine Kätzchen übereinander lege, erstelle ich eine neue Frage, um dieses Problem zu lösen. – Rumata

+0

Die Antwort wurde so bearbeitet, dass sie eine mögliche Methode zur Überprüfung der Entfernung enthält. – ryeMoss

+0

Vielen Dank für die ausführliche Antwort! – Rumata

Verwandte Themen