2014-09-30 1 views
0

크레이 테 2 볼 스프레이 & 홀 스프라이트가 있습니다.이 볼 스프라이트가 구멍에 들어가면 새 장면을로드해야합니다.TriggerEnter가 && 연산자를 사용하여 작동하지 않습니다. 2D

메신저는 AND 연산자로 여러 충돌을 찾으려고 시도하지만 작동하지 않습니다. 하나의 조건으로 시도하면 문제가 발생합니다. 이유는 모르겠습니다.

void OnTriggerEnter2D(Collider2D col) 
{ 
    if ((col.gameObject.tag == "ball2") && (col.gameObject.tag == "ball")) { 
     Application.LoadLevel("Main"); 
    } 

} 
+1

'col.gameObject.tag'는 문자열이다. 어떤 가치를 지녔는 지간에, 동시에 "공"과 "공 2"모두와 같을 수는 없습니다. 논리를 재고해야합니다. – user12864

+0

@ user12864 어떻게하면 다중 충돌을 감지 할 수 있습니까? – Uday

+0

크레이 테 2 볼 스프라이트와 홀 스프라이트가 있는데,이 2 볼 스프라이트가 구멍에 들어가면 새로운 장면을로드해야합니다. 내가하려는 일입니다. – Uday

답변

1

동일한 문자열을 두 개의 다른 값과 비교하기 때문에 논리적으로 볼 때, 제시 한 코드는 사실과 동일 할 수 없습니다. 첫 번째 테스트에서 false를 반환하면 false를 반환합니다. 첫 번째 테스트에서 true를 반환하면 첫 번째 테스트에서는 "ball2"로 평가되므로 항상 false를 반환합니다. 따라서 false를 반환합니다. 중 하나 (둘) 측이 사실은, (condition1 || condition2)

void OnTriggerEnter2D(Collider2D col) 
{ 
    if ((col.gameObject.tag == "ball2") 
     || (col.gameObject.tag == "ball")) 
    { 
     Application.LoadLevel("Main"); 
    } 
} 

는 PS, 그래, 난 비주얼 스튜디오의 코드를 좋아하는 나 연산자를 사용하는 경우는 true를 반환하는

당신이 찾고 있다면 특히 조건부 블록이 여러 줄인 경우에는 서식을 지정하십시오.

EDIT : 두 개의 개체를 충돌로 가져올 때까지 기다리는 중입니다. 이 경우에는 col 매개 변수 만 수신 했으므로 동일한 객체를 테스트 중이므로이 AND 테스트를 수행 할 수 없습니다. 신중하고 분리 된 이벤트로 각 충돌을 얻으므로 발생마다 플래그를 설정하고 두 플래그가 모두 설정되면 진행해야합니다.

private bool ball = false; 
private bool ball2 = false; 
void OnTriggerEnter2D(Collider2D col) 
{ 
    // Set each flag individually to allow for separate events triggering each 
    if(col.gameObject.tag == "ball") ball = true; 
    if(col.gameObject.tag == "ball2") ball2 = true; 

    // Perform operation once both flags have been set 
    if(ball && ball2) Application.LoadLevel("Main"); 
} 
+0

나는 양쪽 모두 true AND 연산을 검사하고있다. – Uday

+0

크레이 테 2 볼 스프라이트와 홀 스프라이트가 있는데,이 2 볼 스프라이트가 구멍에 들어가면 새로운 장면을로드해야합니다. 내가하려는 일입니다. – Uday

+0

두 개의 오브젝트가 공백을 입력 할 때까지 기다리려면 두 개의 개별 충돌을 테스트해야합니다. 각 충돌은 개별 이벤트로 발생하기 때문입니다. 질문을 잘못 해석 한 것에 대해 사과드립니다. 이에 따라 답변을 업데이트 할 수 있습니다. – David

0

두 개의 서로 다른 GameObject가있는 두 개의 충돌기를 추가하고 두 개의 서로 다른 충돌 스크립트를 추가하십시오. 액세스 다른 스크립트에서 하나 개의 변수 그 다음에 가서 사실이라면 ...

void OnTriggerEnter2D(Collider2D col) // Collider1 Script 
{ 
    if ((col.gameObject.tag == "ball2")) 
    { 
     firstcollider = true; 
    } 
} 


void OnTriggerEnter2D(Collider2D col) // Collider2 Script 
{ 
if (Collider1.firstcollider == true) && (col.gameObject.tag == "ball")) 
{ 
    Application.LoadLevel("Main"); 
} 
} 

당신이 알고 해달라고하면 구글은 다른 스크립트 하나의 스크립트에서 변수에 액세스를 참조하십시오. 나는 이것이 코드를위한 최선의 방법이라는 것을 알지 못한다. 단지 균열에 대해서 ...

관련 문제