代码之家  ›  专栏  ›  技术社区  ›  AquaDev

如何检查一个操作是否完成?

  •  -1
  • AquaDev  · 技术社区  · 6 年前

    因此,正如您从标题中看到的,我需要检查我的vector3.slerp函数是否完成,因为如果没有vector3.slerp,我就无法执行代码。(对不起英语不好)

    编辑:只是为了澄清这个问题:我用一个协程来做一些向量3.slerp3,我不想所有的工作一次我想一个完成,另一个开始工作。

    IEnumerator func()
    {
        Vector3.Slerp(transform.position, targetPos1, Time.deltaTime * 8f);
    
        //Check if Vector3.Slerp is done
    
        Vector3.Slerp(transform.position, targetPos2, Time.deltaTime * 8f);
    
        //Check if Vector3.Slerp is done
    
        Vector3.Slerp(transform.position, targetPos3, Time.deltaTime * 8f);
    
        //Check if Vector3.Slerp is done
    
        Vector3.Slerp(transform.position, targetPos4, Time.deltaTime * 8f);
    
        //Check if Vector3.Slerp is done
    
        Vector3.Slerp(transform.position, targetPos5, Time.deltaTime * 8f);
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   G. Threepwood    6 年前

    我在试着理解你的问题…对不起,如果我不理解。 试试这样的:

    bool active = false;
    
    void Update(){    
        if(!active){
           startCoroutine(coroutine());
        }
    }
    
    
    IEnumerator coroutine()
     {
        active = true;
        //your code
        yield return new WaitForSeconds(2);
        active  = false;
     }
    

    编辑:

    IEnumerator func()
    {
    distance = 1;
    while(distance > 0.1f){
        transform.position = Vector3.Slerp(transform.position, targetPos1, Time.deltaTime * 8f);
        distance = transform.position - targetPos1;
        if(distance<0){
            distance *=-1;
        }
    }
    
    distance = 1;
    while(distance > 0.1f){
        transform.position = Vector3.Slerp(transform.position, targetPos2, Time.deltaTime * 8f);
        distance = transform.position - targetPos2;
        if(distance<0){
            distance *=-1;
        }
    }
    

    我没有试过这个代码…只是让你理解这个想法。我现在没时间了,但那不是一个很好的代码…你可以做得更好