我需要每隔X秒使一个物体闪烁。到目前为止,我有实际闪烁的代码并且它工作得很好,但是我需要闪烁来持续X秒,然后关闭,然后持续X秒。类似于打开闪光灯(它闪烁),然后关闭。
我知道像invokeRepeating
之类的东西会起作用,但闪烁依赖于FixedUpdate
来运行每一帧。
对于任何想知道我正在尝试用图像调制和注意力做事的人。以下是我到目前为止的情况:
public class scrFlicker : MonoBehaviour {
public SpriteRenderer sRen;
public float cycleHz; // Hz, the mesurement of cycles.
private float dtime = 0; // delta time
private Color alpha;
// Use this for initialization
void Start () {
sRen = GetComponent<SpriteRenderer>();
GetComponent<SpriteRenderer>().enabled = false;
alpha = sRen.color;
alpha.a = 0.4f;
sRen.color = alpha;
}
// Update is called once per frame
void FixedUpdate () {
startFlicker();
}
void startFlicker() {
dtime += Time.deltaTime;
float wave = Mathf.Sin((dtime * 2.0f * Mathf.PI) * cycleHz);
if(wave > 0.0f) {
GetComponent<SpriteRenderer>().enabled = true;
} else {
GetComponent<SpriteRenderer>().enabled = false;
}
if (wave == 0.0f) {
dtime = 0.0f;
}
}
}
答案 0 :(得分:2)
您可以在下面创建类似计时器的内容来管理开关时间:
float toggletime;
void FixedUpdate () {
toggletime += Time.deltaTime;
if (toggletime < 2) // flicker will occur from 0-2 seconds
startFlicker();
else if (toggletime > 4) // nothing will occur between 2-4 seconds
toggletime = 0; // reset timer after 4 seconds have passed
}
答案 1 :(得分:1)
&#34;我知道像invokeRepeating这样的东西会起作用,但是闪烁依赖于在FixedUpdate中运行每一帧。&#34;
FixedUpdate适用于物理学。当然你可以将它用于其他目的,但如果它们与物理无关,那么它不是主要目的。
调用实际上会很好,你可以完全控制它。
float timer = 2f;
bool isOn = false;
void Start()
{
Invoke("Method", timer);
}
void Method()
{
// you can change timer if needed
this.timer = Random.Range(0f, maxTimer);
this.isOn = !this.isOn;
Invoke("Method", this.timer);
}
void CancelMethodAndResetTimerForAnyReason()
{
CancelInvoke();
this.timer = Random.Range(0f, maxTimer);
Invoke("Method", this.timer);
}