문제 증상
Ball을 Rigidbody를 Dynamic으로 설정시 Reflect를 아래와 같은 형태로 추가
private void OnCollisionEnter2D(Collision2D collision) { this.Direction = Vector2.Reflect(this.Direction, collision.contacts[0].normal); } private void FixedUpdate() { this.RigiBody.velocity = this.Direction * this.Speed * Time.fixedDeltaTime; }
정상적으로 Block에 부딪 혔을때 Reflect의 의해 Ball에 방향이 변경 됨.
하지만, 간혹 Ball이 Stopping 되는 증상이 발생
Debugging 결과 아래와 같이 OnCollisionStay2D()에서 반복적으로 Call되는것을 확인.
Resolution)
동일한 Block인 경우 강제로 Direction을 설정하여, 멈추는 것을 벗어나도록 수정
private void OnCollisionStay2D(Collision2D collision) { Block collisionBlock = collision.gameObject.GetComponent<Block>(); if (collisionBlock != null && this.LastCollisionBlock2DInStay == collisionBlock) { Debug.Log("MyBall::OnCollisionStay2D::It's the same as last collison block."); this.Direction = new Vector2(1, 1); } this.LastCollisionBlock2DInStay = collisionBlock; }