我使用C#在Unity中进行编码,并且设置了与变量相等的不同精灵i
。当A
被按下它应该加1 i
,并且当D
它被按下应该减去1,改变依赖于子画面i
的值。直到昨天我再次打开它时,它一直运行良好,现在由于某种原因它只会加减2而不是1。在开始执行此操作之前,我在代码中没有做任何更改,但我不知道为什么。我的代码在下面。
public void Start()
{
//Sets i to 4 and spriteRenderer to the current Sprite Rendered.
i = 4;
d = 1;
Score1 = 0;
spriteRenderer = this.GetComponent<SpriteRenderer>();
}
void OnTriggerEnter2D(Collider2D Death)
{
//Detects if there is a collision and sets d to 0.
d = 0;
}
public void Update()
{
//A bunch of if statements to detect the input key and if the input key is set to GunAngleDown then adds 1 to i or if the input key is set to GunAngleUp the subtracts 1 from i.
if (Input.GetKeyDown(GunAngleDown))
{
i++;
}
else if (Input.GetKeyDown(GunAngleUp))
{
i--;
}
//If i is equal to 8 then subtracts 1 from i or if i is equal to 0 then adds 1 to i.
if (i == 8)
{
i--;
}
else if (i == 0)
{
i++;
}
//checks the current i value and sets the current sprite rendered to the respective sprite.
if (i == 1)
{
spriteRenderer.sprite = SpriteGunAngleUp3;
}
else if (i == 2)
{
spriteRenderer.sprite = SpriteGunAngleUp2;
}
else if (i == 3)
{
spriteRenderer.sprite = SpriteGunAngleUp1;
}
else if (i == 4)
{
spriteRenderer.sprite = SpriteGunAngleStraight;
}
else if (i == 5)
{
spriteRenderer.sprite = SpriteGunAngleDown1;
}
else if (i == 6)
{
spriteRenderer.sprite = SpriteGunAngleDown2;
}
else if (i == 7)
{
spriteRenderer.sprite = SpriteGunAngleDown3;
}
//Checks if d2 is equalt to 0 and sets the rendered sprite to the dead sprite.
if (d == 0)
{
spriteRenderer.sprite = Dead;
}
}
似乎您无法精确控制何时Update
调用,并且可以在某个键碰巧被按下时任意多次调用它。取而代之的是,您应该只计算以前是向上但现在是向下的键。在方法结束时存储当前键状态,并在方法开始时使用它来触发键没有按下但现在按下的状态。如果需要,您可能需要实施密钥自动重复。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句