2013-03-28 5 views
0

У меня есть два сценария.Проверить значение в массиве в единстве 3d

script1 Скрипт2

В script1 я объявлен ArrayList он содержит значение 2, 4, 6, и т.д. ...

public static ArrayList aArray= new ArrayList(); 

function update(){ 
    if(bool1) 
    { 
     aArray.Add(i); 
    } 
} 

я должен проверить значение 5 существует в ArrayList из Скрипт2.

Если значение существует, я должен получить его ключ.

Как это получить?

+0

No. One для камеры. и другой для символьного контроллера. – Sona

ответ

2

Попробуйте использовать Содержит. Этот код обнаружит, что у вас уже есть значение в ArrayList, и он перестанет добавлять код во второй раз.

public static ArrayList aArray= new ArrayList(); 

function update() 
{ 
    if(aArray.Contains(i)==false) 
    { 
     aArray.Add(i); 
    } 
} 

Если вы хотите, чтобы удалить значение, которое он столь же легко, как aArray.Remove (я)

+0

Я понял, что, удалив, вы имели в виду «не добавлять». Я редактировал вопрос, чтобы рассказать вам, как его удалить. –

+0

Я просто хочу удалить массив. Тогда только если удалить 0-е значение, автоматически 1-е значение переходит в 0 .. – Sona

3

Во-первых, я бы Recommand с помощью общего List<T> вместо необщего ArrayList, который позволяет указать тип объектов, которые входят в этот список (для обеспечения большей безопасности типов).
Кроме того, объявление переменной readonly мешает вам случайно перезаписать его, что часто бывает с List с (в конце концов, вы всегда можете просто Clear их):

public static readonly List<int> items = new List<int>(); 

Теперь, чтобы ответить на ваш фактический вопрос, если вы хотите проверить, существует ли значение в списке, вы можете использовать метод Contains.
Чтобы проверить, если значение делает не существуют, просто положить ! перед выражением:

if (!Script1.items.Contains(i)) { 
    // This will only execute if the list does not contain i. 
    items.Add(i); 
} 
+0

+1: Использование дженериков - хороший совет ... –

1

, если я правильно понял, script1 находится в камере, и Скрипт2 находится в Character. Для этого примера мы будем называть их MainCamera и Character соответственно.

Теперь, если я не понял неправильно, вы пытаетесь получить доступ к массиву в Script1 из Script2. В то время как другие ответы очень правильны, у единства3D есть кое-какое обходное решение, необходимое для доступа к нему.

Во всяком случае, в Скрипт2 использовать это:

if(GameObject.Find("MainCamera").GetComponent<Script1>().aArray.Contains(5)) 
{ 
    //Do your code here 
} 
Смежные вопросы