2012-01-03 28 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. 
} 

當第三方控制器(這是另一個對象)移出邊界時,我必須移動一個對象。我在代碼中包含「收益率」。但是,發生的問題是:當我在Update()中給出代碼時移動的對象正在移動,但並未停止。它正在上下移動。我不知道發生了什麼!有人可以幫忙嗎?拜託,謝謝。

+1

您應該添加有關如何將物體移動的一些信息。到目前爲止,我看不出使用協程和對象移動之間的關係。順便說一句,我不認爲這是你的問題的正確方法,看看它是多麼令人費解。 – Elideb 2012-01-03 13:49:28

+0

使用IEnumerator函數,您可以將延遲放在具有yield WaitForSeconds(n)的那些函數中。 – 2014-11-06 03:13:40

回答

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

我不會建議協同程序。它有時可能會導致計算機崩潰。只需定義一個變量並遞減它。例如:

private float seconds = 5; 

然後做任何你想要延遲:

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

這將使得5秒的延遲。您可以將5更改爲任何值以更改秒數。您也可以通過更改值1。(當你要同步延遲2點的操作,使用相同的變量這是最有用)

希望這有助於加速遞減。快樂編碼:)

+0

協程無法使您的計算機崩潰。 – piojo 2015-03-07 15:01:05

+0

協程不會讓您的計算機崩潰。 – maksymiuk 2015-08-10 20:52:14

0

我不是100%肯定,我理解你的問題,但如果你想開始一個物體移動時,另一種是出界,然後才使第一對象的引用到第二個對象和當第一個對象超出界限時(在第一個對象的更新中檢查它)在第二個對象上調用一些公共函數StartMove。