2017-09-24 1 views
0

Ich habe nach einer Möglichkeit gesucht, die Größe eines 2D Spielobjekts abhängig von der Entfernung zum Ursprung anzupassen. Wenn das Spielobjekt eine Entfernung von 4 Einheiten hat, sollte es eine lokale Skala von (1,1,1) haben. Wenn es den Ursprung erreicht, sollte es eine lokale Skala von (0,0,1) haben. Dies sollte die Illusion vermitteln, dass das Spielobjekt weiter entfernt wird. Wenn jemand weiß, wie man das erreicht, wäre es sehr zu schätzen, dass Sie es mich wissen lassen.Einheit - Local Scale basierend auf Entfernung von Origin ändern

Vielen Dank im Voraus,

Tommy

Antwort

2

Sie könnten linear interpolation auf den Skalenwert verwenden. Nimm die [Vector3][1] von der lokalen Skala der Transformationen und verlasse die Entfernung vom Ursprung.

Um einige Pseudo-Code zu zeigen, was ich spreche:

get the transform 
in the update figure out the distance from the origin 
get the lerped value (Vector3.lerp(new Vector3(1,1,1), new Vector3(0,0,1), distance from center)) 

Added Beispielcode

public class Scaling : MonoBehaviour 
{ 
    private Transform trans; 

    void Start() 
    { 
     trans = gameObject.transform; 
    } 

    void Update() 
    { 
     float dist = Vector3.Distance(Vector3.zero, transform.position); 

     //don't scale if further away than 4 units 
     if(dist > 4) 
     { 
      transform.localScale = Vector3.forward; 
      return; 
     } 

     //work out the new scale 
     Vector3 newScale = Vector3.Lerp(Vector3.one, Vector3.forward, dist/4); 
     transform.localScale = newScale; 
    } 
} 

enter image description here

+0

Hallo, vielen Dank für die schnelle Antwort. Ich habe es gerade probiert und alles was passiert ist sobald das Objekt in die Szene gebracht wird geht es sofort auf eine lokale Skala von (0,0,1). Wenn es die Mitte erreicht, hat es eine lokale Skala von (1,1,1). Ich bin mir nicht sicher, wie ich das beheben kann - hier ist mein Code so weit: float distanceFromOrigin = Vector2.Distance (transform.position, Vector2.zero); \t \t Vector3 targScale = Vector3.Lerp (neuer Vector3 (1, 1, 1), neuer Vector3 (0, 0, 1), distanceFromOrigin); \t \t transform.localScale = targScale; –

+0

Egal, ich tauschte die (0,0,1) und die (1,1,1) und es funktioniert jetzt. Vielen Dank! –

Verwandte Themen