반응형

 

 

3D 구체(공을) 벽이나 바닥에 닿을시 계속 튕기게 (바운딩) 되게 해 보았습니다.

 

- 공에적용한 컴포넌트 

 1. Rigidbody 컴포넌트

 2. Sphere Collider 컴포넌트

 

 

 

- 설명

 

일반적으로 물리가 적용되어 공이 바운딩을 하긴 하나 여러차례 지날수록 바운딩 되지 않고 제자리에 잇거나 굴러 가기만 하죠. 

 

이번에는 공을 계속 튕기도록 해보았습니다. 

 

 

우선 아래 예시 움짤입니다

 

 

 

 

 

 

원리는 아래 그림처럼 공이 벽이나 바닥을 충돌했을때 충돌 접점을 알아낸후 
공과 충돌체의 역방향으로 Rigidbody.Addforce 하는겁니다

 

 

이제 공이 충돌되었을떄 처리 되는 코드 입니다.

void OnCollisionEnter(Collision collision)
    {
        
        
        
        ExcecuteReBounding();
    }
    
    
     void ExcecuteReBounding(Collision collision)
    {
      

        ContactPoint cp = collision.GetContact(0);
        Vector3 dir = Tr.position - cp.point; // 접촉지점에서부터 탄위치 의 방향
        rigidbody.AddForce((dir).normalized * 300f);
    }

 

Collision.GetContact 함수는 충돌시 충돌되는 접점의 정보를 반환해주는 함수 입니다.
반환되는 타입은 ContactPoint 이며  ContactPoint의 멤버변수인 Vector3 point 가

접촉된 지점을 의미합니다.

 

공의위치 - 접촉지점 = 밀어낼 방향 이 되므로 이방향으로 Addforce를 가해주면 공이 계속 튕기는 느낌을 줄수 있습니다.

 

 

이상 공 계속 튕기기 였습니다.

 

반응형

+ Recent posts