c# - 如何延迟 Unity 和 C# 中的方法?
问题描述
我的名字是 Laurenz,我的问题是如何使用 c# 在 Unity 中延迟我的精灵的颜色变化。
现在我有一个随机生成器,它根据一个数字选择一种颜色,但是每帧都会发生这种情况。所以现在真正的挑战是如何延迟它以减少它的变化。
public class colorchange : MonoBehaviour
{
public int color;
public bool stop = true;
void Start()
{
}
void Update()
{
Debug.Log("Hello");
color = Random.Range(1, 5);
if (color == 2)
{
gameObject.GetComponent<SpriteRenderer>().color = Color.blue;
}
if (color == 3)
{
gameObject.GetComponent<SpriteRenderer>().color = Color.red;
}
if (color == 4)
{
gameObject.GetComponent<SpriteRenderer>().color = Color.yellow;
}
}
}
解决方案
您可以将代码放入Coroutine中的循环中,该循环每隔几秒迭代一次:
public class colorchange : MonoBehaviour
{
public int color;
public float delaySeconds = 1f;
IEnumerator changeColorCoroutine;
SpriteRenderer mySprite;
public bool doChangeColor;
void Start()
{
// cache result of expensive GetComponent call
mySprite = GetComponent<SpriteRenderer>();
// initialize flag
doChangeColor = true;
// create coroutine
changeColorCoroutine = ChangeColor();
// start coroutine
StartCoroutine(changeColorCoroutine);
}
void OnMouseDown()
{
// toggle doChangeColor
doChangeColor = !doChangeColor;
}
IEnumerator ChangeColor()
{
WaitUntil waitForFlag = new WaitUntil( () => doChangeColor);
while (true)
{
yield return waitForFlag;
Debug.Log("Hello");
color = Random.Range(1, 5);
// switch for neater code
switch (color)
{
case 2:
mySprite.color = Color.blue;
break;
case 3:
mySprite.color = Color.red;
break;
case 4:
mySprite.color = Color.yellow;
break;
}
yield return new WaitForSeconds(delaySeconds);
}
}
}
推荐阅读
- python - OpenGL第一人称射击视图的顶点/片段着色器?
- python - 如何正确使用 Plotly 的 `@app.callback` 函数?
- c# - WPF - 具有 MultiBinding 和不同 DataContexts 的自定义工具提示
- r - R闪亮的checkergroupinputbox按反应输入分组,按反应输入汇总
- r - 为什么 R 中的 googledrive 库识别多个文件,而 Drive 文件夹中只有一个文件?
- python - 根据条件用另一个数据帧的值替换一个数据帧的值
- c# - 加载引用另一个表中相关数据的数据列表
- informatica-powercenter - Informatica IDQ 配置文件中的空值处理(大数据开发人员/BDM)
- deepsecurity - 趋势科技服务器深度安全防护系统 12 - 通过 API 更新代理
- swift - Xcode 是否可用于 Windows 10?