1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | private void OnTriggerEnter2D(Collider2D collision) { if(collision.tag == "Mob") { MobManager.Instance.cnt = true; } } private void OnTriggerStay2D(Collider2D collision) { if(collision.gameObject.transform.tag == "Mob") { if(MobManager.Instance.cnt) { MobManager.Instance.cnt = false; Destroy(this.gameObject); collision.gameObject.GetComponent<Civil>()._hp--; } } } ------------------------------------------------------------------------------------------------------ private void OnTriggerEnter2D(Collider2D collision) { if(collision.tag == "Mob") { MobManager.Instance.cnt = true; if(MobManager.Instance.cnt) { MobManager.Instance.cnt = false; Destroy(this.gameObject); collision.gameObject.GetComponent<Civil>()._hp--; } } } | cs |
원래 아래껄로 쓰다가 위에껄로 하니깐 잘되는데 이 두개코드의 차이점이 뭔가요??..
stay 말고 없는거같은데
Stay는 처음 충돌한 후 다음 피직스 업데이트부터 돌아가는걸로 앎. 전 글 보고 뭘 말하는지 알았는데, 몬스터가 4마리일때 밑 코드는 triggerenter를 모든 몬스터가 발동시켰고, 당연히 거기서 cnt를 true로 바꿨으니깐 모든 몬스터에서 if문을 통과하지. 윗 코드는 triggerenter에서 cnt를 true 4번 바꾸고, 다음 피직스 업데이트에서 한놈이 cnt를 false로 바꾼 이후로는 안도니깐 한번만 발동함
stay는 충돌 매 프레임마다 호출, 내용물이 크면 그 만큼 퍼포먼스가 내려가니 꼭 필요하거나 간단한 처리만 넣어야함