Unity3d 当我的玩家在特定时间内达到特定分数时,如何防止某段代码运行?

Unity3d 当我的玩家在特定时间内达到特定分数时,如何防止某段代码运行?,unity3d,timer,game-engine,game-development,ienumerator,Unity3d,Timer,Game Engine,Game Development,Ienumerator,我目前正在开发一款Unity游戏,我遇到了一个问题。当我的玩家达到某个分数时,在这种情况下,分数为5会改变遇到的障碍物的行为方式。但是,由于某些原因,在某些特定的场合,当球员得分达到5分时,我假设当分数达到5时,与障碍物产生的时间完全相同,障碍物根据分数达到5之前所需的行为产生,但在分数达到5后,随着分数达到5,立即根据所需的行为移动。这不应该发生。当分数达到5分时,游戏应保持障碍物的行为,就像分数仍然小于5分一样持续一秒钟,然后切换 我已经尝试过使用协同程序来解决这个问题,如下面的代码所示,但

我目前正在开发一款Unity游戏,我遇到了一个问题。当我的玩家达到某个分数时,在这种情况下,分数为5会改变遇到的障碍物的行为方式。但是,由于某些原因,在某些特定的场合,当球员得分达到5分时,我假设当分数达到5时,与障碍物产生的时间完全相同,障碍物根据分数达到5之前所需的行为产生,但在分数达到5后,随着分数达到5,立即根据所需的行为移动。这不应该发生。当分数达到5分时,游戏应保持障碍物的行为,就像分数仍然小于5分一样持续一秒钟,然后切换

我已经尝试过使用协同程序来解决这个问题,如下面的代码所示,但是除非我找到一种方法将整个类放入协同程序中,否则这显然不起作用,这将非常混乱。我还尝试在负责生成障碍物的类中使用协同程序将分数从4增加到5的同时暂停生成障碍物一秒钟。然而,这并没有起作用

这是负责移动障碍物的班级:

使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类交互控制:单行为,IPooledObject
{
私有刚体2d rb;
游戏对象目标;
矢量3指向目标;
公共静态int-LevelStart=0;
//公共游戏对象[]球;
渲染器m_渲染器;
公共静态浮动速度=5f;
公共静态布尔isSlowMotion=true;
对象spawn()的公共无效
{
if(ScoreScript.scoreValue>4&&isSlowMotion)
{
移动速度=10f;
}
target=GameObject.FindWithTag(“白球”);
rb=GetComponent();
MoveInteract(moveSpeed);
}
无效移动交互(浮动移动速度)
{
如果(目标!=null)
{
如果(ScoreScript.scoreValue>4&&ScoreScript.scoreValue<11&&BallSpawnerControl.LevelTrans>1)
{
directionToTarget=(target.transform.position-transform.position).normalized;
rb.velocity=新矢量2(方向到目标x*移动速度,
方向至目标y*移动速度);
}
否则如果(ScoreScript.scoreValue<4)
{
directionToTarget=新向量3(0,-1,0);
rb.velocity=新矢量2(0,方向到目标y*移动速度);
}
}
其他的
{
GameObject.FindWithTag(“彩色球女高音”).SetActive(false);
}
}
无效更新()
{
如果(目标!=null)
{
if(ScoreScript.scoreValue>10)//确定红球何时从直线下降到后面的白球
{
directionToTarget=(target.transform.position-transform.position).normalized;
rb.velocity=新矢量2(方向到目标x*移动速度,
方向至目标y*移动速度);
}
}
}
}
这是负责生成障碍物的类:

使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
使用UnityEngine.SceneManagement;
/* 
*ObjectPooler.Instance.SpawnFromPool(“Ball”、Posi、Quaternion.identity);
*ObjectPooler.Instance.SpawnFromPool(“Star”、Posi、Quaternion.identity);
*/
公共类BallSpawnerControl:单行为
{
允许公共静态布尔值;
公共静态int TimerOn=1;
公共转换点;
//公共游戏对象[]交互;
int点,交互;
int指数=1;
ObjectPooler ObjectPooler;
公共静态int-LevelTrans=1;
//用于初始化
公开作废开始()
{
objectPooler=objectPooler.Instance;
允许为真;
调用重复(“SpawnAInteract”,0f,1f);
}
void SpawnAInteract()
{
//如果stament仅在启动到级别2的转换后运行1秒,请更改此选项
如果(允许)
{
如果(ScoreScript.scoreValue>4&&LevelTrans==1)
{
start例程(LevelTransition());
}
其他的
{
如果(索引%5!=0)
{
randomSpawnPoint=Random.Range(0,spawnPoints.Length);
交互作用=1;
//变量i=实例化(交互[交互],繁殖点[随机繁殖点]。位置,四元数.identity);
objectPooler.SpawnFromPool(“球”,繁殖点[randomSpawnPoint]。位置,四元数。标识);
//randomSpawnPoint=Random.Range(0,spawnPoints.Length);
索引++;
}
/*如果(索引%5!=0)
{
randomSpawnPoint=Random.Range(0,spawnPoints.Length);
objectPooler.SpawnFromPool(“时钟”,spawnPoints[randomSpawnPoint]。位置,四元数。标识);
} */
其他的
{
randomSpawnPoint=Random.Range(0,spawnPoints.Length);
交互=0;
//变量i=实例化(交互[交互],繁殖点[随机繁殖点]。位置,四元数.identity);
objectPooler.SpawnFromPool(“星形”,spawnPoints[randomSpawnPoint]。位置,四元数。标识);
//if(TimerOn==1)
//{
randomSpawnPoint=Random.Range(0,spawnPoints.Length);
SpawnFromPool(“时钟”),spawnPoints[random