Unity 2D gleicher Zustand für verschiedene Gegner Ausgabe

stimmen
0

Ich mache 2D-Plattformer und im seltsamen Bug bekommen - wenn ich einen Gegner treffen, ein jeder sonst dieses Typs den gleichen Zustand zu bekommen. Ich meine, ich wollte, dass sie „wütend“ Zustand einzutreten, wenn mein Player mit dem Schwert einen von ihnen getroffen.

Problem sieht wie folgt aus:

-> Hit Enemy1 mit Schwert,

-> Enemy1 wird immer Schaden und geht zu „wütend“ Zustand,

-> Enemy2 / 3/4/5 nicht Schaden, aber ging in wütend -Zustand.

Wenn der Schaden immer für jeden von ihnen individuell ist also warum bin ich leide, diese Art von Situation. Ich denke, die Sache ist in meinem Schaden Script. Wenn jemand eine Idee hat, wäre ich froh, das zu hören. Danke im Voraus.

public void DealDmg()
{
    blob = FindObjectOfType<EnemyScript>();

    if (attackPos.gameObject.activeSelf == true)
    {

        Collider2D[] enemiesToDamage = Physics2D.OverlapCircleAll(attackPos.position, attackRange, whatIsEnemy);

        for (int i = 0; i < enemiesToDamage.Length; i++)
        {
            EnemyScript enemyScript = enemiesToDamage[i].GetComponent<EnemyScript>();

            enemyScript.GetComponent<EnemyScript>().TakeDmg(damage);

            if (gameObject.GetComponent<PlayerControls>().facingRight == true)
            {
                enemyScript.GetComponent<Rigidbody2D>().AddForce(new Vector2(30f, 20f), ForceMode2D.Impulse);

                StartCoroutine(ResetValues);

                blob.CalmLogic();

            }
            else if (gameObject.GetComponent<PlayerControls>().facingRight == false)
            {
                enemyScript.GetComponent<Rigidbody2D>().AddForce(new Vector2(-30f, 20f), ForceMode2D.Impulse);

                StartCoroutine(ResetValues);

                blob.CalmLogic();

            }
        }
        attackPos.gameObject.SetActive(false);
    }
}
    public IEnumerator ResetValues()
{
    gotHit = true;
    blob.gotAngry = true;
    yield return new WaitForSeconds(resetValuesDelay);
    gotHit = false;
    yield return new WaitForSeconds(resetValuesDelay);
    blob.gotAngry = false;
}
Veröffentlicht am 20/10/2018 um 12:34
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
1

Spur feindlicher Staat innerhalb des Feindes

Im Moment sieht es aus wie Sie Ihren Code auf dem Player läuft und der Spieler wird die Verfolgung von feindlichen Staates. Das ist falsch. Ihr Player Skript sollte nie etwas wissen (viel weniger ändern!) , Um die Eigenschaften des Feindes. Alle Spieler tun sollten , ist:

  • wenn der Spieler erfolgreich einen Gegner trifft, sagt der Spieler den Feind „Sie haben getroffen worden!“
  • Der Feind Skript nimmt dann diese Informationen (wie zum Beispiel, wie viel Schaden, welchen Schaden Typ war es, etc.) und beschäftigen sich mit sich selbst: den Schaden zu reduzieren ( „bin ich Rüstung tragen?“), Um den Schaden zu verbessern ( "bin ich schwach, um Feuer ? ") und so weiter und so fort ... wie bei den Spielern wütend, und der resultierenden Abkühlung vor der wieder ruhig.

Ihr Player Skript muss nicht wissen (und kümmert sich nicht!) Zu dieser Information und jeder Versuch, um zu versuchen und zu handhaben es hier ist eine Torheit. Sobald Sie ändern, wie viele Feinde gibt, oder einen neuen Feind Art erstellen, die etwas anderes tut am Ende mit einem riesigen Haufen von nutzlosen Plunder bis Sie nicht verwalten können.

Beantwortet am 20/10/2018 um 15:47
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more