Elharter Geschrieben 8. Februar 2018 Melden Share Geschrieben 8. Februar 2018 Hallo, angenommnen ich möchte nicht nur X/Y mit einem Scaling verwenden, sondern ich möchte gerne eine Art "Wand" spawnen und deren Länge und Winkel/Rotation mit 2x X/Y spawnen lassen. Anders erklärt: Ich kenne X0/Y0 und X1 und Y1 .... jedoch keine Rotation. X0/Y0 stellt also die linke Ecke dar und X1/Y1 die rechte Ecke. Durch die Koordinaten erhalten ich die Länge und die Rotation. Jemand ne Idee wie man das lösen könnte? Ist ein wenig abstrakt die Anforderung. danke Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 8. Februar 2018 Autor Melden Share Geschrieben 8. Februar 2018 Okay... also ich habs mal mit deinem Debug.Drawline gelöst....funktioniert soweit wunderprächtig. Jetzt muss ich nurmehr ein Objekt daran ausrichten ^^ Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 8. Februar 2018 Autor Melden Share Geschrieben 8. Februar 2018 Okay....wieder ein wenig weiter: //set line ends to vectors Vector3 vecA = new Vector3(data.line[i].x, 0, data.line[i].y); Vector3 vecB = new Vector3(data.line[i].x1, 0, data.line[i].y1); //get our midway point Vector3 midPointAB = (vecA + vecB) / 2f; //get the direction between the two transforms --> Vector3 dirAB = (vecB - vecA).normalized; // get the rotation of the line //Vector3 relativePos = vecA - transform.position; Quaternion rotationAB = Quaternion.LookRotation(dirAB); pos1.transform.localPosition = midPointAB; pos1.transform.rotation = rotationAB; Damit habe ich mein Cube-Mesh EXAKT auf der Linie..... jedoch fehlt jetzt noch die Größe. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 8. Februar 2018 Autor Melden Share Geschrieben 8. Februar 2018 Okay.... gelöst: //set line ends to vectors Vector3 vecA = new Vector3(data.line[i].x, 40, data.line[i].y); Vector3 vecB = new Vector3(data.line[i].x1, 40, data.line[i].y1); //get our midway point Vector3 midPointAB = (vecA + vecB) / 2f; //get the direction between the two transforms --> Vector3 dirAB = (vecB - vecA).normalized; // get the rotation of the line //Vector3 relativePos = vecA - transform.position; Quaternion rotationAB = Quaternion.LookRotation(dirAB); // get the length of the line Vector3 abLength = vecB - vecA; line.transform.localPosition = midPointAB; line.transform.rotation = rotationAB; // set the new length (scaling size from cube prefab is 1/80/1/) line.transform.localScale = new Vector3(line.transform.localScale.x, line.transform.localScale.y, abLength.z); Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 8. Februar 2018 Melden Share Geschrieben 8. Februar 2018 Mal vorsichtig mit den Dreifach Vierfachposts bitte Wenn du einen 1x1x1-Standardcube hast, dann ist die Rotation am einfachsten zu berechnen mit Quaternion.LookRotation und die Größe mit z.B. Vector3.Distance. Am besten ist es, wenn du den Cube einem leeren GameObject "X" unterordnest, den Cube um (0.5, 0.5, 0.5) verschiebst, damit eine Ecke auf dem Nullpunkt von X liegt und dann das Script auf X packst. Der Code wäre dann: public void SetVectors(Vector3 a, Vector3 b) { var distance = b - a; transform.rotation = Quaternion.LookRotation(distance); transform.localScale = Vector3.forward * distance.magnitude; // statt Vector3.Distance } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 8. Februar 2018 Autor Melden Share Geschrieben 8. Februar 2018 OT: Mhhh, soll ich meinen ersten Beitrag am besten einfach editieren und die Infos hinzufügen? transform.localScale = distance.magnitude; // statt Vector3.Distance wirft: Severity Code Description Project File Line Suppression State Error CS0029 Cannot implicitly convert type 'float' to 'UnityEngine.Vector3' Und "Script" habe ich keinen aus einem einzelnen Gameobjekt. Ich erstelle hunderte Objekte per Script auf einem Terrain. Und hier geht es um "Wände" sozusagen die dann instanziert werden. An sich hat mein Code funktioniert Jedoch habe ich schon einen Bug gefunden. Code funktioniert nicht mehr wenn X0 und X1 andersrum sind. Also die Werte +/- umgedreht sind. Dann stimmt nix mehr ^^ Edit: hat nichts mit den Werten zu tun, sondern damit dass das Scaling nicht mehr stimmt, sobald da eine Rotation reinkommt....hmpf. Magnitude scheint hier tatsächlich die richtigere Wahl zu sein was ich bis jetzt gelesen habe. Edit2: Ok, die Ursache des Bugs kommt schon aus den Rohdaten. Die 2D-Koordinaten (x0/y0 und x1/y1) gibt es in beide Richtungen, da offensichtlich die besagte Wand von beiden Richtungen gezeichnet/gespeichert werden konnte. Somit stimmen die Formeln nicht mehr und die Berechnungen gehören irgendwo neutralisiert. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 8. Februar 2018 Melden Share Geschrieben 8. Februar 2018 Äh... ja, hab mein Script mal korrigiert, hatte da was vergessen. Zitat OT: Mhhh, soll ich meinen ersten Beitrag am besten einfach editieren und die Infos hinzufügen? Ja bitte. Vielleicht nicht zwangsläufig den ersten, aber halt wenn du nur etwas nachträgst in deinen jeweils letzten Beitrag, wie du es jetzt ja gemacht hast. Solange halt noch keine Antwort von jemand anderem darunter ist. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Elharter Geschrieben 8. Februar 2018 Autor Melden Share Geschrieben 8. Februar 2018 Danke! Jetzt funktioniert es wunderprächtig. Wird gemacht in Zukunft. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.