STU Geschrieben 2. August 2020 Melden Share Geschrieben 2. August 2020 Hi zusammen, ich habe mir in meinem 2D Spiel eine Höhle gebaut in der Sprinnen alle x Sekunden auftauchen sollen. Diese haben alle eine unterschiedliche Geschindigkeit und eine unterschiedliche Reichweite. Eigentlich sollten alle vor der Höhle loslaufen. Sie tauchen aber auch einfalch mal ein ganzen stück daneben auf. Ich vermute dass sie schon loslaufen, bevor sie überhaupt sichtbar sind. Wie kann ich dass ändern. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 3. August 2020 Melden Share Geschrieben 3. August 2020 Magst du in Zukunft deinen Code als Code und nicht als Screenshot hochladen? Dafür einfach über dem Textfeld den <>-Knopf benutzen, danke Zum Thema: Ohne, dass du das so angibst, ist ein Objekt nicht unsichtbar, obwohl es schon existiert. Normalerweise würde ich am ehesten auf einen Rigidbody auf der Spinne tippen, und dass dieser nach dem Spawnen erstmal eine Kollision feststellt und sich aus dem anderen Collider herausteleportiert. In deinem Fall aber nehme ich an, dass der erste Scriptausschnitt aus dem Objekt kommt, das du im zweiten Code wiederum als "Spawnpoint" festgelegt hast? Dein Spawnpunkt wandert also die ganze Zeit von links nach rechts und wieder zurück. Ist doch klar, dass die Spinnen dann an unterschiedlichen Punkten spawnen? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
STU Geschrieben 3. August 2020 Autor Melden Share Geschrieben 3. August 2020 ok, mach ich. Danke für die Info! unsichtbar meinte ich nicht direkt. Eher dass das Objekt schon geladen wurde aber bis es graphisch auch sichtbar ist hat sich das Objekt schon bewegt. Warum bewegt sich der Spawnpoint? Das erste ist das Objekt hier die Spinne die sich auch bewegt. Das zweite Skript ist die Höhle, die wiederum eine feste Position hat. Dort liegt auch der SpawnPoint. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 3. August 2020 Melden Share Geschrieben 3. August 2020 vor 58 Minuten schrieb STU: Eher dass das Objekt schon geladen wurde aber bis es graphisch auch sichtbar ist hat sich das Objekt schon bewegt. Das passiert nicht, sofern du nicht mit AssetBundles arbeitest oder dir dafür explizit ein System schreibst. vor 59 Minuten schrieb STU: Das erste ist das Objekt hier die Spinne die sich auch bewegt. Ach sooo, verstehe. Okay. Das Problem ist, dass Time.time nicht für jedes Objekt einzeln von 0 anfängt zu zählen, sondern seit Start des Spiels. Wenn eine Spinne innerhalb von, sagen wir, 10 Sekunden eine volle "Runde" läuft, und deine Höhle spawnt 5 Sekunden nach Spielbeginn, dann spawnt die Spinne zwar ganz normal, wird aber gleich da hinbewegt, wo sie nach der Formel nach 5 Sekunden halt wäre. Ich würde, alleine schon für die Nachvollziehbarkeit des Codes, zu Coroutinen raten statt zu einer zeitabhängigen Formel in Update. Könnte z.B. so aussehen: private void OnEnable() { StartCoroutine(Patrol()); } private IEnumerator Patrol() { var left = transform.position + Vector3.left * radius; var right = transform.position + Vector3.right * radius; while(enabled) { yield return MoveTo(left); yield return MoveTo(right); } } private IEnumerator MoveTo(Vector3 target) { do { transform.position = Vector3.MoveTowards(transform.position, target, speed * Time.deltaTime); yield return null; } while (transform.position != target); } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
STU Geschrieben 3. August 2020 Autor Melden Share Geschrieben 3. August 2020 Hi Sascha, vielen vielen Dank. Jetzt funktioniert es 😄 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
STU Geschrieben 8. August 2020 Autor Melden Share Geschrieben 8. August 2020 Hi Sascha, jetzt habe ich doch noch eine Frage zu dem Skript. Es funktioniert alles soweit. Die Spinne läuft von rechts nach links und umgekehrt. Dies funktioniert aber nur ohne Rigidbody 2D. Wenn ich dieses aktiviere, läuft sie nur noch eine Stecke entlang, dreht aber nicht mehr um. Sie bleibt einfach an der stelle hängen (dort ist kein Hindernis) Woran liegt das? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 8. August 2020 Melden Share Geschrieben 8. August 2020 Kann ich gerade nicht sagen, aber da du die Bewegung nicht über den Rigidbody laufen lässt, sollte dieser entsprechend eingestellt werden. Ich nehme an, du willst den Rigidbody für Kollisionen verwenden? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
STU Geschrieben 8. August 2020 Autor Melden Share Geschrieben 8. August 2020 ja, ich lasse wiederum kleine spinnen auftauchen, wenn die große tot ist. Jetzt hätte ich halt gerne das die schwerkraft wirk und sie zu Boden fallen nicht in der Luft laufen Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 8. August 2020 Melden Share Geschrieben 8. August 2020 Wenn du Kräfte haben willst, gilt weitestgehend™: Ganz oder gar nicht. Wenn du einen Rigidbody benutzen willst, dann solltest du diesen auch vollständig für die Bewegung nutzen. Aktuell teleportierst du ja deine Spinne in jedem Frame ein kleines Stück. Du setzt dabei ganz manuell in jedem Frame die Zielposition. Wenn du jetzt Gravitation haben willst, hätte das Einfluss darauf, wo die Zielposition liegt. Sonst würdest du ein Stück nach unten fallen, aber dann sofort wieder auf die Ursprungshöhe zurückkommen, weil deine Teleport-Zielposition die neue Höhe nicht automatisch mit einbezieht. Wenn du aber einfach auf das, was der Rigidbody macht, deine Patrouille obendraufrechnest, dann kann das zu unerwünschten Ergebnissen kommen, weil der Rigidbody sich schon ohne dein Script horizontal bewegen kann. Du kannst also entweder komplett auf Rigidbody-Bewegung umsteigen - Ich würde dann dazu raten, in FixedUpdate den velocity-Vektor zu nehmen, die X-Komponente auf "links" oder "rechts" zu setzen, die Y-Komponente sein zu lassen und das dann wieder in den RB zu füttern - oder halt komplett beim eigenen Script bleiben. Dann müsstest du den "bin ich auf dem Boden"-Check und die Gravitation selber bauen. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
STU Geschrieben 9. August 2020 Autor Melden Share Geschrieben 9. August 2020 Ok, danke für die Tipps Ich habe mich gestern etwas eingelesen und versuche es jetzt mit Rigidbody. Um es ersmal zu testen wollte ich die Figur mit der Tastatur bewegen. Das funktioniert, aber nicht ganz richtig. Wenn ich jetzt nach rechts laufe ist alles ok. Wenn ich nach links laufe , funktioniert das auch. Nur danach lässt die Schwerkraft nach und ich hebe ab. Wie gesagt aber nur wenn ich nach links laufe. Woher kommt das? public float speed = 100f; Rigidbody2D rb; private void Awake() { rb = GetComponent<Rigidbody2D>(); } private void Update() { float xMove = Input.GetAxisRaw("Horizontal"); rb.velocity = new Vector2(xMove , rb.velocity.y).normalized * speed * Time.deltaTime; } } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
STU Geschrieben 9. August 2020 Autor Melden Share Geschrieben 9. August 2020 das Thema oben hat sich erledigt. Dafür ein neues ich möchte dass die Collider der einzelnen spinnen keinen Einfluss aufeinander haben. Das heißt, dass sie sich "überholen" können. Ich habe das wie folgt versucht. Funktioniert leider nicht public Transform ignorierenPrefab; void Start() { var igno = Instantiate(ignorierenPrefab) as Transform; Physics2D.IgnoreCollision(igno.GetComponent<Collider2D>(), GetComponent<Collider2D>()); } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Sascha Geschrieben 9. August 2020 Melden Share Geschrieben 9. August 2020 Pack die Spinnen alle auf einen Layer und Stelle Kollisionen innerhalb dieses Layers in der Layer Collision Matrix aus. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
STU Geschrieben 9. August 2020 Autor Melden Share Geschrieben 9. August 2020 😲 you are the best. hab mir die ganze Zeit schon Videos angeschaut und es hat einfach nicht funktioniert. Keine Ahnung warum und dann geht das sooo einfach. 👏 Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.