2012-01-03 4 views
0

업데이트 기능에서 호출하려고하는 프로세스가 지연 될 수 있습니다. CoUpdate 해결 방법도 시도했습니다. 여기 내 코드는 다음과 같습니다 -Unity 3D의 프로세스 지연 시간

function Start() 
{ 
    StartCoroutine("CoStart"); 
} 
function CoStart() : IEnumerator 
{ 
    while(true) 
    { 
    yield CoUpdate(); 
    } 
} 
function CoUpdate() 
{ 
    //I have placed the code of the Update(). 
    //And called the wait function wherever needed. 
} 
function wait() 
{ 
    checkOnce=1; //Whenever the character is moved. 
    yield WaitForSeconds(2); //Delay of 2 seconds. 
} 

나는 제 3 자 컨트롤러 (다른 객체 인)의 경계에서 이동할 때 객체를 이동해야합니다. 내 코드에 "yield"를 포함 시켰습니다. 그러나 문제는 다음과 같습니다. Update()에서 코드를 제공 할 때 움직이는 객체가 움직이지만 멈추지 않습니다. 그리고 그것은 위아래로 움직이고 있습니다. 나는 무슨 일이 일어나고 있는지 모른다. 누군가 도울 수 있습니까? 제발, 고마워.

+1

개체 이동 방법에 대한 정보를 추가해야합니다. 지금까지 나는 coroutines의 사용과 당신의 객체 움직임 사이의 관계를 볼 수 없습니다. 그리고, 그런데, 나는 이것이 당신의 문제에 대한 올바른 접근법이라고 생각하지 않습니다. 그것이 얼마나 복잡한지를보십시오. – Elideb

+0

IEnumerator 함수를 사용하면 yield WaitForSeconds (n)를 사용하여 지연을 넣을 수 있습니다. –

답변

0

나는 당신이 달성하고자하는 것을 완전히 명확하지는 않지만, 코 루틴에 대한 시간 지연을 설정하는 방법을 보여줄 수 있습니다. 이 예에서는 간단한 설정으로 작업 할 수 있습니다. 예를 들어 설정 한 것과 같습니다. 게임을 실행하는 동안 계속 2 초마다 무언가를하고 싶다고 가정하면 코드를 약간 수정할 수 있습니다.

function Start() 
{ 
    StartCoroutine(CoStart); 
} 

function CoStart() : IEnumerator 
{ 
    while(true) 
    { 
     //.. place your logic here 

     // function will sleep for two seconds before starting this loop again 
     yield WaitForSeconds(2); 
    } 
} 

당신은 또한 당신이 달성하려고하는 일에 대해 자세한 내용과 질문을 업데이트하십시오 완전히 다음 마크를 놓친 경우 다른 논리

function Start() 
{ 
    StartCoroutine(CoStart); 
} 

function CoStart() : IEnumerator 
{ 
    while(true) 
    { 
     //.. place your logic here 

     // function will sleep for two seconds before starting this loop again 
     yield WaitForSeconds(CalculateWait()); 
    } 
} 

function CalculateWait() : float 
{ 

    // use some logic here to determine the amount of time to wait for the 
    // next CoStart cycle to start 
    return someFloat; 
} 

를 사용하여 대기 시간을 계산할 수 있습니다.

-1

나는 CoRoutines를 제안하지 않을 것입니다. 때로는 컴퓨터가 손상 될 수 있습니다. 그냥 변수를 정의하고 감소시킵니다. 예 :

seconds -= 1 * Time.deltaTime; 
if(seconds <= 0) {your code to run} 

이 5 초 지연을 만들 것입니다 :

private float seconds = 5; 

은 어디서나 당신이 연기하고 싶어. 5를 임의의 값으로 변경하여 초 수를 변경할 수 있습니다. 또한 1의 값을 변경하여 감소 속도를 높일 수 있습니다 (동일한 변수를 사용하여 2 개의 지연된 동작을 동기화하려는 경우 주로 유용합니다)

희망이 있습니다. 해피 코딩 :)

+0

코 루틴은 컴퓨터를 크래시 할 수 없습니다. – piojo

+0

코 루틴은 컴퓨터를 크래시하지 않습니다. – maksymiuk

0

나는 당신이 질문을 이해할 수 있지만 하나의 객체가 다른 객체를 벗어나면 이동할 객체를 시작하려면 두 번째 객체의 첫 번째 객체에서 참조를 만들고 첫 번째 객체가 범위를 벗어난 경우 (첫 번째 객체의 업데이트에서이를 확인) 두 번째 객체에서 일부 공용 함수 StartMove를 호출하십시오.