我目前正在制定每日時間系統,並且在那個系統中,我希望能夠控制SUNRISE在哪個小時開始,DAY開始,SUNSET開始和NIGHT開始。目前在系統中這是可能的,並且當「時鐘」碰到下一個開始時刻時,我啓動一個協同程序開始旋轉太陽和月亮。沒有協程的旋轉對象?
我的協同程序是這樣的:
IEnumerator RotateSun(Vector3 fDegrees, float SecondsDuringTimeSet)
{
Quaternion quaFromPosition = _lSunLight.transform.rotation;
Quaternion quaToPostion = Quaternion.Euler(fDegrees);
for (float t = 0.0f; t < 1; t += Time.deltaTime/SecondsDuringTimeSet)
{
_lSunLight.transform.rotation = Quaternion.Lerp(quaFromPosition, quaToPostion, t);
yield return null;
}
}
正如你看到的我值傳遞到每個I運行時間。這是這樣做的:
if (_fCurrGameHour == _fTimeStartSunrise && _bMoveSunAndMoonOnlyOnce == true)
{
// Which TIMESET should it be:
_en_CurrTimeSet = TimeSet.SUNRISE;
// How long should the SUN move and how many which degree should it reach before that time ends
vec3MoveSun = new Vector3(10.0f, 0, 0);
StartCoroutine(RotateSun(vec3MoveSun, _fConvertSunriseToGTSeconds));
// How long should the MOON move and how many which degree should it reach before that time ends
vec3MoveMoon = new Vector3(180.0f, 0, 0);
StartCoroutine(RotateMoon(vec3MoveMoon, _fConvertSunriseToGTSeconds));
// Tell bool that we don't need to move the sun and moon more then once
_bMoveSunAndMoonOnlyOnce = false;
}
而且正如我寫的這個系統現在的作品。但它是一種靜態系統。所以目前我需要確保遊戲的開始時間是日出時間。否則,我的協同程序將會中斷,因爲它不會在一天的開始時間之前旋轉到正確的位置。而且我可以明確地不開始接近日落的比賽,然後太陽以完全錯誤的方式旋轉,因爲它接近於旋轉錯誤的方式(我假設)。
所以我的第一個問題是:我能以某種方式使系統更具動態性嗎?我希望能夠設定在哪個時間SUNRISE,DAY,SUNSET和NIGHT應該在不同季節開始,例如我可以在我的一天有不同的長度。我希望能夠在遊戲中改變這些小時,然後如果SUNSET將在稍後設置,則太陽將開始稍微慢一點旋轉,因爲它需要更長的時間才能達到SUNSET的位置。
到我的第二個問題:難道也有可能重寫我的協程,所以我可以在我想任何時間開始遊戲,太陽仍然會開始在正確度旋轉?
太陽將總是設置在相同的旋轉(170度),並上升以相同的旋轉(350度)。我只想控制它在到達這些旋轉之前所花費的時間。也許我可以以某種方式將它移動到我的更新階段,而不是使用Coroutine進行更新?我不知道如何在我的系統中改變這個,所以如果有人有任何想法。請幫忙。
有沒有人現在呢? –
我試過一些沒有成功的想法。有沒有人做過這個? –