Jump to content
Unity Insider Forum

Endgegner in einem Shmup


gombolo
 Share

Recommended Posts

Hallo zusammen,

ich habe jetzt eine ganze Weile versucht mir ein System auszudenken um Gegner in einem Shmup-Game zu bewegen. 

Aktuell habe ich folgen Lösung für mich gefunden:

  • Ich habe mir Code geschrieben mit dem ich Wegpunkt definieren kann
  • Die Wegpunkt kann ich an einen Gegner übergeben
  • Dieser fliegt die Wegpunkt ab und deaktiviert sich, wenn es nicht getroffen wird
  • Ich kann dem Gegner eine Waffe übergeben (Emitter der Geschosse abfeuert)
  • Diese Waffe gibt in definierten Zeitabständen Schüsse ab

Das funktioniert auch recht gut.

Nun will ich einen Endgegner erstellen. Ich könnte das Verhalten des Endgegners wie oben beschrieben beschreiben, aber das soll auch mit Animation gehen?

Ich bin absoluter Anfänger mit Unity und wollte mal von Euch wissen wie Ihr das lösen würdet? 

Mit Animation oder wie oben beschrieben von "Hand". Was hat sich so bewährt? Das ganze über Animation zu machen hat ein paar Vorteile. Vor allem erspart es mir viel Arbeit :)

Bin gespannt auf Eure Meinungen... 

screenshot.png

Link to comment
Share on other sites

Es hängt davon ab, wie interaktiv dein Gegner sein soll.
Wenn es nur eine Aggro-Phase gibt und er auch nicht auf den Player oder einem Beschuss reagieren soll, ist eine Animation ganz ok.
Wenn es aber nicht so ist wird es zum Problem werden, von einer Animationsphase in eine Andere zu kommen, ohne mächtige Beschleunigungen zu erleiden. Ein Überblenden geht nämlich nur bedigt.

Ich würde das über Wegpunkte lösen, die der Gegner abfährt. Da könnte man je nach Phase andere Wegpunkte nutzen und hätte nie das Problem von einer Position im Raum zum neuen Wegpunkt zu gelangen. Es würde immer natürlich aussehen.

 

Link to comment
Share on other sites

Je mehr ich mich in die Nutzung einarbeite erkenne ich, dass was ich zusammengebaut habe eigentlich nichts anderes macht was auch eine Animation machen würde. aber es ist an meine Bedürfnisse angepasst. 

Das Animationssystem ist, jedoch von der Bedienung her sehr einfach handzuhaben. Ich kann das Objekt gleich richtig positionieren und mit den Evens habe ich auch eine einfach Möglichkeit das Verhalten zu beeinflussen... 

Ich experimentiere noch ein wenig mit der Animation. Ich werde wohl die Endgegner über eine Animation realisieren...mal sehen :)

 

Wenn es mal fertig wird soll es so wie unten sein -> ein altes Projekt von mir wo man noch von "Hand" programmiert hat :D 

screenshot.png

Link to comment
Share on other sites

Um nicht immer die gleiche Gegnerbewegung zu zeigen, habe ich bei mir ein EmtyGameObjekt erstellt, welches mit einer festen Geschwindigkeit zu einem Zufallspunkt wandert. Hat es diesen Punkt erreicht, wird ein neuer zufälliger Punkt als Ziel erstellt:

public class RandomMoveOverPlayground : MonoBehaviour
{
    public float enyXMin = -7.0f;
    public float enyXMax = 7.0f;
    public float enyYMin = -0.1f;
    public float enyYMax = 0.1f;
    public float enyZMin = -3.0f;
    public float enyZMax = 20.0f;
    public float enyMoveSpeed = 0.07f;
    Vector3 endPosition;

    private void Start()
    {
        NewRandomPosition();
    }

    void NewRandomPosition()
    {
        float x = Random.Range(enyXMax, enyXMin);
        float y = Random.Range(enyYMax, enyYMin);
        float z = Random.Range(enyZMax, enyZMin);
        endPosition = new Vector3(x, y, z);
    }
    
    void FixedUpdate()
    {
        transform.position = Vector3.MoveTowards(transform.position, endPosition, enyMoveSpeed);

        if (transform.position == endPosition)
        {
            NewRandomPosition();
        }
    }
}

Mein Endgegner folgt nun diesem EmptyGameObjekt:

public class TransformFollowGO : MonoBehaviour
{
    [SerializeField]
    Transform targetGO;
    public float moveSpeed; //EnyB2Side1Main greift hierrauf zu

    
    void FixedUpdate()
    {
        if(targetGO != null)
        {
            transform.position = Vector3.Lerp(transform.position, targetGO.position, moveSpeed); // eine Drehung erfolgt nicht
        }
    }
}

Das ganze sieht dann wie folgt aus (die gelbe Kugel folgt dem EmptyGameObjekt):

https://youtu.be/jSAVpcX5oc0

Link to comment
Share on other sites

Am 4.1.2021 um 22:55 schrieb KaBau:

Um nicht immer die gleiche Gegnerbewegung zu zeigen....

ich möchte die Gegnersteuerung gesteuert machen. Das Spiel umfasst mehrere Arten von Gegner. Animiert Gegner, nicht animierte, welche die sich auf den Spieler ausrichten und schießen, andere schießen Raketen und wieder andere werden als Geschosse von anderen Gegner abgeschossen :)

Das  ganze ist etwas aufwendiger in der Planung.  Das bedeutet, dass der Code und die Verwendung so gestaltet werden muss, dass ein Gamedesigner keine Problem haben soll wenn er ein Level "zusammen klickt"

Für mich ist die Lösung die Unity eigene Animation zu verwenden und bei anderen Gegnern einen selbstgeschriebene Verhaltenssteuerung zu verwenden.  

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...