..Mein Roboter seine Route und Ich..

PvtZwai

Mitglied
Hallo,
ich versuche einen Roboter patrouillieren zulassen.
Nun möchte ich immer wenn er einen der Wegpunkte erreicht hat eine Animation abspielen. Jedoch finde ich die passende Schnittstelle im Script nicht und da ich eigentlich keine Ahnung vom programmieren habe (habe das "Patrol-Script" aus dem Internet, komme ich leider echt nicht weiter.

Im Prinzip will ich also nur ,dass das Script die aktuelle Position mit der Position des Waypoint-Array vergleicht und wenn die aktuelle Position einem der Wegpunkte entspricht dann soll etwas passieren (eigentlich eine Animation aber in diesem Fall eine Debug.Log message)

Der Vergleich ist in Zeile 43, aber es gibt vielleicht eine andere passende Schnittelle im Script die genau das schon herausgibt was ich suche, leider finde ich sie nicht oder sie existiert wirklich nicht.
Patrol Script.PNG
Ich bin leider echt unerfahren im Programmieren aber ich würde mich über Hilfe sehr freuen.
Danke.
 
Zuletzt bearbeitet:

vfl_freak

Premium-User
Moin,

bitte poste den Code NICHT als Bild, sondern füge ihn mit den Java-Codestags ein (Button "Einfügen" im Editor) !!
So kann er weder in Teilen noch komplett zitiert werden (und es wird wohl keiner Lust haben, dass alles ggf. abzutippen) !!

Gruß Klaus
 

PvtZwai

Mitglied
Sorry,
hier der Code in c# :

Code:
public class Patrol : MonoBehaviour {

        public Transform [] Waypoints;
        public float Speed;
        public int curWayPoint;
        public bool doPatrol = true;
        public Vector3 Target;
        public Vector3 MoveDirection;
        public Vector3 Velocity;

    void Update ()
        {
            if (curWayPoint < Waypoints.Length) {
                Target = Waypoints [curWayPoint].position;
                MoveDirection = Target - transform.position;
                Velocity = GetComponent<Rigidbody>().velocity;

                if (MoveDirection.magnitude < 1)
                {
                    curWayPoint ++;
                } else {
                    Velocity = MoveDirection.normalized * Speed;
                }
            }
            else
            {
                if(doPatrol)
                {
                    curWayPoint = 0;
                }
                else
                {
                    Velocity = Vector3.zero;
                }
            }
            /* ich weiß leider nich wie der Vergleich hier funktionieren soll, so allerdings nicht ;D
            if (transform.position = Waypoints)
                Debug.Log(message:"hier");
*/
            GetComponent<Rigidbody>().velocity = Velocity;
            transform.LookAt (Target);
        }

}
 

Technipion

Erfahrenes Mitglied
Ich hab mir deinen Code ehrlichgesagt nicht wirklich richtig durchgelesen, aber spontan würde ich mal sagen "=" ist eine Zuweisung, kein Vergleich. Vergleichen kannst du mit "==".
Btw: Falls du das Skript später mal auf einem echten Roboter laufen lassen willst, der seine reale Position über Sensoren ermittelt, dann würde ich keinen "=="-Vergleich nehmen. Ich würde sagen, wenn der Abstand zum Wegpunkt kleiner als z.B. 1 cm ist, wird er als erreicht angesehen...

Gruß Technipion
 

PvtZwai

Mitglied
Kein echter Roboter. Ist alles für ein Spiel in Unity. ;)
Das mit der Zuweisung stimmt zwar aber das ist nicht das Problem.
MonoDevelop sagt mir ,dass dies zwei Sachen sind, welche sich anscheinend nicht vergleichen lassen.
afag.PNG

Anbei die Fehlermeldung und trotzdem danke aber das bringt mich leider nicht weiter.
 

Technipion

Erfahrenes Mitglied
Hey PvtZwai,
hast du zufällig Zeilen 42-47 geschrieben? Ich habe mir den Code jetzt mal angeschaut, und die Routine ist eigentlich ziemlich klar. Nur diese unteren paar Zeilen kann ich nicht ganz einordnen. Kannst du mal erläutern, was du da eigentlich tun willst?

Vergleichen kannst du übrigens nur gleiche Typen. Da die aktuelle Position transform.position vom Typ Vector3 ist, brauchst du auch einen Vector3 zum Vergleichen. Waypoints ist aber ein Array aus Transforms. Du musst daher zuerst dereferenzieren und dann mittels .position zu einem Vector3 konvertieren (so wie in Zeile 20).

Gruß Technipion

PS: Der Vergleich würde vermutlich nie true sein, da der Roboter auch hier nur bis zu einem gewissen Mindestabstand an die Wegpunkte heranläuft. Daher die Frage im letzten Post...
 

vfl_freak

Premium-User
Moin,

na, die Meldung sagt dioch wohl alles, oder ?? :rolleyes:
Waypoints ist ein Array! transform.position scheint ja einem Eintrag des Arrays zu entsprechen, kann also auch nur mit einem Eintrag des Arrays vergleichbar sein !!

Du versuchst da sowas wie "Array of INTEGER == 5" ..... müsstest aber sagen "Array[n] == 5" !!

Gruß Klaus
 
Zuletzt bearbeitet: