2013-03-28 3 views
0

두 개의 스크립트가 있습니다.값이 단위로 배열에 존재하는지 확인하십시오. 3d

script1이 Script2는 script1이있어서

가 나는 값 2, 4, 6, 등을 포함하는 ArrayList를 ... I은 5 Script2에서 ArrayList에 존재하는 값을 확인해야

public static ArrayList aArray= new ArrayList(); 

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

선언.

값이 존재하면 키를 얻어야합니다.

어떻게 만드나요?

+0

번호 하나. 그리고 또 다른 캐릭터 콘트롤러. – Sona

답변

2

Contains를 사용해보세요. 이 코드는 이미 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

첫째, 내가 대신 제네릭이 아닌 ArrayList의 일반적인 List<T>을 사용하여 운영자 추천하는 것처럼, 그냥 쉽게되는 값을 제거하려면 어떤 유형 안전성을 높이기 위해 해당 목록에 들어갈 오브젝트 유형을 지정할 수 있습니다. 케이스가 List들과 종종 readonly 실수를 덮어 쓰는 것을 방지하는 변수 선언 또한
, (결국를, 당신은 단지 Clear을 항상 수) :

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

이제 실제 질문에 대답하기 위해, IF 값이 목록에 있는지 확인하려면 Contains 메서드를 사용할 수 있습니다. 내가 제대로 이해하면

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

+1 : 제네릭 사용은 좋은 조언입니다 ... –

1

이 script1이 카메라이며, Script2는 문자에 : 값이 하지 않는 경우
, 그냥 표현의 앞에서 !을 넣어 존재 확인하십시오. 이 예제에서는 MainCamera 및 Character라고 부릅니다.

이제 내가 잘못 이해하지 않는 한 Script2에서 Script1의 Array에 액세스하려고합니다. 다른 답변은 매우 정확하지만 unity3D는 액세스에 약간의 해결 방법이 있습니다. 어쨌든

, Script2 내에서 이것을 사용 : 카메라

if(GameObject.Find("MainCamera").GetComponent<Script1>().aArray.Contains(5)) 
{ 
    //Do your code here 
} 
관련 문제