I.Kalis Geschrieben 13. November 2019 Melden Share Geschrieben 13. November 2019 Hallo liebe Community, Ich arbeite zurzeit an einem RST-Game und habe ein Script geschrieben welches mich Objekte durch Buttons auf einem Boden Platzieren lässt. Dieses Script basiert darauf, dass wenn der Button gedrückt wird, wird die durch den Raycast generierte Mausposition auch zur Position des Objektes wird, bis es platziert wurde. Nun habe ich folgendes Problem: Der Layer der Objekte muss auf dem Layer IgnoreRaycast liegen, weil er sonst die Objekte immer weiter in die Höhe baut, da die Mausposition wenn das Objekt gespawnt ist auf dem Objekt liegt und das Objekt sich immer auf die neue Mausposition aufbaut. Ich möchte, wenn das Objekt platziert ist, wieder darauf zurückgreifen und es zum Beispiel nochmals verschieben können. Das funktioniert aber nicht weil das Objekt vom Raycast Ignoriert wird. kann ich irgendwie den Layer im Code ändern während der Laufzeit des Spiels ? ich würde mich sehr über eine Antwort freuen und hoffe ich habe es verständlich erklärt. mit freundlichen Grüßen Immanuel kalis Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 13. November 2019 Melden Share Geschrieben 13. November 2019 Am 13.11.2019 um 13:14 schrieb I.Kalis: Der Layer der Objekte muss auf dem Layer IgnoreRaycast liegen Muss er nicht. Du kannst bei jedem Raycast eine LayerMask mitgeben, die bestimmt, welche Layer getroffen werden können. Darüber hinaus kannst du nach dem Raycast das getroffene Objekt filtern. Eine LayerMask kannst du z.B. so benutzen: [SerializeField] private LayerMask layers; private void Update() { RaycastHit hit; if (Physics.Raycast(ray, out hit, Mathf.Infinity, layers)) { // ... } } Dann kannst du im Inspektor ein Häkchen bei jedem gewünschten Layer setzen. Da musst du aber bedenken, dass der Ray blind durch alles durchgeht, was nicht der LayerMask entspricht. Du kannst also durch ein platziertes Gebäude hindurch den Boden treffen. Üblicherweise würde man ja aber wollen, dass man einfach nicht bauen kann, wenn die Maus über einem Gebäude ist. Du würdest also eher einfach Raycasten und dann schauen, was getroffen wurde: private void Update() { RaycastHit hit; if (Physics.Raycast(ray, out hit)) { if (CanBuildOn(hit.collider)) { // ... } } } private bool CanBuildOn(Collider c) { // Check if c is ground } CanBuildOn kann jetzt beliebig aussehen. Wieder ein bestimmter Layer wäre möglich, aber auch eine Komponente auf dem Boden-GameObject. Von Tags würde ich wie üblich abraten. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
I.Kalis Geschrieben 17. November 2019 Autor Melden Share Geschrieben 17. November 2019 Dankeschön Sascha für diese sehr hilfreiche Antwort. Vielen Dank auch für die Erklärung am Beispiel. Ich bin mir sicher ich kann dadurch das Problem lösen. mit freundlichen Grüßen Immanuel Kalis 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.