public class Invincible : MonoBehaviour
{ public SpriteRenderer render;
public Color normalColor;
public Color flashColor;
public int duration;
public bool isInvincible;
public IEnumerator SetInvincibility()
{
isInvincible = true;
for (int i = 0; i < duration; i++)
{
yield return new WaitForSeconds(0.1f);
render.color = flashColor;
yield return new WaitForSeconds(0.1f);
render.color = normalColor;
}
isInvincible = false;
}
}
这段代码定义了一个名为 Invincible 的 MonoBehaviour 类,该类用于管理角色或物体的无敌状态效果。
分析代码功能:
1.
变量定义:
2.
public SpriteRenderer render;:用于引用角色或物体的 SpriteRenderer 组件,可以控制其颜色。
public Color normalColor; 和 public Color flashColor;:定义了两种颜色,分别表示正常状态下的颜色和闪烁状态下的颜色。
public int duration;:表示无敌状态的持续时间,以整数形式表示持续的帧数或秒数。
public bool isInvincible;:表示当前是否处于无敌状态的标志。
3.
方法 SetInvincibility():
4.
这是一个协程方法(Coroutine),用于实现无敌状态的闪烁效果。
在方法开始时,将 isInvincible 设置为 true,表示角色开始无敌状态。
使用 for 循环来控制无敌状态的持续时间,每次循环代表一个闪烁周期。
在循环中,通过 yield return new WaitForSeconds(0.1f); 实现每隔0.1秒执行一次以下操作:
将 render.color 设置为 flashColor,即闪烁状态的颜色。
再次等待0.1秒后,将 render.color 设置为 normalColor,即恢复到正常状态的颜色。
循环结束后,将 isInvincible 设置为 false,表示无敌状态结束。
使用场景和注意事项:
使用场景:玩家角色在受到攻击后进入短暂的无敌状态。在这种状态下,角色可以闪烁来显示无敌状态的持续时间,并在结束后恢复正常状态。
注意事项:
确保在使用该脚本的游戏对象上,正确设置 render 变量以引用正确的 SpriteRenderer 组件。
normalColor 和 flashColor 变量需要在使用前进行适当的赋值,以确保闪烁效果能正确显示。
duration 变量应根据实际需要设置,以控制无敌状态的持续时间。
由于 SetInvincibility() 是协程方法,调用时应使用 StartCoroutine() 方法来启动协程,例如在受到攻击时调用以触发无敌状态。