Jump to content
Unity Insider Forum

Schießen


ShV

Recommended Posts

Ich habe folgendes Script:

 public Transform Bulletspawn;
    Rigidbody2D clone;
    public Rigidbody2D bulletPrefap;
    public float bulletSpeed = 100f;
    private readonly int maximaleMunition = 3;
    public int ShotsFired = 0;
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (CrossPlatformInputManager.GetButtonDown("Peng"))
        {
            Attack();
            Debug.Log("Peng1");
        }
       

    }
   void Attack()
    {
        if (ShotsFired < maximaleMunition)
        {
            clone = Instantiate(bulletPrefap, Bulletspawn.position, Bulletspawn.rotation);
            clone.AddForce(Bulletspawn.transform.right * bulletSpeed);
            ShotsFired ++;
        }
       else return;
      
    }

Aber schon nachdem ich einmal den Button ausgelöst habe, funktioniert es nicht mehr. Woran kann das liegen?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich denke mal die Scriptinstanz hat da bereits einen Wert > 0 gespeichert und daher fängt er nicht bei 0 an, Wenn du den Code so anpasst sollte es funktionieren:

    private int ShotsFired = 0;

    // Start is called before the first frame update
    void Start()
    {
       ShotsFired = 0;
    }

und nimm aus der Methode mal das "return" raus, dass hat da auch nichts zu suchen :) :

 void Attack()
    {
        if (ShotsFired < maximaleMunition)
        {
            clone = Instantiate(bulletPrefap, Bulletspawn.position, Bulletspawn.rotation);
            clone.AddForce(Bulletspawn.transform.right * bulletSpeed);
            ShotsFired ++;
        }
                                          
    }

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bei mir gehts, hier das Script, vielleicht das Script am GO noch einmal entfernen und noch einmal neu an ein GO in die Scene ziehen (damit er ggf. gespeicherte Werte verwirft):
(ich hab nur mal den CrossPlatformInputManager bei mir entfernt, um einfacher zu Testen)

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

public class Bullet : MonoBehaviour
{
    public Transform Bulletspawn;
    Rigidbody2D clone;
    public Rigidbody2D bulletPrefap;
    public float bulletSpeed = 100f;
    private readonly int maximaleMunition = 3;
    private int ShotsFired = 0;
    // Start is called before the first frame update
    void Start()
    {
        ShotsFired = 0;
    }

    // Update is called once per frame
    void Update()
    {
       if (Input.GetButtonDown("Fire1"))
        {
            Attack();
            Debug.Log("Peng1");
        }
    }
    void Attack()
    {
        if (ShotsFired < maximaleMunition)
        {
            clone = Instantiate(bulletPrefap, Bulletspawn.position, Bulletspawn.rotation);
            clone.AddForce(Bulletspawn.transform.right * bulletSpeed);
            ShotsFired++;
        }
    }
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Bei mir hatte es vor kurzem ja auch noch funktioniert. Und auch wenn ich ShotsFired aus meinem Script rausnehme, kann ich nur 1 mal schießen.

 

1. Müsste das Debug.Log nicht eigentlich immer in der Konsole stehen, wenn  ich den Button auslöse?

Ich glaube nämlich, dass der Button nicht mehr reagiert, wenn er einmal ausgelöst wurde.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn in der Konsole "Collapse" aktiviert ist, dann zählt sie rechts in der Zeile einfach nur hoch.

Bei einem so simplen Script würde ich sagen: Solange keine Exception fliegt oder das Script anderweitig deaktiviert wird, dann solltest du deine Debug.Logs auch kriegen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 5 Stunden schrieb ShV:

Das Debug.Log kommt auch nur beim ersten Mal. Bedeutet das, dass vermutlich der Button nach dem ersten Mal nicht mehr reagiert?

Sonst debugge einfach mal so, dann kann die Collaps-Funktion der Console (wie Sascha schon sagte) nicht mehr zuschlagen, weil er den Timestamp einzeln loggt:

    // Update is called once per frame
    void Update()
    {
        if (Input.GetButtonDown("Fire1"))
        {
            Attack();
            Debug.Log(Time.time + ": Peng1");
        }

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...