2016-03-21 9 views
1

Ich finde dieses Skript für Pinch Zoom aber das ist für Kamera Zoom in und out bitte sagen Sie mir, wie es für Objekte funktioniert und wichtiger ist für einzelne Objekte bedeutet es, wenn Ich möchte Würfel skalieren, dann wird nur Würfel gleichzeitig nichts anderes skaliert. und wenn Sphäre dann nur Sphäre danke. hier Code:Wie skaliere ich Objekte einzeln mit Pinch Zoom

using UnityEngine; 
{ 
public float perspectiveZoomSpeed = 0.5f;  // The rate of change of the field of view in perspective mode. 
public float orthoZoomSpeed = 0.5f;  // The rate of change of the orthographic size in orthographic mode. 
void Update() 
{ 
    // If there are two touches on the device... 
    if (Input.touchCount == 2) 
    { 
     // Store both touches. 
     Touch touchZero = Input.GetTouch(0); 
     Touch touchOne = Input.GetTouch(1); 

     // Find the position in the previous frame of each touch. 
     Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition; 
     Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition; 

     // Find the magnitude of the vector (the distance) between the touches in each frame. 
     float prevTouchDeltaMag = (touchZeroPrevPos - touchOnePrevPos).magnitude; 
     float touchDeltaMag = (touchZero.position - touchOne.position).magnitude; 

     // Find the difference in the distances between each frame. 
     float deltaMagnitudeDiff = prevTouchDeltaMag - touchDeltaMag; 

     // If the camera is orthographic... 
     if (camera.isOrthoGraphic) 
     { 
      // ... change the orthographic size based on the change in distance between the touches. 
      camera.orthographicSize += deltaMagnitudeDiff * orthoZoomSpeed; 

      // Make sure the orthographic size never drops below zero. 
      camera.orthographicSize = Mathf.Max(camera.orthographicSize, 0.1f); 
     } 
     else 
     { 
      // Otherwise change the field of view based on the change in distance between the touches. 
      camera.fieldOfView += deltaMagnitudeDiff * perspectiveZoomSpeed; 

      // Clamp the field of view to make sure it's between 0 and 180. 
      camera.fieldOfView = Mathf.Clamp(camera.fieldOfView, 0.1f, 179.9f); 
     } 
    } 
} 
} 
+1

Logik eines solchen Prozesses wäre: 1. Bei der ersten Berührung markieren Sie das Objekt zu skalieren (Raycasts und Treffer suchen) in einer Variablen wie 'markedGameObject'. 2. Verwenden Sie Ihren Code, um 'DeltaMagnitudeDiff' zu bestimmen. 3. Löschen Sie die vollständige 'if -else'-Anweisung aus Ihrem Code. 4. Ersetzen Sie es durch etwas wie 'markedGameObject.localScale = deltaMagnitudeDiff'. 5. Passen Sie die Geschwindigkeit der Skalierung an Ihre Bedürfnisse an. Sorry, ich habe keine Möglichkeit, es zu testen, aber stellen Sie eine Frage, wenn Sie es versuchen :) –

+0

Sie haben Recht, aber ich bin noob in Skripting, wenn Sie den Code für mich bearbeiten können, ich bin Ihnen wirklich dankbar. und danke für deinen Vorschlag :) –

Antwort

0

Ok, also kann ich es nicht richtig testen, so gibt es vielleicht einige Fehler, aber hier ist allgemeine Idee für einen Code:

WICHTIG: Objekt hat Collider angebracht haben - es wird nicht funktionieren, ohne es

using UnityEngine; 
using System.Collections; 
public class ObjectScalling : MonoBehaviour { 

private GameObject selectedObject;  
//public GameObject gameobject; 
// Update is called once per frame 
void Update() { 

    if (Input.touchCount == 0) 
    { 
     Touch touch = Input.touches[0]; 
     Ray ray = Camera.main.ScreenPointToRay(touch.position); 
     RaycastHit hit; 

     if (Physics.Raycast(ray, out hit, 100f)) 
     { 
      selectedObject = hit.collider.gameObject; 
     } 
    } 
    if (Input.touchCount == 2) 
    { 
     // Store both touches. 
     Touch touchZero = Input.GetTouch(0); 
     Touch touchOne = Input.GetTouch(1); 

     // Find the position in the previous frame of each touch. 
     Vector2 touchZeroPrevPos = touchZero.position - touchZero.deltaPosition; 
     Vector2 touchOnePrevPos = touchOne.position - touchOne.deltaPosition; 

     // Find the magnitude of the vector (the distance) between the touches in each frame. 
     float prevTouchDeltaMag = (touchZeroPrevPos - touchOnePrevPos).magnitude; 
     float touchDeltaMag = (touchZero.position - touchOne.position).magnitude; 

     // Find the difference in the distances between each frame. 
     float deltaMagnitudeDiff = prevTouchDeltaMag - touchDeltaMag; 

     selectedObject.transform.localScale = new Vector3(deltaMagnitudeDiff , deltaMagnitudeDiff , deltaMagnitudeDiff); 

    } 
} 
} 

es enthält wahrscheinlich einige Fehler, aber man kann im allgemeinen an diesem :) zu arbeiten beginnen natürlich alles in Ihre Update() außer dieser Linie geht: deltaMagnitudeDiff

+0

Danke, ich werde es später testen :) –

+0

THanks für die Annahme einer Antwort, aber vielleicht sollten Sie es zuerst testen :) –

+0

yeah ich habe es getestet, wenn ich dieses Skript auf Objekt keine Fehler, aber nichts passiert auf dem Touchscreen –

Verwandte Themen