2017-03-07 59 views
1

第一次產卵良好,但當它結束時(當move.tempColor.a < 0) finishInterize不會更新爲false,並且該情況將在下一幀產生結果在訪問線objectToSpawnList [spawnCount - 1]中不存在的對象時。它發生由於殼體是在更新方法統一產卵項目使用更新方法c#

代碼

case SpawnState.run: 

if (finishInterilize) 
{ 
    GameObject spawnClone = objectsToSpawnList[spawnCount - 1]; 
    SpawnAndMove move = spawnClone.GetComponent<SpawnAndMove>(); 
    moveObject(spawnClone); 

    if (move.tempColor.a<0) 
    { 
     finishInterilize = false; 
     Debug.Log(finishInterilize); 
     state = SpawnState.intirilize; 
     spawnCount--; 
     Destroy(spawnClone); 
    } 
} 
break; 
+0

'Color'的'Alpha'值不能爲負值,並'0'和'255'之間夾緊。意思是說你的條件if(move.tempColor.a <0)'在任何情況下都會失敗。 –

+0

@ m.rogalski更正:顏色值介於'0'和'1'之間。它在編輯器中顯示「0」到「255」,但在代碼中顯示爲「0」和「1」。你的回答也犯了這個錯誤。 – Programmer

+0

@Programmer Color的通道值由1個字節表示,Unity在「Color」類型中使用百分比值,在「Color32」類型中使用標準(1字節)值。 –

回答

1

正如評論指出Color值是一個字節寬,它們是無符號(0255),這意味着,整個色是4個字節寬。如果你想根據alpha值來決定你的邏輯,你應該檢查它是否等於0而不是更低。

// if (move.tempColor.a < 0) // a will have values between 0 and 255 
if (move.tempColor.a == 0) 
{ 
    finishInterilize = false; 
    // rest of your code... 
} 

擴展答案:

統一使用兩種數據類型來描述顏色值。第一個是Color,其使用從0.00f1.00f(值的百分比)的值和第二個使用從0255(如上所述)的值的Color32。在上面的示例中,我假設您使用的是Color32數據類型。但在任何情況下,這些值都不能低於您目前正在查看的0.00

根據所使用的顏色數據類型,您應該檢查該顏色是否等於0.00而不是低於。

使用Color數據類型:使用

if (move.tempColor.a <= 0.001f) // not the real 0.00 but still goood enought 

Color32數據類型:

if (move.tempColor.a == 0) 
+0

答案是現貨。 +1 –

+0

感謝您的好答案我將它標記爲答案,但最終我沒有使用它我反而把所有邏輯移到了衍生物體本身對這個問題的深刻洞察 – adi181188