2016-05-23 4 views
3

Ich versuche die X-Achse eines Sprites über eine bestimmte Dauer in Unity zu skalieren. Im Grunde habe ich dies getan, bevor Swift in der folgenden Art und Weise verwendet wird,Äquivalent von SKAction scaleToX für eine bestimmte Dauer in Unity

let increaseSpriteXAction = SKAction.scaleXTo(self.size.width/(mySprite?.sprite.size.width)!, duration:0.2) 
mySprite!.sprite.runAction(increaseSpriteXAction) 
mySprite!.sprite.physicsBody = SKPhysicsBody(rectangleOfSize:mySprite!.sprite.size, center: centerPoint) 

aber noch nicht einmal ein Äquivalent für scaleToX in Unity gefunden. Ich werde wirklich etwas Hilfe schätzen.

Antwort

2

Verwenden Sie die Kombination Coroutine, Time.deltaTime und Mathf.Lerp dann kann pyou die Funktion SKAction.scaleXTo Funktion replizieren.

bool isScaling = false; 

IEnumerator scaleToX(SpriteRenderer spriteToScale, float newXValue, float byTime) 
{ 
    if (isScaling) 
    { 
     yield break; 
    } 
    isScaling = true; 

    float counter = 0; 
    float currentX = spriteToScale.transform.localScale.x; 
    float yAxis = spriteToScale.transform.localScale.y; 
    float ZAxis = spriteToScale.transform.localScale.z; 

    Debug.Log(currentX); 
    while (counter < byTime) 
    { 
     counter += Time.deltaTime; 
     Vector3 tempVector = new Vector3(currentX, yAxis, ZAxis); 
     tempVector.x = Mathf.Lerp(currentX, newXValue, counter/byTime); 
     spriteToScale.transform.localScale = tempVector; 
     yield return null; 
    } 

    isScaling = false; 
} 

es nennen:

public SpriteRenderer sprite; 
void Start() 
{ 
    StartCoroutine(scaleToX(sprite, 5f, 3f)); 
} 

Es wird die Skala von x-Achse ändern, was auch immer es ist, zu in Sekunden. Die gleiche Funktion kann einfach erweitert werden, um auch mit der y-Achse zu arbeiten.

Ähnliche Frage: SKAction.moveToX.

+2

Ich versuche auch etwas Ähnliches zu tun (http://stackoverflow.com/questions/34768415/how-to-increase-animate-the-width-of-the-square-on-both-ends) mit Einheit, aber ich bin nicht sicher, wie man den Maßstab, um X zu erhöhen, um die gesamte Breite zu füllen – NSSwift

+0

@ NSSwift screenWidth/spriteWidth ist die Skala, die Sie verwenden müssen, um die Sprite Breite auf die Bildschirmbreite zu erhöhen – NSologistic

+1

@Programmer Ich weiß nicht viel C#, aber wenn NSSwift Ihre Lösung mit meinem Kommentar implementiert, wird das Sprite vom Bildschirm ausgehen, wenn es nicht in der Mitte des Bildschirms ist. Sie müssen eine Art Ankerpunkt ändern, um das gesamte skalierte Sprite auf dem Bildschirm zu behalten, unabhängig von seiner Position. Ich glaube, das will NSSwift erreichen. – NSologistic