在Unity中,与SKAction scaleToX相对应的是什么?

3

我正在尝试在Unity中按照给定的持续时间缩放精灵的x轴。基本上,我之前用Swift以以下方式完成过这个操作:

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)

但是在Unity中甚至没有找到scaleToX的等效物。我非常感谢您的帮助。

1个回答

2

使用组合 CoroutineTime.deltaTimeMathf.Lerp,您就可以复制 SKAction.scaleXTo 函数的功能。

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;
}

调用它:

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

它将在3秒内将x轴比例尺从当前值更改为5。同样的功能也可以轻松扩展到y轴。

类似问题:SKAction.moveToX


2
我也在尝试使用Unity做类似于(https://dev59.com/xJLea4cB1Zd3GeqP9Pqe)的事情,但我不太确定如何确定增加X的比例以使其填满整个宽度。 - NSSwift
@NSSwift screenWidth/spriteWidth 是你需要使用的比例,将精灵宽度增加到屏幕宽度。 - NSologistic
1
@程序员 我不太懂C#,但如果NSSwift使用我的解决方案并评论,那么精灵将会在屏幕中心以外延伸。你需要进行某种形式的锚点更改,以便无论其位置如何,都能保持整个缩放的精灵在屏幕上。我相信这就是NSSwift想要实现的。 - NSologistic
@NSologistic 这个问题是由humfrey提出的,而不是NSSwift。原始问题是将X调整为新值,而这个答案确实做到了。他需要提出一个新问题,他已经这样做了。我仍在努力想办法帮助他。 - Programmer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接