Я думаю, что вы бы поступили так, хотя я знаю, что циклы очень неэффективны, возможно, это лучший способ решить вашу проблему на данный момент.
if (move)
{
//boolean is created to return if paint is in the array
bool blnUnique = true;
foreach (GameObject temp in array)
{
if (temp == paint)
{
blnUnique = false;
}
}
if (blnUnique)
{
vector3 positions = transform.position + new Vector3(0f, -0.5f, 0f); //when player move then paint instantiate y position
array[temp] = Instantiate<GameObject>(paint, position, Quaternion.identity);
temp++;
newtargetposition = position;
Debug.Log("newtargetposiiton:" + newtargetposition);
if (temp == 150)
{
if (newtargetposition == position)
{
//what can i do here
//i dont want to paint here because position store in newtargetposition,it is repeat
//array[temp]--;
Debug.Log("newtargetpositions:" + newtargetposition);
//temp--;
}
gameOver.SetActive(true);
SceneManager.LoadScene(1);
}
}
}
И удалить все повторяющиеся значения.
private void CleanArray(ref GameObject[] array)
{
GameObject[] goTemp = new GameObject[0];
bool blnFirst = true;
bool blnTracker = false;
foreach (GameObject V in array)
{
//This is to make sure that there is some value in temp to test against
if (blnFirst)
{
Array.Resize(ref goTemp, goTemp.Length + 1);
goTemp[goTemp.Length - 1] = V;
blnFirst = false;
}
blnTracker = true;
foreach (GameObject T in Temp)
{
if (T == V)
{
blnTracker = false;
break;
}
}
if(blnTracker)
{
Array.Resize(ref goTemp, goTemp.Length + 1);
goTemp[goTemp.Length - 1] = V;
}
}
array = goTemp;
}
Лично это было бы так, как я бы поступил, но я обычно не работаю с Unity и GameObjects, поэтому он может работать не так, как задумано, но функция удаления и перехватывать оба работают для целых чисел и меньшеменее сложные типы данных.