Jump to content
Unity Insider Forum

Joints + Recoil system = Chaos


Ultimotick
 Share

Recommended Posts

Ich arbeite an einen multiplayer fps game. Ich benutze joints um angenehme Kamera bewegung(das ist der teil der den Fehler verursacht) und weopon sway zu erzeugen! Sobald ich aber beim schießen mein recoil script ausführe entscheidet sich die Kamera den Boden zu küssen und einen wilden Break dance auszuführen.

Fehlermeldungen:

transform.localRotation assign attempt for 'Recoil' is not valid. Input rotation is { NaN, NaN, NaN, NaN }.
UnityEngine.Transform:set_localRotation (UnityEngine.Quaternion)

Assertion failed on expression: 'CompareApproximately(SqrMagnitude(result), 1.0F)'
UnityEngine.Quaternion:Euler (UnityEngine.Vector3)
 


    private Vector3 currentRotation;
    private Vector3 targetRotation;

    public float recoilX;
    public float recoilY;
    public float recoilZ;
    public float snappiness;
    public float returnSpeed;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        targetRotation += Vector3.Lerp(targetRotation, Vector3.zero, returnSpeed * Time.deltaTime);
        currentRotation = Vector3.Slerp(currentRotation,targetRotation, snappiness * Time.fixedDeltaTime);
        transform.localRotation = Quaternion.Euler(currentRotation);
    }
    public void RecoilFire()
    {
        targetRotation += new Vector3(recoilX, Random.Range(-recoilY, recoilY), Random.Range(-recoilZ, recoilZ));
    }

 

Bild_2023-09-05_172814855.png

2023-09-05_17-25-34.mkv

Link to comment
Share on other sites

Moin!

Diese Zeile ergibt schon einmal nicht so viel Sinn:

targetRotation += Vector3.Lerp(targetRotation, Vector3.zero, returnSpeed * Time.deltaTime);

Du addierst da das Lerp-Ergebnis auf den Vektor obendrauf. Wenn returnSpeed * Time.deltaTime nicht gerade >= 1 ist, sodass sich targetRotation dadurch gar nicht ändert, dann wird dieser Vektor mit jedem Frame immer größer. Und zwar exponentiell. Ich nehme stark an, dass du da recht schnell irgendwelche float-Limits überschreitest, was dann zu den NaN-Werten führt.

Und so nebenbei: Die Verwendung von

Time.fixedDeltaTime

kann hier auch keine sinnvollen Ergebnisse produzieren. Das ist einfach ne Konstante 0.02, sofern du das nicht anderweitig eingestellt hast.

Link to comment
Share on other sites

vor 3 Stunden schrieb Ultimotick:

Wenn ich fixed delta Time benutze müsste es also in fixed Update sein? Danke!

Das ist richtig, aber: Time.deltaTime gibt, wenn du es in FixedUpdate benutzt, denselben Wert zurück wie Time.fixedDeltaTime. Es ist daher schön simpel, einfach überall immer Time.deltaTime zu benutzen.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...