2016-06-09 6 views
0

Erstens, ich bin neu in Unity und offensichtlich mache ich etwas falsch, aber ich weiß nicht was.Position für skalierte Sprites ist immer die gleiche - Unity (Was mache ich falsch?)

Schauen Sie sich das Bild unten an. Es gibt drei Bälle. Der größte ist die Originalgröße (importiert) und die anderen beiden sind skaliert.

Ich schrieb einen Code und gab diesen Kugeln eine lineare Kraft in Richtung der rechten Kante der Kamera. Die Kamera hat eine Größe von 10 (5 pro Weg). Wenn es die Kante erreicht, sollte es auf die linke Kamerakante zurückprallen. Es funktioniert, aber nur das Original springt zurück, wenn es die Kante erreicht (andere Bälle werden gleichzeitig geworfen, aber sie sollten nicht, weil sie nicht die Kante erreicht haben).

Alle Bälle haben die gleiche Position, aber zwei sind skaliert und werden von "der Luft reflektiert - überprüfen Sie das Bild").

enter image description here

-Code für Richtungswechsel in der Funktion aktualisieren. Es sieht so aus:

if (rigidBody.transform.position.x > 5) 
     { 

      rigidBody.AddForce(new Vector2(-60,0)); 


     } 

Ich schätze alle Hilfe.

+1

Sie überprüfen jedoch nur die Position (die Position ist unabhängig von der Skala gleich), sodass sie sich an der gleichen Position bewegen. Ihr Zentrum ist an der gleichen Stelle. –

+0

Das oben genannte. Sie müssen die Kante des Balls überprüfen (natürlich links und rechts). Oder Sie können dies ändern, um mit 'OnCollisionEnter' zu arbeiten und haben Collider am Rand des Bildschirms. –

+0

Sie müssen alle wirklich grundlegenden Unity-Tutorials durcharbeiten – Fattie

Antwort

2

Das Problem, das ich sehe, ist, dass Ihr Code nur die Position überprüft, um die Bälle zurückprallen zu lassen. Die Position ist wahrscheinlich gemessen in der Mitte der Bilder (überprüfen Sie diese!), So müssen Sie die Breite jedes Balls berücksichtigen - eigentlich aus der Mitte, die halbe Breite.

Um zu überprüfen, ob die Position plus der Hälfte Breite des Bildes an die Grenze angekommen ist man renderer.bounds.size wie in verwenden:

if ((transform.position.x + renderer.bounds.size.x/2) > 5) 
    { 
     //change directions 
     //do something else... 
    } 

Put in anderen Worten, je kleiner die Größe der der Ball, desto mehr muss die X-Position wachsen, um an die Grenze zu kommen, und dann lässt du sie zurückprallen.

Ich ermutige jedoch stark, einen anderen Ansatz zu verhindern, alles zu haben fest codiert. Nimm an, du änderst deine Kameragröße, du müsstest alles nochmal neu schreiben! Ich würde Colliders auf beiden Seiten der Kamera Grenzen setzen, und wenn Ihre Bälle mit ihnen kollidieren, setzen Sie eine OnCollisionEnter Funktion, die sie Richtungen ändern lässt. Das ist ein wenig natürlich von deiner Frage, also werde ich es dort lassen. Viel Glück!