Jump to content
Unity Insider Forum

Problem mit Rays


Ultimotick

Recommended Posts

Moin!

vor 1 Stunde schrieb Ultimotick:

Warum funktioniert das nicht?

Du solltest immer erstmal die Fehlermeldungen anschauen. Und wenn du eine hast und sie dir nicht weiterhilft, solltest du sie zu deiner Frage mit dazu geben. Sonst müssen wir ja raten, was los ist. Wenn du die Fehlermeldung allerdings schon hast, dann können wir sie dir ggf. einfach erklären.

Dein Problem liegt hier:

Ray pos = new Ray(...);

[...]

if(Physics.Raycast(Camera.main.ScreenPointToRay(pos)))

"pos" ist ein Ray (und kein Vektor, wie der Name vermuten lässt). Du versuchst hier, einen Ray in ScreenPointToRay reinzustopfen, was aber nicht geht. Die Methode will einen Vector3 haben, keinen Ray. Schreib stattdessen einfach

if(Physics.Raycast(pos))

Das sollte gehen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Vielen Dank👍, die Fehler sind jetzt weg und Sound und Clone vom Bullet hole kommen auch. Nur der Clone entsteht bei 0 0 0 und nicht bei dem Hit Point .🤔

Ich weiß das das jetzt fast so ist als ob du (oder Andere) den ganzen Code schreiben würdest, aber als Blutiger Anfänger kann ich leider nichts anderes machen außer nochmal zu fragen. Was ist falsch gelaufen ?

PS: Fehlermeldungen gibt es diesmal nicht.

Pistole.cs

Link zu diesem Kommentar
Auf anderen Seiten teilen


using UnityEngine;

public class Pistole : MonoBehaviour
{
    public GameObject Bullet_Hole;
    public AudioSource Shootsound;



    public float shootspeed;
    private float waittime;
    private RaycastHit hit;

    // Update is called once per frame
    void Update()
    {
        shoot();
    }

    void shoot()
    {
        if (Input.GetMouseButtonDown(0) && waittime <= 0)
        {
            waittime = 1;

            Ray pos = new Ray(Camera.main.transform.position, Camera.main.transform.forward);

            Shootsound.Play();

            if (Physics.Raycast(pos))
            {
                Instantiate(Bullet_Hole, hit.point, Quaternion.FromToRotation(Vector3.forward, hit.normal));

            }

            waittime -= Time.deltaTime * shootspeed;

        }

    }
}

Richtig so?

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 24 Minuten schrieb Ultimotick:

Richtig so?

Jap :)

vor 3 Stunden schrieb Ultimotick:

Ich weiß das das jetzt fast so ist als ob du (oder Andere) den ganzen Code schreiben würdest, aber als Blutiger Anfänger kann ich leider nichts anderes machen außer nochmal zu fragen. Was ist falsch gelaufen ?

Das ist okay. Wer hier hilft, hilft gerne. Und wir erklären ja eher, was los ist und wie du das Problem lösen kannst. Solange du was lernst und nicht einfach "dein Script abholst und wieder gehst", ist alles in Ordnung :)

Aber mal zum Problem.

Der Code sieht in dieser Hinsicht in Ordnung aus. Die letzte Anweisung ("waittime -= ...") sollte vielleicht noch aus dem if-Block raus, aber das hat ja mit der Position nix zu tun. Ich sehe zwei mögliche Fehler:

  1. Dein Ray trifft irgendetwas unerwartetes. Wäre komisch, dass da 0,0,0 als Position herauskommt, aber möglich wäre sowas generell trotzdem. Wenn du mit Breakpoints debuggen kannst, kannst du mal einen Breakpoint auf die Instantiate-Zeile setzen. Wenn nicht, pack einfach mal diese Zeile vor das Instantiate:
    Debug.Log(hit.point); // Zeigt den Hitpoint in der Konsole an
    Mit beiden Varianten findest du den Wert von hit.point heraus. Steht in der Konsole (0,0,0) oder etwas anderes?
  2. Sollte hit.point korrekt sein, dann wird das Objekt auch auf der richtigen Position gespawnt. Wenn das Ding trotzdem von Anfang an woanders ist, kann das nur noch daran liegen, dass irgendein Code (vielleicht ja nicht einmal dein eigener!) das Objekt sofort nach dem Spawnen wieder verschiebt. Was hast denn du so für Komponenten auf deinem Einschlussloch-Prefab?
Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...