Jump to content
Unity Insider Forum

Objekt mit x Speed in bestimmte Richtung wegspringen lassen?


TheMono

Recommended Posts

Servus Leute,

ich möchte das ein Objekt (genauer eine Patronenhülse) in einen bestimmten Winkel aus meiner Pistole herausspringt. Also das es an einer bestimmten Position spawnt(ist bereits definiert in Abhängigkeit der Position der Pistole) und dann mit x Speed in einen bestimmten Winkel wegfliegt und dann kurz darauf wieder richtung Boden fliegt. Die Hülse hat einen Rigidbody.

Weiß jemand wie man das mittels Script umsetzen kann? Ich weiß nicht genau wie das mit dem Vector und dem Rigidbody richtig schreibe.

Danke schonmal im Voraus. LG TheMono

Link zu diesem Kommentar
Auf anderen Seiten teilen

Nur so eine Idee...bin auch nicht DER Experte in Unity, aber kann man das nicht mit Partikel machen? 

Kann mir Vorstellen, dass bei deiner Variante du viel von Hand coden musst, aber Unity hat dafür schon fertige Werkzeuge.

  1. Richtungsvektor definieren in die die Kugel fliegen soll 
  2. Richtungsvektor dem Objekt übergeben
  3. Geschwindigkeit hinzumultiplizieren
  4. Geschwindigkeit reduzieren bis auf 0 (Zeitabhängig) -> dann übernimmt den Rest die Gravitation (realistischere Flugbahn)
  5. prüfen ob Geschoss Boden berührt hat

oder 

Partikel verwenden :) 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

Am 9.1.2021 um 02:37 schrieb TheMono:

Weiß jemand wie man das mittels Script umsetzen kann? Ich weiß nicht genau wie das mit dem Vector und dem Rigidbody richtig schreibe.

Ich hab mal ein kleines Script geschrieben, das du einem Gameobject  z.b. einem Cube mit einem Rigidbody zu weisen kannst. Wenn du dann mit der Linken Maustaste auf den Cube klickst wird dieser nach oben katapultiert und fällt wegen aktivierter Gravitation von alleine wieder nach unten.

Vielleicht helfen die Kommentare dir etwas bei der Vorgehensweise.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RigidbodyTest : MonoBehaviour
{
    private Rigidbody myRb; //Eine Variable vom Typ Rigidbody erstellen 

    public float impulskraft = 10.5f; //Kraft deklarieren(Im Inspector einstellbar)

    // Start is called before the first frame update
    void Start()
    {
        myRb = GetComponent<Rigidbody>();//Zuweisen der RigidbodyComponente 

        myRb.useGravity = true;//Gravitation aktivieren

    }

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

    private void OnMouseDown()
    {
        if (myRb) //Ist ein Rigidbody vorhanden? Ja dann weise eine Kraft zu 
        {
            //Zuweisen einer Globalen Kraft in Richtung der Y Achse 
            myRb.AddForce(new Vector3(0, 1, 0) * impulskraft, ForceMode.Impulse);
        }

        else //Kein Rigidbody vorhanden gib eine Fehlermeldung aus
        {
            Debug.Log("! Dein GameObjekt hat kein Rigidbody !");
        }
        
    }
}

Das Beispiel benutzt eine Globale Kraft "AddForce()" eine Globale Kraft wirkt immer entlang der Globalen X,Y,Z Achsen egal wie dein Objekt gedreht ist. Das Gegenstück ist die Lokale Kraft. Um eine Lokale Kraft zu verwenden kannst du "AddRelativeForce()" verwenden.

Ach ja…Ich vergaß zu erwähnen, @TheMono

Nachtrag:

Wenn man dem Rigidbody eine Kraft zuführt, sollte man das in der FixedUpdate() Methode durchführen da die Physik-Engine nicht framebasiert, sondern in Zeitintervallen arbeitet, sonst kann es zu unschönen verhalten kommen.

Aber da du in diesem Beispiel dem Rigidbody nur eine einmalige Kraft zuführst, kann man das auch ohne Probleme außerhalb der FixedUpdate() Methode tun.  

Gruß Jog

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...