2014-06-10 3 views
0

충돌 후 클래스 구성 요소의 속성을 수정하려고 시도했지만 속성을 설정하지 않은 것 같습니다.유니티가 충돌 후 구성 요소 속성을 수정합니다.

void OnCollisionExit2D (Collision2D myCollision) { 
    Debug.Log ("OnCollisionExit2D in Player:" + myCollision); 
    CompoMyClass compo = myCollision.gameObject.GetComponent<CompoMyClass>(); 
    if (compo.collideOnce == true) 
     return; 
    compo.collideOnce = true; 
    // it always goes here :(
} 

이유를 알고 계십니까?

public class CompoMyClass : MonoBehaviour { 
    public bool collideOnce = false; 

    // Use this for initialization 
    void Start() { 
    } 

    // Update is called once per frame 
    void Update() { 
    } 
} 
+0

CompMyClass에서 코드를 게시 할 수 있습니까? collideOnce의 유형은 중요하며 속성에 대한 액세스 방법도 정확하게 일치합니다. – David

+0

마치 gameObject에 원본이 아닌 복사본입니다. – user3692403

답변

1

충돌 당 구성 요소의 동일한 인스턴스를보고 있는지 확인하십시오. 이 구성 요소가 여러 객체에 연결되어 있으면 각 객체는 걱정할 자체 collideOnce 변수를 갖게됩니다.

명확하게 각 개체에 태그를합니다이 작업을 수행하는 좋은 방법은,

또한
Guid ID = Guid.NewGuid(); 

당신이 충돌하고있는 객체가 올바른 구성 요소가 있는지 확인 방지와 같은 ID를 할당하는 것입니다 a NullReferenceException, 그리고 당신이 충돌을 제대로 끝내고 있는지. OnCollisionEnter로 전환 할 수 있습니다.

마지막으로, 그 값을 다른 곳에서는 false로 설정하지 않았는지 확인하십시오.

+0

고마워, 지금 완벽하게 작동 :) – user3692403

관련 문제