如何在不改变局部比例的情况下左右切换精灵



我正在制作一款2D游戏,我希望玩家能够根据输入键左右移动。切换玩家精灵的侧面。

到目前为止,我处理它的方法是通过改变x轴上的局部比例,像这样:

void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
transform.localScale = new Vector3(-1, 1, 1);
}
else if(Input.GetKeyDown(KeyCode.D))
{
transform.localScale = new Vector3(1, 1, 1);
}
}

默认情况下,玩家面朝右侧,但当他按下A键时,玩家会看向左侧,当他按下D键时,玩家会看向右侧。

到目前为止一切都很好,但当我试图增加我的球员的大小时,当他收集能量时,一切都变得一团糟。

要增加大小,我使用DOTween包,它提供了一种简单的方法来缩放对象,像这样:

transform.DOScale(new Vector3(2, 2, 2),1.5f);

在那之后,我意识到搞乱秤会变得非常混乱。我的问题是,是否有更好的方法来处理精灵侧切换?

实际上这是一个简单的解决方案。

我假设你正在为你的播放器使用Sprite Renderer组件。在这个组件上有一个选项Flip,用于在2轴(X,Y)上翻转你的精灵。你可以使用x轴来左右翻转你的怨恨。

简单地在上面的脚本中创建一个Sprite Renderer组件的引用,然后使用flip属性来改变你的精灵侧。

下面是一个例子:

private SpriteRenderer spriteRenderer;
void Start()
{
spriteRenderer = gameObject.GetComponent<SpriteRenderer>();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.A))
{
spriteRenderer.flipX = true;
}
else if(Input.GetKeyDown(KeyCode.D))
{
spriteRenderer.flipX = false;
}
}

现在你可以使用doween来缩放你的播放器。

为什么不这样做呢:

Vector3 localScale;
private boolIsFacingRight = true;
void Update()
{
localScale = transform.localScale;
if (Input.GetKeyDown(KeyCode.A))
{
localScale.x *= isFacingRight ? 1 : -1;
isFacingRight = true;
transform.localScale = localScale;
}
else if(Input.GetKeyDown(KeyCode.D))
{
localScale.x *= isFacingRight ? -1 : 1;
isFacingRight = false;
transform.localScale = localScale;
}
}

这样你只需在一个轴上翻转你的角色,你保持缩放,而不是每次将其设置为一个新的向量3。

相关内容

最新更新