JavaScript / Unity Frage (Anfänger-Level!)
Garrett 01.09.2014 - 13:12 2427 6
Garrett
Here to stay
|
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! if(GameObject.Find("CubeRight").transform.position.x > 5){
GameObject.Find("CubeRight").transform.Translate (Vector3(-1,0,0) * Time.deltaTime*speed);}
Bearbeitet von Garrett am 01.09.2014, 13:16
|
InfiX
she/her
|
nachdem x>5 ist x automatisch auf 5 setzen?
also quasi if(x>5) x=5
Bearbeitet von InfiX am 01.09.2014, 13:17
|
Garrett
Here to stay
|
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. 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 > 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;
}
' Edit: Falls es interessiert, das Verhalten dieser beiden Würfel versuche ich nachzubauen: https://www.youtube.com/watch?v=ozilwW-DQT4
Bearbeitet von Garrett am 01.09.2014, 13:27
|
Rektal
Here to stay
|
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: var 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;
}
Bei der Abfrage "< 5" und das elseif "x > 4 && x < 5" wird der elseif Zweig nie true sein. Das selbe auch unten: "x > 5" und im elseif "x > 5 && x < 6" kann nicht gehen. Du hast vermutlich sowas gemeint: if (x < 5) {
if (x < 4) {
tr.Translate( Vector3(1,0,0) * Time.deltaTime * speed);
} else {
x = 5
}
Das selbe Spiel unten auch. Ob das was mit deinem Problem zu tun hat kann ich nicht sagen -> Brain schon zu muede heute.
|
Garrett
Here to stay
|
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. if(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}
|
InfiX
she/her
|
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 ![:D](/images/smilies/biggrin.gif) ): if(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;
}
e: moment da ist noch ein fehler drin ![:D](/images/smilies/biggrin.gif) e2: so jetzt sollts passen nachdem ich nicht weiss wie der vektor im restlichen code einfluss nimmt kann ich ned sagen ob das so funktioniert, aber ich hoffe du verstehst das prinzip?
Bearbeitet von InfiX am 02.09.2014, 00:32
|
Rogaahl
Elderinterrupt
|
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;
|