URL: https://www.overclockers.at/coding-stuff/javascript-unity-frage-anfnger-level_240199/page_1 - zur Vollversion wechseln!
Hi Leute,
ich möchte, dass sich in Unity mein Objekt namens "CubeRight" selbstständig nach links bewegt bis er EXAKT die X-Position von 5 erreicht hat. Das funktioniert mit dem untenstehenden Code jedoch nur mittelmäßig. Das Problem ist nur, dass der Cube nicht exakt bei der X-Position 5 stehen bleibt, sondern - je nachdem wie hoch ich die Variable "speed" definiere - bisschen davor bzw. bisschen danach. Bei Speed 1 bleibt er meistens bei 4,8 - 5 stehen. Bei Speed 400 stoppt er meistens irgendwo zwischen 1,5 und 5. Hat jemand eine Ahnung wie ich das Problem lösen kann? Vielen Dank!
Code: JSif(GameObject.Find("CubeRight").transform.position.x > 5){ GameObject.Find("CubeRight").transform.Translate (Vector3(-1,0,0) * Time.deltaTime*speed);}
nachdem x>5 ist x automatisch auf 5 setzen?
also quasi
if(x>5) x=5
Ich hätt wohl weiter ausholen sollen. Der Würfel soll sich zusätzlich, wenn er im negativen Koordinatenbereich ist, wieder zur Mitte (auf Position 5) zurückgezogen werden. Das ist mein aktueller Lösungsansatz.
'Code: JSif(GameObject.Find("CubeRight").transform.position.x < 5){ GameObject.Find("CubeRight").transform.Translate (Vector3(1,0,0) * Time.deltaTime*speed); } else if(GameObject.Find("CubeRight").transform.position.x > 4 && GameObject.Find("CubeRight").transform.position.x < 5) { GameObject.Find("CubeRight").transform.position.x = 5; } if(GameObject.Find("CubeRight").transform.position.x > 5){ GameObject.Find("CubeRight").transform.Translate (Vector3(-1,0,0) * Time.deltaTime*speed); } else if(GameObject.Find("CubeRight").transform.position.x > 5 && GameObject.Find("CubeRight").transform.position.x < 6) { GameObject.Find("CubeRight").transform.position.x = 5; }
Sorry ich hab keine Loesung aber mir ist was anderes aufgefallen; btw hoffe ich dass man den Code nicht so schreiben muss, bisserl abkuerzen tut gut fuer die Uebersicht, ist ja eine furchtbare Formatierung. Wird das nochmal kompiliert auf optimierteres JS? Die ganzen Object Traversals koennen schon Performance kosten. Anyway:
Bei der Abfrage "< 5" und das elseif "x > 4 && x < 5" wird der elseif Zweig nie true sein.Code: JSvar tr = GameObject.Find("CubeRight").transform; if (tr.position.x < 5) { tr.Translate( Vector3(1,0,0) * Time.deltaTime * speed); } else if (tr.position.x > 4 && tr.position.x < 5) { tr.position.x = 5; } if (tr.position.x > 5) { tr.Translate( Vector3(-1,0,0) * Time.deltaTime * speed); } else if (tr.position.x > 5 && tr.position.x < 6) { tr.position.x = 5; }
Das selbe Spiel unten auch.Code: JSif (x < 5) { if (x < 4) { tr.Translate( Vector3(1,0,0) * Time.deltaTime * speed); } else { x = 5 }
Hahaha Rektal, du hast es schon richtig erkannt, ich bin wirklich absoluter Anfänger... ;-) Danke jedoch für deinen Input.
Habs jetzt mit nem anderen Lösungsansatz versucht... ich versteh einfach nicht, warum das so nicht funktioniert. Ich hab jetzt als Ausgangswert "0" genommen, damits ein bisschen einfacher zu lesen ist.
Code: JSif(GameObject.Find("CubeLeft").transform.position.x < 0){ //wenn Würfel sich Links von Ausgangsposition befindet GameObject.Find("CubeLeft").transform.Translate (Vector3(1,0,0) * Time.deltaTime*speed); //dann bewege Würfel nach rechts} if(GameObject.Find("CubeLeft").transform.position.x > 0){ //wenn Würfel sich Rechts von Ausgangsposition befindet GameObject.Find("CubeLeft").transform.Translate (Vector3(-1,0,0) * Time.deltaTime*speed); //dann bewege Würfel nach links}
also ich würd das folgendermaßen machen (einfach geschrieben weil ich den befehlen ned ganz folgen kann, auch weiss ich jetzt nicht wie genau man den vector abfrägt ):
Code: JSif(cube.x > 0) { vector = links*speed; } if(cube.x < 0 && vector = links) { cube.x = 0; } if (cube.x < 0 ) { vector = rechts*speed; } if(cube.x > 0 && vector = rechts) { cube.x = 0; }
Du kannst auch GameObjects oder Transforms direkt im Editor reinziehen, zb:
public Transform(oder GameObject) cubeRight;
Glaube in js wäre das
public var cubeRight : Transform;
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025