Unity3d 如何确保一个协同程序在另一个协同程序运行之前完成?

Unity3d 如何确保一个协同程序在另一个协同程序运行之前完成?,unity3d,coroutine,Unity3d,Coroutine,我有两个合作项目。其中一个与它有几个协同程序。在Start()方法中运行第二个协程之前,第一个协程不会等待第二个协程完成。请参阅下面的代码 void Start(){ 开始常规(持续时间为3.0f的抽绳); 启动例行程序(changeLinePos(2.0f)); } IEnumerator DrawLineWithDuration(浮动持续时间){ lr.positionCount=1; lr.设置位置(0,获取点(0)); float waitDur=持续时间/numPoints; 对于(i

我有两个合作项目。其中一个与它有几个协同程序。在
Start()
方法中运行第二个协程之前,第一个协程不会等待第二个协程完成。请参阅下面的代码

void Start(){
开始常规(持续时间为3.0f的抽绳);
启动例行程序(changeLinePos(2.0f));
}
IEnumerator DrawLineWithDuration(浮动持续时间){
lr.positionCount=1;
lr.设置位置(0,获取点(0));
float waitDur=持续时间/numPoints;
对于(int i=1;i

Start()
开始例程(changeLinePos(2.0f))之前以给定的持续时间完成开始。同样在
changeLinePos(float waitTime)
中,我如何确保
moveToPosition1
moveToPosition2
movetooriginal 1
movetooriginal 1
movetooriginal 2
之前完成呢?

其实很简单,你可以
生成返回开始例程(DrawLineWithDuration(3.0f));
作为
changeLinePos
中的第一行,如下所示:

void Start(){
启动例行程序(ChangeLinePos(2.0f));
}
IEnumerator ChangeLinePos(浮动等待时间){
收益率返回开始例行程序(持续时间为3.0f的提款线);
当(正在吃){
start例程(MoveToOriginal1(oriPos1,moveDuration));
start例程(MoveToOriginal2(oriPos2,moveDuration));
返回新的等待秒数(介于PSMOVEDELAY之间);
}
}
IEnumerator MoveToOriginal1(矢量3位置,浮动持续时间){
收益返回起始例程(MoveToPosition1(newPos1,moveDuration));
//MoveToOriginal1代码的其余部分
}
IEnumerator MoveToOriginal2(矢量3位置,浮动持续时间){
收益返回起始例程(MoveToPosition2(newPos2,moveDuration));
//MoveToOriginal1代码的其余部分
}
在这种结构中,时间安排如下:

  • ChangeLinePos
    Start()开始
  • 第一行以duration开始
    drawline,并停止执行
    ChangeLinePos
    ,直到前者完成
  • DrawLineWithDuration
    完成时,如果
    isRepeating==true
    ,则代码同步启动
    movetooriginal 1
    movetooriginal 2
  • movetooriginal 1
    movetooriginal 2
    都启动
    MoveToPosition1
    MoveToPosition2
    并等待最后两个操作完成
我在
时离开了
,因为它似乎受到了协同程序之外的某些东西的影响,所以请确保
在需要时将
更改为
false
,如果不是,则将始终启动
MoveToOriginal1
MoveToOriginal2
协同程序,直到应用程序停止