2016-08-11 2 views
0

Ich habe etwa 6 GameObjects mit Tag (Model) nach Move, Scale, Rotate Wie kann ich sie zurücksetzen, um den Standort zu starten, wenn ich auf eine Schaltfläche klicke.Unity: Gameobjects mit Tag, Reset zum Starten von Position/Position

Ich verwende Vuforia und Unity.

Jede Hilfe wäre willkommen, Danke.

+2

Sorry für die Frage, aber haben Sie versucht, selbst? Speichern Sie ihre Position, Skalierung und Drehung, bevor Sie sie verschieben, und setzen Sie sie dann beim Klicken auf diese Werte zurück. – TheDjentleman

+0

Ich bin ein Unity-Neuling, versuchte ein paar Wege, aber ich bekam immer Fehler. Ich werde versuchen, was Sie jetzt vorgeschlagen haben. Vielen Dank. – Zinox

+0

** versuchte ein paar Möglichkeiten .. ** kannst du der Welt erzählen, was genau du probiert hast? –

Antwort

1

Ich habe etwa 6 Gameobjects mit Tag (Modell)

Finden sie alle und speichern sie in einem Array.

GameObject[] models = GameObject.FindGameObjectsWithTag("Model"); 

Verschieben, Skalieren, Drehen, wie kann ich sie zurückzusetzen Lage zu starten, wenn ich auf eine Schaltfläche klicken.

Erhalten die Position (Vector3), Skalierung (Vector3) und Rotation (Quaternion) in der Start() Funktion, mit einer for Schleife und speichern ihre Werte temporäre Variablen. Wenn auf Button geklickt wird, rufen Sie eine Funktion auf, die die Position, Skalierung und Drehung der Modelle auf diese Werte einstellt.

Um eine Funktion bei einem Klick auf die Schaltfläche aufzurufen, können Sie dies über den Editor oder über Skript tun. ButtonInstance.onClick.AddListener(() => yourFunctionToCall());

Ich bin ein Neuling Unity

Nichts hier kompliziert.

GameObject.FindGameObjectsWithTag

C# arrays.

GetComponent

Vector3

Quaternion

Unity Tutorials for beginners

Vector3[] defaultPos; 
Vector3[] defaultScale; 
Quaternion[] defaultRot; 

Transform[] models; 

//Attach Button from the Editor 
public Button resetButton; 

void Start() 
{ 
    //Call to back up the Transform before moving, scaling or rotating the GameObject 
    backUpTransform(); 
} 

void backUpTransform() 
{ 
    //Find GameObjects with Model tag 
    GameObject[] tempModels = GameObject.FindGameObjectsWithTag("Model"); 

    //Create pos, scale and rot, Transform array size based on sixe of Objects found 
    defaultPos = new Vector3[tempModels.Length]; 
    defaultScale = new Vector3[tempModels.Length]; 
    defaultRot = new Quaternion[tempModels.Length]; 

    models = new Transform[tempModels.Length]; 

    //Get original the pos, scale and rot of each Object on the transform 
    for (int i = 0; i < tempModels.Length; i++) 
    { 
     models[i] = tempModels[i].GetComponent<Transform>(); 

     defaultPos[i] = models[i].position; 
     defaultScale[i] = models[i].localScale; 
     defaultRot[i] = models[i].rotation; 
    } 
} 

//Called when Button is clicked 
void resetTransform() 
{ 
    //Restore the all the original pos, scale and rot of each GameOBject 
    for (int i = 0; i < models.Length; i++) 
    { 
     models[i].position = defaultPos[i]; 
     models[i].localScale = defaultScale[i]; 
     models[i].rotation = defaultRot[i]; 
    } 
} 


void OnEnable() 
{ 
    //Register Button Events 
    resetButton.onClick.AddListener(() => resetTransform()); 

} 


void OnDisable() 
{ 
    //Un-Register Button Events 
    resetButton.onClick.RemoveAllListeners(); 
} 
+1

Danke. Probieren Sie es jetzt – Zinox

+0

Funktioniert gut, und danke auch für die sehr nützliche Links und kommentierten Code. Ich werde es mit deiner Hilfe weiter erforschen. :) – Zinox

Verwandte Themen