C# 共程中带浮点数的模
我正在尝试做一个协同程序,将角色设置为persiod的伤害模式。在此期间,我希望它闪烁。我不熟悉模,但我尝试使用它来翻转精灵渲染器每10个左右的周期。但我得到了非常奇怪的值,这是因为它是一个浮动吗?我应该如何团结一致呢C# 共程中带浮点数的模,c#,math,unity3d,C#,Math,Unity3d,我正在尝试做一个协同程序,将角色设置为persiod的伤害模式。在此期间,我希望它闪烁。我不熟悉模,但我尝试使用它来翻转精灵渲染器每10个左右的周期。但我得到了非常奇怪的值,这是因为它是一个浮动吗?我应该如何团结一致呢 public IEnumerator Hurt_cr (float sec, Vector2 attackPosition, float force) { isHurt = true; AddFor
public IEnumerator Hurt_cr (float sec, Vector2 attackPosition, float force)
{
isHurt = true;
AddForceAtPosition (attackPosition, force);
SpriteRenderer sprite = GetComponent< SpriteRenderer> ();
float t = Time.deltaTime;
while (t < sec) {
if ((t % 10) == 0) {
print ("sprite on : " + sprite.enabled);
sprite.enabled = !sprite.enabled;
}
yield return null;
t += Time.deltaTime;
}
isHurt = false;
}
public IEnumerator Hurt\u cr(浮动秒,矢量2攻击位置,浮动力)
{
isHurt=true;
添加力位置(攻击位置,力);
spriterendersprite=GetComponent();
float t t=Time.deltaTime;
while(t
不要使用协同程序,它完全没有用。将此更新为:
sprite.enabled = ((int)(Time.time / 10)) % 2 == 0;
编辑:添加了(int)
cast以获得良好的度量
编辑2:使其闪烁固定次数
添加类属性:
public int flashes = 0;
private bool flashingLastFrame = false;
在更新计数中,如果有闪烁:
bool flashingNow;
if (flashes > 0)
{
flashingNow = ((int)(Time.time / 10)) % 2 == 0;
if (flashingNow != flashingLastFrame)
{
flashingLastFrame = flashingNow;
sprite.enabled = flashingNow;
flashes--; // forgot this to make it stop
}
}
要从外部将其设置为闪烁3次:
obj.flashes = 6;
或添加一个方便的方法:
public void Flash(int times)
{
flashes = times * 2;
}
编辑3:对于超快速闪烁:
if (flashes > 0)
{
flashingLastFrame = !flashingLastFrame;
sprite.enabled = flashingLastFrame;
flashes--;
}
为什么协同程序毫无用处?在unity文档中,这似乎是非常推荐的。我还想知道我试模的时候做错了什么。谢谢你的回答!别担心。我总是接受有帮助的答案。我非常感谢所有在论坛上提供帮助的政治公众人物。我不明白。这不会使渲染器一直前后翻转吗?我只是想让它做一小段时间。在我看来,你的代码使它不断闪烁。实际上,我把它放在了更新中,它没有做任何有用的事情。渲染器一直处于禁用状态。使用(int)可以工作,但/10太长。我将其设置为0.2,同时也将其设置为慢速。但是,它仍然会打开每一个更新。我希望每次球员受伤时都能有一秒钟的时间。说真的,这看起来比合作更复杂。或者可能不复杂,但我不想再增加3个成员,只是为了让角色闪现,如果不是nescesary的话。我只是不明白为什么不使用协同程序。我添加了一个int cast,否则它可能无法按预期工作。现在它是正确的。我添加了一个
闪烁--
我之前忘记了。