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
协同程序,直到应用程序停止