1

C#スクリプトを使用してunity3dで時間の経過とともに霧が濃くなるようにしようとしています

最初に、次のコードが示すようにオンにします

 void Start () {
    RenderSettings.fog =true;
    RenderSettings.fogDensity = 0.00f;
 }

更新では、次のコードが示すように、3秒ごとにチェックして密度を追加します

 void Update () {
      StartCoroutine(updateTheFog());
 }

updateTheFog 関数は

IEnumerator updateTheFog(){

    yield return new WaitForSeconds(3); 

    RenderSettings.fogDensity+=0.01f;
}

問題は、3 秒待ってから、3 秒ごとに 0.01 ずつ増分するのではなく、自動的に 1.0 になることです。

これを解決するための助けをいただければ幸いです

4

2 に答える 2

4

この質問によると、 Updateはフレームごとに 1 回実行され、遅延できないため、これには Update を使用しないでください。これを行う代わりに、代わりに Start() でコルーチンを開始し、while(true)無限ループを使用してこれを手動で繰り返すことができます。

void Start () 
{
    RenderSettings.fog =true;
    RenderSettings.fogDensity = 0.00f;
    StartCoroutine(updateTheFog());
}

IEnumerator updateTheFog() 
{
    while(true)
    { 
        //this makes the loop itself yield 
        return new WaitForSeconds(3); 

        RenderSettings.fogDensity+=0.01f;
    }
    //if you want to stop the loop, use: break;
}
于 2013-01-28T03:33:21.130 に答える
1

Lee Taylor が言ったことは機能するはずですが、代わりに InvokeRepeating 関数を使用すると、.net フレームワークのタイマーのような特定の時間間隔で呼び出される関数を設定できます。CancelInvoke を呼び出して、invokerepeating を停止することもできます。

void Start(){
    InvokeRepeating("updateTheFog",3,3);
}
void updateTheFog(){
// do your fog stuff
if(fogDensity == 1)
    cancleInvoke()
 }
于 2013-01-31T23:27:31.390 に答える