Jomnitech Geschrieben 30. Juli 2018 Melden Share Geschrieben 30. Juli 2018 Hallo Zusammen Habe ein kleines Problem mit einem Raycast, und zwar scheint es so als ob der Impact Point sich verzieht wenn ich ein Objekt treffe. Komm gerade nicht drauf wo der Fehler liegt, ev. kann mir jemand helfen? Script sieht wie folgt aus: void Shoot() { IsShooting = true; Debug.Log("shoot"); //Substract Ammo currentAmmo--; // RaycastHit hit; for (int i = 0; i < MultiBullets; i++) { currentBullets++; // Weapon Scattering / Waffenstreuung //transform.localEulerAngles = new Vector3(0, 0, Random.Range(-WScattering, WScattering)); if (Physics.Raycast(transform.position, transform.right, out hit, range,layer_mask)) { Debug.Log(hit.transform.name); CharacterStats target = hit.transform.GetComponent<CharacterStats>(); if (target != null) { _finalDamage = Mathf.Abs( Random.Range(_minDamage, damage)+(damage*.01f* pStats.rangeDamage.GetValue())); target.TakeDamage(_finalDamage); } //Tracer Effect GameObject tracerGO = Instantiate(TracerEffect, effectSpawner.transform.position, transform.rotation); TracerTarget effect = tracerGO.GetComponent<TracerTarget>(); effect.startMarker = effectSpawner.transform.position; effect.endMarker = hit.point; Destroy(tracerGO, 3f); if(hit.transform.tag == "Enemy") { //Blood Effect GameObject bloodGO = Instantiate(bloodEffect, hit.point, Quaternion.LookRotation(hit.normal)); } else { //Impact Effect GameObject impactGO = Instantiate(impactEffect, hit.point, Quaternion.LookRotation(hit.normal)); EasyDecal decal = EasyDecal.ProjectAt(bulletHole.gameObject, hit.collider.gameObject, hit.point, hit.normal); } } else { print("noHit"); //Tracer Effect GameObject tracerGO = Instantiate(TracerEffect, effectSpawner.transform.position, transform.rotation); TracerTarget effect = tracerGO.GetComponent<TracerTarget>(); effect.startMarker = effectSpawner.transform.position; effect.endMarker = effectSpawner.transform.position + transform.right * range; Destroy(tracerGO, 3f); } //Add Force to hit Object if (hit.rigidbody != null) { hit.rigidbody.AddForce(-hit.normal * impactForce); } } if (currentBullets >= MultiBullets) { currentBullets = 0; } } Fehler sieht so aus: Links: Ich schiesse am Objekt vorbei, Raycast ist gerade (so wie es sein soll) Rechts: Ich schiesse auf das Objekt, Raycast hit.point ist weiter unten. Edit: Ev. noch anzumerken dass ich vorher transform.forward statt transform.right erwendet habe und da ist es mir nie aufgefallen, doch da ich jetzt die Waffen überarbeitet habe, habe ich das so angepasst, müsste aber doch trotzdem gehen? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
thewhiteshadow Geschrieben 30. Juli 2018 Melden Share Geschrieben 30. Juli 2018 Das passiert, weil die Kugel zu schnell für die Erkennung ist. stell beim rigidbody mal die Detection auf continuierlich. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Jomnitech Geschrieben 30. Juli 2018 Autor Melden Share Geschrieben 30. Juli 2018 @thewhiteshadow Verstehe deine Antowrt nicht ganz. Da ist kein Rigidbody drauf, ist nur ein Raycast, keine physikalische Kugel. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Kojote Geschrieben 30. Juli 2018 Melden Share Geschrieben 30. Juli 2018 Es braucht immer mindestens einen RB um eine Kollision zu erkennen. Sind Projektile oder halt Objekte zu schnell, kann es sein das der Trigger nicht ausgelöst wird, da die Abfrage ob es zu einer Kollision kommt nicht permanent läuft. Frag mich jetzt aber nicht in welchem Zeitintervall, den kenne ich leider nicht. Du müsstest halt wie thewhiteshadow schon sagte beim RB die Detection auf continuierlich einstellen, damit dauerhaft kontrolliert wird, ob eine Kollision stattfindet. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 30. Juli 2018 Melden Share Geschrieben 30. Juli 2018 Was sind denn das für Aussagen hier? Ein Raycast ist absolut ausreichend, um einen Schuss zu simulieren, und entsprechend ist hier kein Rigidbody im Spiel. Am Code kann ich soweit gerade nichts erkennen. Was mich etwas wundert ist, dass du 3D-Physik für etwas benutzt, was mir wir ein reines 2D-Spiel aussieht. Hast du mal von oben geschaut, ob der Schuss vielleicht einfach nur etwas von der Kamera weggeht? Ansonsten erstmal OnDrawGizmos rauskramen und die ganzen relevanten Positionen anzeigen lassen. Kann es alternativ sein, dass du einen LineRenderer benutzt und in deinem TracerTarget-Script world space und local space durcheinander kommen? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Jomnitech Geschrieben 31. Juli 2018 Autor Melden Share Geschrieben 31. Juli 2018 @Sascha vor 18 Stunden schrieb Sascha: was mir wir ein reines 2D-Spiel aussieht Habe ich nur gemacht damit es etwas ersichtlicher ist was ich meine, ist ansonsten schon ein 3d Game. vor 18 Stunden schrieb Sascha: Ansonsten erstmal OnDrawGizmos rauskramen und die ganzen relevanten Positionen anzeigen lassen. Hat mir sehr weitergeholfen. War ein Denkfehler von mir, da der Raycast ja immer von der 0 Position aus startet. Ich bin irgendwie davon ausgegangen, dass bei Transform right der Raycast auch von der rechten Seite aus startet, weiss auch nicht warum 🙃. Wie dem auch sein, als transform Referenz die Mündung statt die Waffe selbst gewählt und voilà, alles so wie es sein soll. Vielen Dank für deine Hilfe 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.