Jump to content
Unity Insider Forum
Sign in to follow this  
Kojote

Ständige Neuauslösung

Recommended Posts

Grüße!

Hab ein Problem mit dem angehängten Script. Es funktioniert recht einfach, sobald der Chrakter auf ein bestimmtes Feld tritt, soll er von einem Teleporterfeld an das nächste Teleportiert werden. Ich habe schon eine Sicherheitsvariable "teleporterSperre" eingebaut. Dass, sobald der Charakter auf der anderen Seite ist, nicht dessen Teleporter auch ausgelöst wird. Problem ist nun, dass genau trotzdem dies passiert und der Charakter in einer Endlosschleife hin und her teleportietr wird. Hat einer eine zündende Idee, wie ich das verhindern kann?

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

public class Teleporter : MonoBehaviour {

    public enum neustartRichtung : short {
            Unbekannt,
            PositivX,
            NegativX,
            PositivZ,
            NegativZ,
    }
    public neustartRichtung neueRichtungZiel = neustartRichtung.Unbekannt;

    private GameObject charakter;
    public GameObject zielTeleporter;

    private Charaktersteuerung charakterSteuerung;

    private Vector3 teleporterPosition;
    private Vector3 zielTeleporterPosition;

    private bool charakterTeleportieren = false;
    public bool teleporterSperre = false;

    private void Start() {
        zielTeleporterPosition = new Vector3(zielTeleporter.transform.position.x, zielTeleporter.transform.position.y, zielTeleporter.transform.position.z);
    }

    private void Update() {
        if(charakterTeleportieren == true) {
            if (charakter.transform.position == teleporterPosition) {
                if (neueRichtungZiel == neustartRichtung.PositivX) {
                    charakter.transform.position = new Vector3(zielTeleporterPosition.x, charakter.transform.position.y, zielTeleporterPosition.z);
                    charakterSteuerung.richtung = Charaktersteuerung.richtungCharakter.PositivX;
                    charakter.transform.Rotate(0, 0, 0);
                    charakterSteuerung.alleBewegungenDeaktivieren = false;
                    zielTeleporter.GetComponent<Teleporter>().teleporterSperre = false;
                    charakterTeleportieren = false;

                } else if (neueRichtungZiel == neustartRichtung.NegativX) {
                    charakter.transform.position = new Vector3(zielTeleporterPosition.x, charakter.transform.position.y, zielTeleporterPosition.z);
                    charakterSteuerung.richtung = Charaktersteuerung.richtungCharakter.NegativX;
                    charakter.transform.Rotate(0, 180, 0);
                    charakterSteuerung.alleBewegungenDeaktivieren = false;
                    zielTeleporter.GetComponent<Teleporter>().teleporterSperre = false;
                    charakterTeleportieren = false;

                } else if (neueRichtungZiel == neustartRichtung.PositivZ) {
                    charakter.transform.position = new Vector3(zielTeleporterPosition.x, charakter.transform.position.y, zielTeleporterPosition.z);
                    charakterSteuerung.richtung = Charaktersteuerung.richtungCharakter.PositivZ;
                    charakter.transform.Rotate(0, -90, 0);
                    charakterSteuerung.alleBewegungenDeaktivieren = false;
                    zielTeleporter.GetComponent<Teleporter>().teleporterSperre = false;
                    charakterTeleportieren = false;

                } else if (neueRichtungZiel == neustartRichtung.NegativZ) {
                    charakter.transform.position = new Vector3(zielTeleporterPosition.x, charakter.transform.position.y, zielTeleporterPosition.z);
                    charakterSteuerung.richtung = Charaktersteuerung.richtungCharakter.NegativZ;
                    charakter.transform.Rotate(0, 90, 0);
                    charakterSteuerung.alleBewegungenDeaktivieren = false;
                    zielTeleporter.GetComponent<Teleporter>().teleporterSperre = false;
                    charakterTeleportieren = false;

                } else {
                    Debug.Log("FEHLER: Keine Richtung des Teleporters angegben!");
                }
            } else {
                charakter.transform.position = Vector3.MoveTowards(charakter.transform.position, teleporterPosition, charakterSteuerung.charakterGeschwindigkeit);
            }
        }
    }

    private void OnTriggerEnter(Collider other) {
        if (other.tag == "Charakter_1" && teleporterSperre == false) {      
            charakterSteuerung = other.GetComponent<Charaktersteuerung>();
            teleporterPosition = new Vector3(transform.position.x, other.transform.position.y, transform.position.z);
            charakter = other.gameObject;
            charakterSteuerung.alleBewegungenDeaktivieren = true;
            zielTeleporter.GetComponent<Teleporter>().teleporterSperre = true;
            charakterTeleportieren = true;      
        }
    } 
}

 

Share this post


Link to post
Share on other sites

So wie ich das sehe setzt du den bool charakterTeleportieren bei ankunft des Spielers zum Teleportziel auf false. Da du dann allerdings den OnTriggerEnter wieder auslößt wirst du wieder weg geportet^^ also entweder das zurücksetzen nach einer bestimmten zeit auslösen oder beim Verlassen des Triggers der dich normalerweise wegportet.

Share this post


Link to post
Share on other sites

Du setzt als allerletzten Befehl charakterTeleportieren auf true. Ich denke da wird zuerst dein Code ausgelöst, und hinterher dann der onTriggerEnter. Dieser setzt es dann wieder auf true, da du teleporterSperre in deiner if-abfrage am ende immer auf false setzt (womit die Bedingung in onTriggerEnter immer erfüllt sein wird). Am besten wie schon gesagt wurder einen Timer einbauen.

Alles nach besten Wissen und Gewissen. Falls ich falsch bin, einfach widerlegen.

 

Share this post


Link to post
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...
Sign in to follow this  

×
×
  • Create New...