Jog Geschrieben 23. Januar 2018 Melden Share Geschrieben 23. Januar 2018 Hallo, Um z.b. Einschusslöcher auf einem Objekt darzustellen(Hier als Cube dargestellt) wenn ich dieses mit „ScreenPoinToRay()“ anklicke habe ich folgendes Problem. Wenn ich das darzustellende Objekt(als 1,2,3 dargestellt) mit „Instantiate()“ an dieser Stelle erzeuge und die ermittelten Transforms übergebe, wird es zwar korrekt an der Stelle erzeugt aber die Ausrichtungen sind nicht dieselben wie die der Flächen des Cube(Siehe Bild). Wie kann man dieses Problem am besten lösen. Über ein Script Beispiel wäre ich dankbar. Mit bestem Dank im Voraus Jog Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 23. Januar 2018 Melden Share Geschrieben 23. Januar 2018 Ich kann mir irren aber man müsste es mit einem Ray abfragen können, ob der Ray bei +X, -X, +Y , -Y bzw. bei +Z, -Z getroffen wurde. Schau mal hier: Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Jog Geschrieben 23. Januar 2018 Autor Melden Share Geschrieben 23. Januar 2018 vor 18 Minuten schrieb Kojote: Ich kann mir irren aber man müsste es mit einem Ray abfragen können, ob der Ray bei +X, -X bzw. bei +Z, -Z getroffen wurde. Schau mal hier: Hallo, Erst mal danke für deine Antwort. Das habe ich eigentlich nicht gemeint. Hit.Point wird ja richtig ermittelt aber die Objekte 1,2,3 haben nicht die richtige Lage 3 z.b. sollte eigentlich wie die Cubefläche liegen und nicht stehen oder besser gesagt an die Fläche sich anschmiegen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 23. Januar 2018 Melden Share Geschrieben 23. Januar 2018 Achso, falsch verstanden. Vielleicht hilft dir das weiter: https://unity3d.com/de/learn/tutorials/projects/lets-try-assignments/lets-try-shooting-raycasts-article Mit dem Ray müsstest du nach dem Tutorial auch recht einfach die genauen Vectoren und auch Winkel auslesen können und hier dein Einschussloch setzen können. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 23. Januar 2018 Melden Share Geschrieben 23. Januar 2018 Also hier eine sehr billige Lösung, ist aber noch lange kein Decal-System. Du kannst hier ein Unity-Quad als Decalprefab verwenden. Allerdings wenn das Decal an einer Kante anliegt, gibt es wieder Probleme, da das Decal dann bei der Kante übersteht. Für ein ausgefeiltes System müsste man das Quad des Decals prozedural erzeugen und alle 4 Punkte des Quads an die Oberfläche anpassen. Dabei werden zusätzlich 4 weitere Rays ausgesendet und überprüft, ob das Decal noch auf der Oberfläche liegt. Hier wird es dann komplizierter. Ich denke man kann das Decal dann entweder abschneiden oder anhand der Oberfläche "umklappen". Wenn das Decal sehr klein ist, kann man das Decal auch einfach verschieben, so daß es noch auf der Oberfläche liegt und nicht übersteht. using System.Collections; using System.Collections.Generic; using UnityEngine; public class DecalPlacer : MonoBehaviour { public GameObject decalPrefab; public float decalDistance = 0.01f; // Update is called once per frame void Update () { if (Input.GetMouseButtonDown(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hitInfo; bool hitSomething = Physics.Raycast(ray, out hitInfo); if (hitSomething) { GameObject decal = Instantiate(decalPrefab, hitInfo.point + (hitInfo.normal)*decalDistance, Quaternion.identity); decal.transform.LookAt(hitInfo.point); } } } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Jog Geschrieben 23. Januar 2018 Autor Melden Share Geschrieben 23. Januar 2018 Hallo, Erst mal danke für deine mühe. Manchmal sieht man vor lauter Bäumen den Wald nicht. Hab mit hit.normal u.s.w. alles ausprobiert aber an eine Kombination von diesen Werten " Oh Scham" hab ich nicht gedacht. Werde es demnächst Testen hab leider noch einige Termine. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 23. Januar 2018 Melden Share Geschrieben 23. Januar 2018 So sieht das Ganze dann mit dem oberen Skript aus: Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Jog Geschrieben 27. Januar 2018 Autor Melden Share Geschrieben 27. Januar 2018 Hallo, @Zer0Cool Hab das Script getestet und als dann die selben Fehler auftauchten und ich dein Script als Referenz benutzte stellte ich dann fest das mein Script auch richtig funktioniert. Der Fehler war das ich einen Cube benutzte und die Z Achse anstatt der X Achse Scaliert habe.Daraus habe ich gelernt das man solche alltäglichen Sachen auch mal überprüfen sollte bevor man anfängt stundenlang den Code zu zerbröseln und an sich zweifelt. Nochmals danke für deine mühe. Gruß Jog 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.